wlroots/include
twilligon 5d150267e2 render/vulkan: clear blend image on first use
The two-pass blend image is created with VK_IMAGE_LAYOUT_UNDEFINED, so
on its first use loadOp=LOAD loads uninitialized memory. This oughtn't
be an issue, as we render onto it before we read it. These renders are
blends, so even opaque content is rendered with reference to an uninit
dst. This too ought to be fine: src*1 + dst*0 = src for all finite dst.

But the blend image pixfmt is VK_FORMAT_R16G16B16A16_SFLOAT, so uninit
pixels can be NaN, inf, or -inf, and now src*1 + dst*0 = NaN/inf/-inf.
This is bad enough assuming the uninitialized blend image holds random
bytes (2048/65536 values are not finite), even worse on any driver/GPU
with a framebuffer compression scheme that so happens to reliably read
NaNs from any uninitialized compressed image...

Most Mesa drivers happen not to do this perfectly valid thing, so this
is only reliably a problem (afaict) for honeykrisp i.e. AGX i.e. Asahi
Linux i.e. Apple Silicon, where after an upgrade to wlroots 0.20, sway
renders a black screen forever, unless you get quite lucky spamming VT
switches, in which case there's flickery garbage on exactly one of the
two swapchain buffers.

The blend image persists across frames, so it suffices to clear before
first real use. Rather than clear by hand, make a loadOp=CLEAR variant
of the render pass and use it for that first frame only. Adding a pass
sounds heavy, but render pass compatibility ignores loadOp and layouts
such that the new pass reuses the pipelines and framebuffer, and costs
one VkRenderPass object but not the usual pipeline/shader (re)compile.
2026-06-12 18:11:23 +00:00
..
backend Drop "restrict" keyword 2026-05-25 08:42:35 +00:00
interfaces types/wlr_input_device: move init and finish function to private API 2022-03-07 16:37:41 +00:00
render render/vulkan: clear blend image on first use 2026-06-12 18:11:23 +00:00
types types/wlr_buffer: add buffer_get_drm_format helper function 2026-02-06 13:53:46 +00:00
util util/rect_union: Limit rect_union_add to 1024 rects 2026-05-01 12:50:04 +00:00
wlr wlr_xdg_decoration_v1: support version 2 2026-05-31 08:03:46 +00:00
xcursor Add some missing includes/declarations 2023-06-05 21:06:19 +00:00
xwayland treewide: make type-check helpers take const pointers 2026-03-06 16:04:21 +08:00
meson.build render/color: add fallback stub when LCMS2 is disabled 2024-06-04 17:45:51 +00:00