summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2022-02-09 15:39:57 +1000
committerMarge Bot <emma+marge@anholt.net>2022-02-21 03:52:02 +0000
commitfae5188de78a73dce096d7958b7e5dbe8597c265 (patch)
tree1e19c6b47b22fed4ec1131ffb413893adfc216cb
parenteff32fa59176ca86d12f61f6f8855b03b1f28238 (diff)
llvmpipe: add images to the scene resource tracker.
This adds all the images to the scene resource tracker. Reviewed-by: Roland Scheidegger <sroland@vmware.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14923>
-rw-r--r--src/gallium/drivers/llvmpipe/lp_setup.c17
-rw-r--r--src/gallium/drivers/llvmpipe/lp_state_fs.c6
2 files changed, 18 insertions, 5 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_setup.c b/src/gallium/drivers/llvmpipe/lp_setup.c
index 9d0851c41ca..8b616b480e0 100644
--- a/src/gallium/drivers/llvmpipe/lp_setup.c
+++ b/src/gallium/drivers/llvmpipe/lp_setup.c
@@ -1186,11 +1186,6 @@ lp_setup_is_resource_referenced( const struct lp_setup_context *setup,
return ref;
}
- for (i = 0; i < ARRAY_SIZE(setup->images); i++) {
- if (setup->images[i].current.resource == texture)
- return LP_REFERENCED_FOR_READ | LP_REFERENCED_FOR_WRITE;
- }
-
return LP_UNREFERENCED;
}
@@ -1414,6 +1409,18 @@ try_update_scene_state( struct lp_setup_context *setup )
}
}
}
+
+ for (i = 0; i < ARRAY_SIZE(setup->images); i++) {
+ if (setup->images[i].current.resource) {
+ if (!lp_scene_add_resource_reference(scene,
+ setup->images[i].current.resource,
+ new_scene,
+ setup->images[i].current.shader_access & PIPE_IMAGE_ACCESS_WRITE)) {
+ assert(!new_scene);
+ return FALSE;
+ }
+ }
+ }
}
}
diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c
index 768128f7d41..c55b939b985 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_fs.c
+++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c
@@ -4084,6 +4084,12 @@ llvmpipe_set_shader_images(struct pipe_context *pipe,
const struct pipe_image_view *image = images ? &images[idx] : NULL;
util_copy_image_view(&llvmpipe->images[shader][i], image);
+
+ if (image && image->resource) {
+ bool read_only = !(image->access & PIPE_IMAGE_ACCESS_WRITE);
+ llvmpipe_flush_resource(pipe, image->resource, 0, read_only, false,
+ false, "image");
+ }
}
llvmpipe->num_images[shader] = start_slot + count;