GFX8 only natively supports TC-compatible HTILE for 32-bit surfaces,
while GFX9 also supports 16-bit surfaces. Though, it's possible
to enable it for 16-bit depth surfaces if no Z planes are
compressed and the driver does that.

However, it appears that trying to decompress such a surface
ends up by reporting VM faults. This is probably because the
hardware uses 32-bit instead of 16-bit. Anyways, decompressing
a surface when no Z planes are compressed is just dumb.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107563
Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
---
 src/amd/vulkan/radv_meta_decompress.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/amd/vulkan/radv_meta_decompress.c 
b/src/amd/vulkan/radv_meta_decompress.c
index fe8e114e91b..952765b16db 100644
--- a/src/amd/vulkan/radv_meta_decompress.c
+++ b/src/amd/vulkan/radv_meta_decompress.c
@@ -330,8 +330,15 @@ static void radv_process_depth_image_inplace(struct 
radv_cmd_buffer *cmd_buffer,
        struct radv_meta_state *meta_state = &cmd_buffer->device->meta_state;
        VkPipeline pipeline_h;
 
-       if (!radv_image_has_htile(image))
+       if (!radv_image_has_htile(image) ||
+           /* Don't decompress HTILE for 16-bit depth surfaces that are
+            * TC-compatible because no Z planes are compressed on GFX8.
+            */
+           (cmd_buffer->device->physical_device->rad_info.chip_class == VI &&
+            radv_image_is_tc_compat_htile(image) &&
+            image->vk_format == VK_FORMAT_D16_UNORM)) {
                return;
+       }
 
        if (!meta_state->depth_decomp[samples_log2].decompress_pipeline) {
                VkResult ret = create_pipeline(cmd_buffer->device, 
VK_NULL_HANDLE, samples,
-- 
2.20.0

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to