From 36e0f9507dc7a75f769a3f7f6fa6ccfaf7478adf Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Fri, 25 Mar 2022 19:44:17 -0500 Subject: [PATCH] vulkan: Only be clever about vk_image_view::view_format for normal views For color view of depth views, just set whatever format they asked for. Reviewed-by: Iago Toral Quiroga Part-of: --- src/vulkan/runtime/vk_image.c | 55 ++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/src/vulkan/runtime/vk_image.c b/src/vulkan/runtime/vk_image.c index 87beafdcaa8..65a4eaa636d 100644 --- a/src/vulkan/runtime/vk_image.c +++ b/src/vulkan/runtime/vk_image.c @@ -309,6 +309,7 @@ vk_image_view_init(struct vk_device *device, assert(util_format_get_blocksize(vk_format_to_pipe_format(image->format)) == util_format_get_blocksize(vk_format_to_pipe_format(pCreateInfo->format))); image_view->aspects = range->aspectMask; + image_view->view_format = pCreateInfo->format; } else { image_view->aspects = vk_image_expand_aspect_mask(image, range->aspectMask); @@ -344,34 +345,34 @@ vk_image_view_init(struct vk_device *device, if (!(image->create_flags & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)) assert(pCreateInfo->format == image->format); - } - /* Restrict the format to only the planes chosen. - * - * For combined depth and stencil images, this means the depth-only or - * stencil-only format if only one aspect is chosen and the full combined - * format if both aspects are chosen. - * - * For single-plane color images, we just take the format as-is. For - * multi-plane views of multi-plane images, this means we want the full - * multi-plane format. For single-plane views of multi-plane images, we - * want a format compatible with the one plane. Fortunately, this is - * already what the client gives us. The Vulkan 1.2.184 spec says: - * - * "If image was created with the VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT and - * the image has a multi-planar format, and if - * subresourceRange.aspectMask is VK_IMAGE_ASPECT_PLANE_0_BIT, - * VK_IMAGE_ASPECT_PLANE_1_BIT, or VK_IMAGE_ASPECT_PLANE_2_BIT, format - * must be compatible with the corresponding plane of the image, and the - * sampler to be used with the image view must not enable sampler Y′CBCR - * conversion." - */ - if (image_view->aspects == VK_IMAGE_ASPECT_STENCIL_BIT) { - image_view->view_format = vk_format_stencil_only(pCreateInfo->format); - } else if (image_view->aspects == VK_IMAGE_ASPECT_DEPTH_BIT) { - image_view->view_format = vk_format_depth_only(pCreateInfo->format); - } else { - image_view->view_format = pCreateInfo->format; + /* Restrict the format to only the planes chosen. + * + * For combined depth and stencil images, this means the depth-only or + * stencil-only format if only one aspect is chosen and the full + * combined format if both aspects are chosen. + * + * For single-plane color images, we just take the format as-is. For + * multi-plane views of multi-plane images, this means we want the full + * multi-plane format. For single-plane views of multi-plane images, we + * want a format compatible with the one plane. Fortunately, this is + * already what the client gives us. The Vulkan 1.2.184 spec says: + * + * "If image was created with the VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT + * and the image has a multi-planar format, and if + * subresourceRange.aspectMask is VK_IMAGE_ASPECT_PLANE_0_BIT, + * VK_IMAGE_ASPECT_PLANE_1_BIT, or VK_IMAGE_ASPECT_PLANE_2_BIT, + * format must be compatible with the corresponding plane of the + * image, and the sampler to be used with the image view must not + * enable sampler Y′CBCR conversion." + */ + if (image_view->aspects == VK_IMAGE_ASPECT_STENCIL_BIT) { + image_view->view_format = vk_format_stencil_only(pCreateInfo->format); + } else if (image_view->aspects == VK_IMAGE_ASPECT_DEPTH_BIT) { + image_view->view_format = vk_format_depth_only(pCreateInfo->format); + } else { + image_view->view_format = pCreateInfo->format; + } } image_view->swizzle = (VkComponentMapping) {