radeonsi: force dcc clear to use compute clear
authorPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Tue, 9 Feb 2021 14:13:44 +0000 (15:13 +0100)
committerPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Wed, 17 Feb 2021 13:57:26 +0000 (14:57 +0100)
After the previous commit, when running the following
deqp-gles31 caselist:

  dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba32f_rgba32ui
  dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba32f_rgba32i

The second test always fails on gfx10. I don't know why,
but forcing the dcc clear from si_decompress_dcc to use
compute fixes the problem.

The test caselist wasn't failing before because the dcc
disable step was done in si_resource_copy_region, before
calling si_compute_copy_image.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8958>

src/gallium/drivers/radeonsi/si_blit.c

index 7ed27a0..ab133f6 100644 (file)
@@ -1306,11 +1306,17 @@ void si_decompress_dcc(struct si_context *sctx, struct si_texture *tex)
                                true);
       }
 
-      /* Now clear DCC metadata to uncompressed. */
+      /* Now clear DCC metadata to uncompressed.
+       *
+       * This uses SI_COMPUTE_CLEAR_METHOD to avoid a failure when running this
+       * deqp caselist on gfx10:
+       *  dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba32f_rgba32ui
+       *  dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba32f_rgba32i
+       */
       uint32_t clear_value = DCC_UNCOMPRESSED;
       si_clear_buffer(sctx, ptex, tex->surface.dcc_offset,
                       tex->surface.dcc_size, &clear_value, 4,
-                      SI_COHERENCY_CB_META, SI_AUTO_SELECT_CLEAR_METHOD);
+                      SI_COHERENCY_CB_META, SI_COMPUTE_CLEAR_METHOD);
    }
 }