radv: Clamp gfx9 image view extents to the allocated image extents.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Sat, 24 Nov 2018 22:21:05 +0000 (23:21 +0100)
committerBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Tue, 27 Nov 2018 09:19:52 +0000 (10:19 +0100)
Mirrors AMDVLK. Looks like if we go over the alignment of height
we actually start to change the addressing. Seems like the extra
miplevels actually work with this.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108245
Fixes: f6cc15dccd5 "radv/gfx9: fix block compression texture views. (v2)"
Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
src/amd/vulkan/radv_image.c

index f0b1d31c5bd30e995d0e2c09b236185058bbd9b1..f447166d80c99f7eedff529c5eab93077f408bc3 100644 (file)
@@ -1175,8 +1175,6 @@ radv_image_view_init(struct radv_image_view *iview,
                 if (device->physical_device->rad_info.chip_class >= GFX9 &&
                     vk_format_is_compressed(image->vk_format) &&
                     !vk_format_is_compressed(iview->vk_format)) {
-                        unsigned rounded_img_w = util_next_power_of_two(iview->extent.width);
-                        unsigned rounded_img_h = util_next_power_of_two(iview->extent.height);
                         unsigned lvl_width  = radv_minify(image->info.width , range->baseMipLevel);
                         unsigned lvl_height = radv_minify(image->info.height, range->baseMipLevel);
 
@@ -1186,8 +1184,8 @@ radv_image_view_init(struct radv_image_view *iview,
                         lvl_width <<= range->baseMipLevel;
                         lvl_height <<= range->baseMipLevel;
 
-                        iview->extent.width = CLAMP(lvl_width, iview->extent.width, rounded_img_w);
-                        iview->extent.height = CLAMP(lvl_height, iview->extent.height, rounded_img_h);
+                        iview->extent.width = CLAMP(lvl_width, iview->extent.width, iview->image->surface.u.gfx9.surf_pitch);
+                        iview->extent.height = CLAMP(lvl_height, iview->extent.height, iview->image->surface.u.gfx9.surf_height);
                 }
        }