mirror of
https://github.com/storytold/designcraft.git
synced 2026-10-26 11:16:50 -06:00
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.
4.0 KiB
4.0 KiB
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 |