diff --git a/render/vulkan/pixel_format.c b/render/vulkan/pixel_format.c index 90fb5f54..ced6eb24 100644 --- a/render/vulkan/pixel_format.c +++ b/render/vulkan/pixel_format.c @@ -32,11 +32,6 @@ static const struct wlr_vk_format formats[] = { .vk = VK_FORMAT_R8G8B8_SRGB, .is_srgb = true, }, - { - .drm = DRM_FORMAT_ARGB8888, - .vk = VK_FORMAT_B8G8R8A8_SRGB, - .is_srgb = true, - }, { .drm = DRM_FORMAT_XRGB8888, .vk = VK_FORMAT_B8G8R8A8_SRGB, @@ -47,12 +42,16 @@ static const struct wlr_vk_format formats[] = { .vk = VK_FORMAT_R8G8B8A8_SRGB, .is_srgb = true, }, + // The Vulkan _SRGB formats correspond to unpremultiplied alpha, but + // the Wayland protocol specifies premultiplied alpha on electrical values + { + .drm = DRM_FORMAT_ARGB8888, + .vk = VK_FORMAT_B8G8R8A8_UNORM, + }, { .drm = DRM_FORMAT_ABGR8888, - .vk = VK_FORMAT_R8G8B8A8_SRGB, - .is_srgb = true, + .vk = VK_FORMAT_R8G8B8A8_UNORM, }, - // Vulkan packed formats have the same channel order as DRM formats on // little endian systems. #if WLR_LITTLE_ENDIAN