Files
photocraft/crates/gpu/Cargo.toml
David MannandClaude Opus 5.5 afb7de2d3a Performance: brush dab on a CMYK document within budget (#5108)
A brush dab on an A4 300 ppi CMYK page spent ~5 ms per touched tile in the
GPU canvas's tile upload: every pixel of the 256x256 tile went through the
CMYK -> sRGB transform on one thread. CMYK and Lab tiles now convert in
16-row bands in parallel, and a run of identical pixels (the transparent or
flat area around a dab) is converted once. Texels are bit-identical to the
per-pixel conversion.

The band workers enter the document's CMYK profile scope; before, the rayon
workers converting tiles did not, so a CMYK document tagged with its own
profile uploaded tiles through the built-in coated CMYK instead.

P33 (Windows 11, 32 threads, RTX 5070 Ti, 15 reps): p95 13.7-16.8 ms -> 2.6-3.3 ms.
enforce stays false: the committed baseline machine measures every row
over budget, so it is left for the next baseline.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-13 18:10:21 +02:00

32 lines
931 B
TOML

[package]
name = "photocraft-gpu"
version.workspace = true
edition.workspace = true
license.workspace = true
[lints]
workspace = true
[dependencies]
half = "2"
photocraft-geom = { workspace = true }
photocraft-color = { workspace = true }
photocraft-raster = { workspace = true }
photocraft-doc = { workspace = true }
photocraft-compose = { workspace = true }
# Same major version as eframe's wgpu so the app's device can be shared.
wgpu = { version = "30", default-features = false, features = ["std", "wgsl"] }
log = { workspace = true }
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
# Effect distance fields are computed in parallel bands.
rayon = { workspace = true }
[dev-dependencies]
wgpu = { version = "30" }
pollster = "1"
# Shape layers in the effect parity tests.
photocraft-vector = { workspace = true }
# A document-tagged CMYK profile in the tile conversion test.
photocraft-cms = { workspace = true }