From fae5188de78a73dce096d7958b7e5dbe8597c265 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Wed, 9 Feb 2022 15:39:57 +1000 Subject: [PATCH] llvmpipe: add images to the scene resource tracker. This adds all the images to the scene resource tracker. Reviewed-by: Roland Scheidegger Part-of: --- src/gallium/drivers/llvmpipe/lp_setup.c | 17 ++++++++++++----- 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;