From 83a7a88d6bad3e2faeb3904d965f5042e37a50da Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 12 May 2023 09:05:01 -0400 Subject: [PATCH] llvmpipe: flush/reference fs ubos on bind Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/llvmpipe/lp_setup.c | 7 +++++++ src/gallium/drivers/llvmpipe/lp_state_fs.c | 1 + src/gallium/drivers/llvmpipe/lp_texture.c | 1 + 3 files changed, 9 insertions(+) diff --git a/src/gallium/drivers/llvmpipe/lp_setup.c b/src/gallium/drivers/llvmpipe/lp_setup.c index b4981cad1bf..b959f7d5fbd 100644 --- a/src/gallium/drivers/llvmpipe/lp_setup.c +++ b/src/gallium/drivers/llvmpipe/lp_setup.c @@ -1065,6 +1065,13 @@ try_update_scene_state(struct lp_setup_context *setup) for (unsigned i = 0; i < ARRAY_SIZE(setup->constants); ++i) { lp_jit_buffer_from_pipe_const(&setup->fs.current.jit_resources.constants[i], &setup->constants[i].current, setup->pipe->screen); + if (setup->constants[i].current.buffer && + !lp_scene_add_resource_reference(scene, + setup->constants[i].current.buffer, + new_scene, false)) { + assert(!new_scene); + return false; + } setup->dirty |= LP_SETUP_NEW_FS; } } diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c index 416e655f457..f6143aaee54 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c @@ -4198,6 +4198,7 @@ llvmpipe_set_constant_buffer(struct pipe_context *pipe, debug_printf("Illegal set constant without bind flag\n"); constants->buffer->bind |= PIPE_BIND_CONSTANT_BUFFER; } + llvmpipe_flush_resource(pipe, constants->buffer, 0, true, true, false, "set_constant_buffer"); } switch (shader) { diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c b/src/gallium/drivers/llvmpipe/lp_texture.c index 772ea672b78..5c5a6cd81be 100644 --- a/src/gallium/drivers/llvmpipe/lp_texture.c +++ b/src/gallium/drivers/llvmpipe/lp_texture.c @@ -837,6 +837,7 @@ llvmpipe_is_resource_referenced(struct pipe_context *pipe, if (!(presource->bind & (PIPE_BIND_DEPTH_STENCIL | PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW | + PIPE_BIND_CONSTANT_BUFFER | PIPE_BIND_SHADER_BUFFER | PIPE_BIND_SHADER_IMAGE))) return LP_UNREFERENCED;