radeonsi: bind shader images after DCC is disabled for image stores
authorMarek Olšák <marek.olsak@amd.com>
Mon, 27 Apr 2020 01:36:59 +0000 (21:36 -0400)
committerMarge Bot <eric+marge@anholt.net>
Thu, 30 Apr 2020 22:27:31 +0000 (22:27 +0000)
This prevents an infinite recursion with a compute-based DCC decompression
when it restores shader images.

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4761>

src/gallium/drivers/radeonsi/si_descriptors.c

index bf3ede49b3971fbe3701286ff8dfb0b0314e7d61..0ea9b1346cb5582885832c52377f0f2b6cd541a4 100644 (file)
@@ -715,12 +715,12 @@ static void si_set_shader_image(struct si_context *ctx, unsigned shader, unsigne
 
    res = si_resource(view->resource);
 
-   if (&images->views[slot] != view)
-      util_copy_image_view(&images->views[slot], view);
-
    si_set_shader_image_desc(ctx, view, skip_decompress, descs->list + si_get_image_slot(slot) * 8,
                             descs->list + si_get_image_slot(slot + SI_NUM_IMAGES) * 8);
 
+   if (&images->views[slot] != view)
+      util_copy_image_view(&images->views[slot], view);
+
    if (res->b.b.target == PIPE_BUFFER || view->shader_access & SI_IMAGE_ACCESS_AS_BUFFER) {
       images->needs_color_decompress_mask &= ~(1 << slot);
       res->bind_history |= PIPE_BIND_SHADER_IMAGE;