You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[BUG] Affinity V3 freezes completely on maximum zoom level (NVIDIA hybrid / Fedora Wayland) #134
Launch Affinity V3 / Unified (installed via AffinityLinuxInstaller.py / RUM) on Fedora 44 KDE Wayland.
Open or create any document or canvas.
Scroll to zoom in continuously until reaching the absolute maximum zoom scale limit.
On the final zoom scroll tick, the canvas and UI freeze.
Expected behaviour
Zooming to maximum scale should stop smoothly at the max scale limit without freezing or locking the UI event loop.
Screenshots
Application UI locks up completely on max zoom
Logs
OS Kernel: Linux 7.1.5-201.fc44.x86_64
Wine: ElementalWarrior-wine-11.12
Process State at Max Zoom Freeze:
- Process PID: State S/R, 104 threads
- Wait channels: 71 threads on ntsync_schedule, 13 on futex_do_wait
- GPU compute: 0%, Memory: 233 MiB allocated
- opencl.dll: Disabled via DLL override
Update: The exact zoom level where the freeze occurs is 8,232,116% (8.23 million percent zoom).
This corresponds to the single-precision floating point mantissa limit ($2^{23} = 8,388,608$). At 8,232,116%, floating point coordinate precision drops to 0, which causes Wine's d2d1 matrix transformation calculation to overflow into an infinite loop under XWayland.
Clamping the matrix scale transformation in the custom d2d1.dll wrapper below $2^{23}$ (e.g. at 5,000,000%) should prevent this float overflow freeze.
Great root-cause work, the 8,232,116% number matching the 2^23 float32 mantissa limit almost exactly is exactly right.
Traced it further: the actual infinite loop is in d2d_point_on_bezier_segment() in WineFix's d2d1.dll source, a hit-testing function that recursively subdivides a stroked bezier curve until its error estimate drops below tolerance. Unlike a sibling function in the same file, it had no recursion depth limit. Past your zoom threshold, the transformed coordinates it computes exceed float32 precision, the error estimate stops shrinking, and it recurses forever instead of terminating.
Opened a fix upstream: noahc3/AffinityPluginLoader#58, adds the same depth cap the sibling function already uses. I could not fully build and test the patched d2d1.dll on my machine (an unrelated, pre-existing build issue in a different file blocks the full build here), so if anyone can build WineFix locally, testing this at your reported zoom level would help a lot before it merges.
Activity
DenisJosifoski commentedon Aug 5, 2026
Update: The exact zoom level where the freeze occurs is 8,232,116% (8.23 million percent zoom).
This corresponds to the single-precision floating point mantissa limit ($2^{23} = 8,388,608$ ). At 8,232,116%, floating point coordinate precision drops to 0, which causes Wine's
d2d1matrix transformation calculation to overflow into an infinite loop under XWayland.Clamping the matrix scale transformation in the custom$2^{23}$ (e.g. at 5,000,000%) should prevent this float overflow freeze.
d2d1.dllwrapper belowGamedirection commentedon Aug 22, 2026
Great root-cause work, the 8,232,116% number matching the 2^23 float32 mantissa limit almost exactly is exactly right.
Traced it further: the actual infinite loop is in
d2d_point_on_bezier_segment()in WineFix'sd2d1.dllsource, a hit-testing function that recursively subdivides a stroked bezier curve until its error estimate drops below tolerance. Unlike a sibling function in the same file, it had no recursion depth limit. Past your zoom threshold, the transformed coordinates it computes exceed float32 precision, the error estimate stops shrinking, and it recurses forever instead of terminating.Opened a fix upstream: noahc3/AffinityPluginLoader#58, adds the same depth cap the sibling function already uses. I could not fully build and test the patched
d2d1.dllon my machine (an unrelated, pre-existing build issue in a different file blocks the full build here), so if anyone can build WineFix locally, testing this at your reported zoom level would help a lot before it merges.