radv: fix image view creation for depth and stencil only
authorDave Airlie <airlied@redhat.com>
Tue, 15 Nov 2016 06:46:50 +0000 (06:46 +0000)
committerDave Airlie <airlied@redhat.com>
Sun, 20 Nov 2016 22:58:03 +0000 (08:58 +1000)
This fixes the image view for sampling just the depth.

It removes some pointless swizzle code, and adds
a missing case for the x8_d24 format.

Fixes:
dEQP-VK.renderpass.formats.d32_sfloat_s8_uint.input.*
dEQP-VK.renderpass.formats.d24_unorm_s8_uint.input.*
dEQP-VK.renderpass.formats.x8_d24_unorm_pack32.input.*

Cc: "13.0" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/amd/vulkan/radv_formats.c
src/amd/vulkan/radv_image.c

index 76d5fa1448c1923117eb4c43c20a744724cb5099..fe786b3a4931d94fa3f89472515b08ae3d5ca82d 100644 (file)
@@ -154,6 +154,7 @@ uint32_t radv_translate_tex_dataformat(VkFormat format,
                case VK_FORMAT_D16_UNORM:
                        return V_008F14_IMG_DATA_FORMAT_16;
                case VK_FORMAT_D24_UNORM_S8_UINT:
+               case VK_FORMAT_X8_D24_UNORM_PACK32:
                        return V_008F14_IMG_DATA_FORMAT_8_24;
                case VK_FORMAT_S8_UINT:
                        return V_008F14_IMG_DATA_FORMAT_8;
index b63792daccb4c123ee4354c3e624b0fe3faa2e78..04e0861ef0a0378877a291ee23609ecf2bc01da0 100644 (file)
@@ -267,17 +267,7 @@ si_make_texture_descriptor(struct radv_device *device,
 
        if (desc->colorspace == VK_FORMAT_COLORSPACE_ZS) {
                const unsigned char swizzle_xxxx[4] = {0, 0, 0, 0};
-               const unsigned char swizzle_yyyy[4] = {1, 1, 1, 1};
-
-               switch (vk_format) {
-               case VK_FORMAT_X8_D24_UNORM_PACK32:
-               case VK_FORMAT_D24_UNORM_S8_UINT:
-               case VK_FORMAT_D32_SFLOAT_S8_UINT:
-                       vk_format_compose_swizzles(mapping, swizzle_yyyy, swizzle);
-                       break;
-               default:
-                       vk_format_compose_swizzles(mapping, swizzle_xxxx, swizzle);
-               }
+               vk_format_compose_swizzles(mapping, swizzle_xxxx, swizzle);
        } else {
                vk_format_compose_swizzles(mapping, desc->swizzle, swizzle);
        }
@@ -771,8 +761,13 @@ radv_image_view_init(struct radv_image_view *iview,
        iview->vk_format = pCreateInfo->format;
        iview->aspect_mask = pCreateInfo->subresourceRange.aspectMask;
 
-       if (iview->aspect_mask == VK_IMAGE_ASPECT_STENCIL_BIT)
+       if (iview->aspect_mask == VK_IMAGE_ASPECT_STENCIL_BIT) {
                is_stencil = true;
+               iview->vk_format = vk_format_stencil_only(iview->vk_format);
+       } else if (iview->aspect_mask == VK_IMAGE_ASPECT_DEPTH_BIT) {
+               iview->vk_format = vk_format_depth_only(iview->vk_format);
+       }
+
        iview->extent = (VkExtent3D) {
                .width  = radv_minify(image->extent.width , range->baseMipLevel),
                .height = radv_minify(image->extent.height, range->baseMipLevel),
@@ -790,7 +785,7 @@ radv_image_view_init(struct radv_image_view *iview,
 
        si_make_texture_descriptor(device, image, false,
                                   iview->type,
-                                  pCreateInfo->format,
+                                  iview->vk_format,
                                   &pCreateInfo->components,
                                   0, radv_get_levelCount(image, range) - 1,
                                   range->baseArrayLayer,