These seem to store very bogus results. Luckily there is some code
that converts srgb->linear already, so just making the descriptor
format UNORM should work.
Fixes: 588185eb6b
"radv/meta: add srgb conversion to end of resolve shader."
Reviewed-by: Dave Airlie <airlied@redhat.com>
tags/17.3-branchpoint
@@ -402,7 +402,7 @@ void radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer, | |||
.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, | |||
.image = radv_image_to_handle(dest_image), | |||
.viewType = radv_meta_get_view_type(dest_image), | |||
.format = dest_image->vk_format, | |||
.format = vk_to_non_srgb_format(dest_image->vk_format), | |||
.subresourceRange = { | |||
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, | |||
.baseMipLevel = region->dstSubresource.mipLevel, |
@@ -465,4 +465,27 @@ vk_format_get_component_bits(VkFormat format, | |||
} | |||
} | |||
static inline VkFormat | |||
vk_to_non_srgb_format(VkFormat format) | |||
{ | |||
switch(format) { | |||
case VK_FORMAT_R8_SRGB : | |||
return VK_FORMAT_R8_UNORM; | |||
case VK_FORMAT_R8G8_SRGB: | |||
return VK_FORMAT_R8G8_UNORM; | |||
case VK_FORMAT_R8G8B8_SRGB: | |||
return VK_FORMAT_R8G8B8_UNORM; | |||
case VK_FORMAT_B8G8R8_SRGB: | |||
return VK_FORMAT_B8G8R8_UNORM; | |||
case VK_FORMAT_R8G8B8A8_SRGB : | |||
return VK_FORMAT_R8G8B8A8_UNORM; | |||
case VK_FORMAT_B8G8R8A8_SRGB: | |||
return VK_FORMAT_B8G8R8A8_UNORM; | |||
case VK_FORMAT_A8B8G8R8_SRGB_PACK32: | |||
return VK_FORMAT_A8B8G8R8_UNORM_PACK32; | |||
default: | |||
return format; | |||
} | |||
} | |||
#endif /* VK_FORMAT_H */ |