diff options
author | Dave Airlie <airlied@redhat.com> | 2022-02-09 15:39:57 +1000 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2022-02-21 03:52:02 +0000 |
commit | fae5188de78a73dce096d7958b7e5dbe8597c265 (patch) | |
tree | 1e19c6b47b22fed4ec1131ffb413893adfc216cb | |
parent | eff32fa59176ca86d12f61f6f8855b03b1f28238 (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.c | 17 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_state_fs.c | 6 |
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; |