From d2cf3cad917758b64f700bebe50406fc81337044 Mon Sep 17 00:00:00 2001 From: Jonathan Marek Date: Mon, 18 Nov 2019 18:42:12 -0500 Subject: [PATCH] turnip: fix sRGB GMEM clear Signed-off-by: Jonathan Marek Reviewed-by: Kristian H. Kristensen --- src/freedreno/vulkan/tu_formats.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/freedreno/vulkan/tu_formats.c b/src/freedreno/vulkan/tu_formats.c index 35dfe04b124..a650e2f133f 100644 --- a/src/freedreno/vulkan/tu_formats.c +++ b/src/freedreno/vulkan/tu_formats.c @@ -556,18 +556,29 @@ tu_get_format_channel_description(const struct vk_format_description *desc, } static union tu_clear_component_value -tu_get_clear_component_value(const VkClearValue *val, int comp, bool color) +tu_get_clear_component_value(const VkClearValue *val, int comp, + enum vk_format_colorspace colorspace) { + assert(comp < 4); + union tu_clear_component_value tmp; - if (color) { - assert(comp < 4); - tmp.uint32 = val->color.uint32[comp]; - } else { + switch (colorspace) { + case VK_FORMAT_COLORSPACE_ZS: assert(comp < 2); if (comp == 0) tmp.float32 = val->depthStencil.depth; else tmp.uint32 = val->depthStencil.stencil; + break; + case VK_FORMAT_COLORSPACE_SRGB: + if (comp < 3) { + tmp.float32 = util_format_linear_to_srgb_float(val->color.float32[comp]); + break; + } + default: + assert(comp < 4); + tmp.uint32 = val->color.uint32[comp]; + break; } return tmp; @@ -614,7 +625,7 @@ tu_pack_clear_value(const VkClearValue *val, VkFormat format, uint32_t buf[4]) } union tu_clear_component_value v = tu_get_clear_component_value( - val, comp, desc->colorspace != VK_FORMAT_COLORSPACE_ZS); + val, comp, desc->colorspace); /* move to the next uint32_t when there is not enough space */ assert(ch->size <= 32); -- 2.30.2