diff --git a/src/gallium/drivers/radeonsi/si_blit.c b/src/gallium/drivers/radeonsi/si_blit.c index 11de9a80fcb..85824441872 100644 --- a/src/gallium/drivers/radeonsi/si_blit.c +++ b/src/gallium/drivers/radeonsi/si_blit.c @@ -37,7 +37,10 @@ void si_blitter_begin(struct si_context *sctx, enum si_blitter_op op) if (op & SI_SAVE_FRAGMENT_STATE) { struct pipe_constant_buffer fs_cb = {}; si_get_pipe_constant_buffer(sctx, PIPE_SHADER_FRAGMENT, 0, &fs_cb); - util_blitter_save_fragment_constant_buffer_slot(sctx->blitter, &fs_cb); + + if (op & SI_SAVE_FRAGMENT_CONSTANT) + util_blitter_save_fragment_constant_buffer_slot(sctx->blitter, &fs_cb); + pipe_resource_reference(&fs_cb.buffer, NULL); util_blitter_save_blend(sctx->blitter, sctx->queued.named.blend); util_blitter_save_depth_stencil_alpha(sctx->blitter, sctx->queued.named.dsa); diff --git a/src/gallium/drivers/radeonsi/si_clear.c b/src/gallium/drivers/radeonsi/si_clear.c index a210192b8e3..cd0dd49bdcd 100644 --- a/src/gallium/drivers/radeonsi/si_clear.c +++ b/src/gallium/drivers/radeonsi/si_clear.c @@ -10,9 +10,8 @@ #include "util/u_pack_color.h" #include "util/u_surface.h" -enum -{ - SI_CLEAR = SI_SAVE_FRAGMENT_STATE, +enum { + SI_CLEAR = SI_SAVE_FRAGMENT_STATE | SI_SAVE_FRAGMENT_CONSTANT, SI_CLEAR_SURFACE = SI_SAVE_FRAMEBUFFER | SI_SAVE_FRAGMENT_STATE, }; diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index 46b09fb3612..55f1d1788f1 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -1342,7 +1342,8 @@ enum si_blitter_op /* bitmask */ SI_SAVE_TEXTURES = 1, SI_SAVE_FRAMEBUFFER = 2, SI_SAVE_FRAGMENT_STATE = 4, - SI_DISABLE_RENDER_COND = 8, + SI_SAVE_FRAGMENT_CONSTANT = 8, + SI_DISABLE_RENDER_COND = 16, }; void si_blitter_begin(struct si_context *sctx, enum si_blitter_op op);