render/vulkan: don't use UNDEFINED layout for imported DMA-BUFs

UNDEFINED when used as source layout means that the contents of
the underlying memory becomes undefined. This isn't what we want
here: we don't want to mutate the imported pixel data.

The Vulkan spec isn't really clear what the proper value should be
here, but after discussing with driver developers [1] it seems like
UNDEFINED isn't the right one. The recommendation is to use GENERAL
instead.

[1]: https://github.com/ValveSoftware/gamescope/issues/356

(cherry picked from commit 2c4d3ad12d)
This commit is contained in:
Simon Ser 2024-05-14 13:14:28 +02:00 committed by Simon Zeni
parent e8cf5b1c2a
commit 60885c639b
2 changed files with 2 additions and 4 deletions

View file

@ -791,7 +791,7 @@ void wlr_vk_texture_get_image_attribs(struct wlr_texture *texture,
attribs->image = vk_texture->image;
attribs->format = vk_texture->format->vk;
attribs->layout = vk_texture->transitioned ?
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL : VK_IMAGE_LAYOUT_UNDEFINED;
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL : VK_IMAGE_LAYOUT_GENERAL;
}
bool wlr_vk_texture_has_alpha(struct wlr_texture *texture) {