render/vulkan: track and use _UNORM variants of _SRGB formats

Later commits will start using _SRGB image views again,
where appropriate.
This commit is contained in:
Manuel Stoeckl 2023-10-21 21:04:04 -04:00 committed by Simon Ser
parent 6287b61025
commit eab89d6c76
4 changed files with 16 additions and 15 deletions

View file

@ -87,7 +87,7 @@ int vulkan_find_mem_type(struct wlr_vk_device *device,
struct wlr_vk_format { struct wlr_vk_format {
uint32_t drm; uint32_t drm;
VkFormat vk; VkFormat vk;
bool is_srgb; VkFormat vk_srgb; // sRGB version of the format, or 0 if nonexistent
bool is_ycbcr; bool is_ycbcr;
}; };

View file

@ -14,33 +14,33 @@ static const struct wlr_vk_format formats[] = {
// order. // order.
{ {
.drm = DRM_FORMAT_R8, .drm = DRM_FORMAT_R8,
.vk = VK_FORMAT_R8_SRGB, .vk = VK_FORMAT_R8_UNORM,
.is_srgb = true, .vk_srgb = VK_FORMAT_R8_SRGB,
}, },
{ {
.drm = DRM_FORMAT_GR88, .drm = DRM_FORMAT_GR88,
.vk = VK_FORMAT_R8G8_SRGB, .vk = VK_FORMAT_R8G8_UNORM,
.is_srgb = true, .vk_srgb = VK_FORMAT_R8G8_SRGB,
}, },
{ {
.drm = DRM_FORMAT_RGB888, .drm = DRM_FORMAT_RGB888,
.vk = VK_FORMAT_B8G8R8_SRGB, .vk = VK_FORMAT_B8G8R8_UNORM,
.is_srgb = true, .vk_srgb = VK_FORMAT_B8G8R8_SRGB,
}, },
{ {
.drm = DRM_FORMAT_BGR888, .drm = DRM_FORMAT_BGR888,
.vk = VK_FORMAT_R8G8B8_SRGB, .vk = VK_FORMAT_R8G8B8_UNORM,
.is_srgb = true, .vk_srgb = VK_FORMAT_R8G8B8_SRGB,
}, },
{ {
.drm = DRM_FORMAT_XRGB8888, .drm = DRM_FORMAT_XRGB8888,
.vk = VK_FORMAT_B8G8R8A8_SRGB, .vk = VK_FORMAT_B8G8R8A8_UNORM,
.is_srgb = true, .vk_srgb = VK_FORMAT_B8G8R8A8_SRGB,
}, },
{ {
.drm = DRM_FORMAT_XBGR8888, .drm = DRM_FORMAT_XBGR8888,
.vk = VK_FORMAT_R8G8B8A8_SRGB, .vk = VK_FORMAT_R8G8B8A8_UNORM,
.is_srgb = true, .vk_srgb = VK_FORMAT_R8G8B8A8_SRGB,
}, },
// The Vulkan _SRGB formats correspond to unpremultiplied alpha, but // The Vulkan _SRGB formats correspond to unpremultiplied alpha, but
// the Wayland protocol specifies premultiplied alpha on electrical values // the Wayland protocol specifies premultiplied alpha on electrical values

View file

@ -768,7 +768,7 @@ static struct wlr_vk_render_buffer *create_render_buffer(
goto error; goto error;
} }
bool has_blending_buffer = !fmt->format.is_srgb; bool has_blending_buffer = !fmt->format.vk_srgb || true /* temporary */;
buffer->render_setup = find_or_create_render_setup( buffer->render_setup = find_or_create_render_setup(
renderer, &fmt->format, has_blending_buffer); renderer, &fmt->format, has_blending_buffer);

View file

@ -374,7 +374,8 @@ struct wlr_vk_texture_view *vulkan_texture_get_or_create_view(struct wlr_vk_text
static void texture_set_format(struct wlr_vk_texture *texture, static void texture_set_format(struct wlr_vk_texture *texture,
const struct wlr_vk_format *format) { const struct wlr_vk_format *format) {
texture->format = format; texture->format = format;
texture->transform = !format->is_ycbcr && format->is_srgb ? texture->transform = !format->is_ycbcr &&
(format->vk_srgb && false /* temporary */) ?
WLR_VK_TEXTURE_TRANSFORM_IDENTITY : WLR_VK_TEXTURE_TRANSFORM_SRGB; WLR_VK_TEXTURE_TRANSFORM_IDENTITY : WLR_VK_TEXTURE_TRANSFORM_SRGB;
const struct wlr_pixel_format_info *format_info = const struct wlr_pixel_format_info *format_info =