summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Lerda <patrick9876@free.fr>2023-04-01 23:08:09 +0200
committerDylan Baker <dylan.c.baker@intel.com>2023-04-20 16:05:03 -0700
commitf18be077928462b817e79349811e72900f84a0d6 (patch)
tree7f07c0721165c506de710ca0dbf8348f7b12f7ea
parent6cb9f60cb011a39d15fbb476614edab5cca6f0e8 (diff)
downloadmesa-f18be077928462b817e79349811e72900f84a0d6.tar.gz
r600: fix refcnt imbalance related to evergreen_set_shader_images()
Indeed, the reference was overwritten. For instance, this issue is triggered with: "piglit/bin/shader_runner tests/spec/arb_shader_image_load_store/execution/write-to-rendered-image.shader_test -auto -fbo" while setting GALLIUM_REFCNT_LOG=refcnt.log. Fixes: a6b379284365 ("r600: add core pieces of image support.") Signed-off-by: Patrick Lerda <patrick9876@free.fr> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22394> (cherry picked from commit 4f42d3b843c2b5a07b70e1de2467c8b3a34b7de0)
-rw-r--r--.pick_status.json2
-rw-r--r--src/gallium/drivers/r600/evergreen_state.c3
2 files changed, 3 insertions, 2 deletions
diff --git a/.pick_status.json b/.pick_status.json
index 1ea1d3dffb7..453b67906fc 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -2074,7 +2074,7 @@
"description": "r600: fix refcnt imbalance related to evergreen_set_shader_images()",
"nominated": true,
"nomination_type": 1,
- "resolution": 0,
+ "resolution": 1,
"main_sha": null,
"because_sha": "a6b379284365e8adee780b691596d3a66de1ba93",
"notes": null
diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c
index 736b2592d1b..c4e3c49c09c 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -4269,8 +4269,9 @@ static void evergreen_set_shader_images(struct pipe_context *ctx,
r600_context_add_resource_size(ctx, image);
+ struct pipe_resource *const pipe_saved = rview->base.resource;
rview->base = *iview;
- rview->base.resource = NULL;
+ rview->base.resource = pipe_saved;
pipe_resource_reference((struct pipe_resource **)&rview->base.resource, image);
evergreen_setup_immed_buffer(rctx, rview, iview->format);