Files
designcraft/docs/hardware-parity.md
T
aiongg 279336c445 Startup: pick the GPU that drives the display, restart on the next adapter or backend, and log startup errors
Ported from VectorCraft's start-up fixes (#502, #545, #651, the display-GPU
choice, #806, #964) and reconciled with the backend fallback of #297:

- The app picks the window's adapter itself (eframe's native_adapter_selector,
  apps/designcraft/src/gpu.rs): adapters that can't present never, then
  WGPU_ADAPTER_NAME, hardware before software, native backends before OpenGL,
  the GPU that drives the primary display (Windows EnumDisplayDevices through
  winsafe, Linux /sys/class/drm), the power preference (WGPU_POWER_PREF;
  otherwise power saving on Windows and macOS, the system's order elsewhere),
  then DX12 before Vulkan. Every adapter and the choice are logged.
- wgpu's indirect-call validation is off (WGPU_VALIDATION_INDIRECT_CALL=1 turns
  it back on): its compute shader failed to compile on an Intel Mac and lost
  the Metal device (#334, first error).
- run_native runs under catch_unwind. A wgpu error or a panic in wgpu,
  egui-wgpu or naga during the first frames, or a first frame that doesn't
  reach the screen in 20 s, starts the app again without that adapter
  (DESIGNCRAFT_GPU_SKIP; exec on Unix, a new process on Windows). When no
  adapter of the start's backends is left, it starts again with the next
  backend. Each restart leaves out one more adapter or backend, so they end.
  Adapters without PCI ids (Metal) are keyed by name.
- The backend fallback (gpu/backend.rs, gpu.json) stays for driver faults that
  take the process down. Windows tries DirectX 12, then OpenGL, then Vulkan,
  each in its own instance: Vulkan last because creating its instance loads
  every installed Vulkan driver, and OpenGL kept out of the DX12 instance
  because creating it crashed in AMD's atio6axx.dll (#167).
- main returns an ExitCode and logs why the app stopped to standard error and
  the log file, which is all a Windows start without a console leaves (#273).

README, architecture, gaps, hardware and target-app parity docs and ROADMAP
describe the choice, the restarts and the variables.
2026-10-10 20:26:06 +00:00

4.0 KiB
Raw Blame History

Hardware and platform parity

Last reviewed: 2026-10-10 · Last updated: 2026-10-10 · Change: major (first version) · Target: Adobe InDesign 2026 (21.6)

What InDesign does with hardware, per platform, against DesignCraft. Layout is not a GPU-hungry workload, so this dimension carries little weight, but a start that fails on a graphics driver loses the user entirely. Overall numbers: target-app-parity.md.

Hardware: ~45% ready, 20–40 h. Platforms: ~55% ready, 40–80 h. (estimated)

Hardware features

Feature InDesign 2026 DesignCraft macOS Windows Linux Web
GPU display (canvas) GPU Performance: GPU preview, animated zoom (Metal on macOS; Windows with supported GPUs) canvas rasterized on the CPU (vello_cpu, SIMD, multithreaded), presented by wgpu (Metal) wgpu DirectX 12 (since #297), Vulkan/OpenGL fallback Vulkan, OpenGL fallback WebGPU, WebGL2 fallback
Start-up on any GPU robust Metal device lost on Intel Macs (#334) AMD OpenGL crash (#167), launch failures (#273) some reports (#192, #220)
Backend fallback n/a gpu.json skips a backend whose start never showed a frame (#297) same same
Adapter choice and restart n/a power saving; a GPU that fails or hangs at start-up is left out and the app starts again on the other one; indirect-call check off (#334) the GPU that drives the primary display (EnumDisplayDevices); DirectX 12 adapters, then OpenGL, then Vulkan the GPU that drives the panel or a monitor (sysfs), then the system's order
Animated / scrubby zoom ✓ (GPU) ✓ (CPU tiles, damage regions) ✓ ✓ ✓
HiDPI / Retina ✓ ✓ ✓ ✓ ✓
UI scaling ✓ ✓ (menus and dialogs usable at larger scales, #281) ✓ ✓ ✓
Multi-monitor, floating document windows ✓ ~ one window; New Window for the same document ~ ~ ✗
Printing system print with PPDs, PostScript, separations PDF to lpr ✗ (no lpr) PDF to lpr (CUPS) browser download
Colour-managed display (monitor profile) ✓ ✗ (working CMYK profile simulated; monitor profile not applied) ✗ ✗ ✗
Touch / pen Touch workspace (Windows), gestures trackpad pinch/scroll ~ ~ ~
Multi-core composition single-threaded composer per story (documented by Adobe as mostly single-threaded) parallel story composition (rayon), 6.7× on the sample ✓ ✓ single-threaded

Platforms

Platform InDesign 2026 DesignCraft Evidence
macOS (Apple silicon, Intel) ✓ ✓ primary development platform Intel GPU start failure (#334); window controls misaligned (#333); font managers (#327)
Windows x64 ✓ ~ builds and installers ship copy/paste and context menus (#351, #312), installer confusion (#64), launch failures (#273, #167)
Windows ARM64 ✓ ~ build (CI workflow) not exercised at runtime
Linux (x86_64, aarch64) ✗ ~ deb, AppImage, Flatpak clipboard (#164), panels don't scroll (#267), CJK UI font (#332)
FreeBSD ✗ ~ build
Web (WASM) ✗ (InDesign on the web is not shipped) ~ same UI, file picker, downloads; no control channel

DesignCraft runs on more platforms than InDesign; what's missing is runtime testing on the ones the developers don't use daily.

Remaining effort

Work Opus 5.5 h
Start-up robustness on every GPU: confirm #297 with reporters, Intel Metal fix, CPU-only present fallback 15–30
Printing on Windows (system print API) and print presets 15–30 (counted in file-format-parity.md)
Monitor profile in display colour management 5–10
Windows and Linux runtime smoke tests in CI 20–40
Multi-window document views 15–30
Hardware + platforms 60–120

Revision history

Date Change Summary
2026-10-10 major Created from the code, InDesign 2026's GPU Performance features and the issue tracker