mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-28 11:57:16 -06:00
* GPU canvas: redraw mip levels of 128 px or less whole; AMD Vulkan corrupted them after partial updates (#6418) On an RX 6900 XT with Vulkan (driver 26.8.1), a regenerate_mips pass that drew only the damaged part of a small mip level corrupted texels outside its scissor, at the level's top-left; DX12 on the same card was fine. A sweep of 15 canvas sizes x 8-bit/float x 6 dabs found 66 of 180 cases corrupt on Vulkan, every corrupted level at most 64 px; sampling the levels in a shader shows the same pixels, so it is the texture contents, not the readback. mip_damage (regenerate_mips's damage arithmetic) now redraws levels of at most WHOLE_MIP_SIDE (128 px) whole on every adapter: no new passes or textures, only a larger scissor on the smallest levels. With it the sweep is clean on both backends. Tests: small_mip_levels_are_redrawn_whole (the rule, no GPU) and partial_updates_match_a_full_rebuild_at_every_mip_level (fails on the Radeon over Vulkan without the change, passes with it, like canvas_mips_preserve_opaque_pixels_and_partial_updates). * contributors: add 00xJS (GitHub profile name) * Mip sweep test: hold the GPU lock like the other GPU tests (#6438 review) --------- Co-authored-by: 00xJ0 <56056764+00xJ0@users.noreply.github.com>