radv: Fix hang width YCBCR array textures.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Mon, 29 Apr 2019 19:34:28 +0000 (21:34 +0200)
committerBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Thu, 2 May 2019 00:29:51 +0000 (02:29 +0200)
Forgot to apply the width/height divisor for CB writes resulting in
the CB using larger than expected slice sizes.

Fixes: 42d159f2766 "radv: Add multiple planes to images."
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110530
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110526
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
src/amd/vulkan/radv_device.c

index 039682cb38411aaeedde19cf07b3b073738bc12b..10956ded66f2ce62d0fff908a4a2b6f2671b8117 100644 (file)
@@ -4380,14 +4380,18 @@ radv_initialise_color_surface(struct radv_device *device,
        }
 
        if (device->physical_device->rad_info.chip_class >= GFX9) {
+               const struct vk_format_description *format_desc = vk_format_description(iview->image->vk_format);
+
                unsigned mip0_depth = iview->image->type == VK_IMAGE_TYPE_3D ?
                  (iview->extent.depth - 1) : (iview->image->info.array_size - 1);
+               unsigned width = iview->extent.width / (iview->plane_id ? format_desc->width_divisor : 1);
+               unsigned height = iview->extent.height / (iview->plane_id ? format_desc->height_divisor : 1);
 
                cb->cb_color_view |= S_028C6C_MIP_LEVEL(iview->base_mip);
                cb->cb_color_attrib |= S_028C74_MIP0_DEPTH(mip0_depth) |
                        S_028C74_RESOURCE_TYPE(surf->u.gfx9.resource_type);
-               cb->cb_color_attrib2 = S_028C68_MIP0_WIDTH(iview->extent.width - 1) |
-                       S_028C68_MIP0_HEIGHT(iview->extent.height - 1) |
+               cb->cb_color_attrib2 = S_028C68_MIP0_WIDTH(width - 1) |
+                       S_028C68_MIP0_HEIGHT(height - 1) |
                        S_028C68_MAX_MIP(iview->image->info.levels - 1);
        }
 }