r300,r600,svga: save the FS constant buffer for u_blitter to fix a regression

Fixes: 773a23eb6d - gallium/u_blitter: clear color buffers using color from a constant buffer
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6548
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6539

Tested-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Charmaine Lee <charmainel@vmware.com>
Tested-by: Pavel Ondračka <pavel.ondracka@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16711>
This commit is contained in:
Marek Olšák
2022-05-25 12:22:45 -04:00
committed by Marge Bot
parent d827d433ce
commit 3d6e44fd2a
3 changed files with 13 additions and 0 deletions

View File

@@ -72,6 +72,15 @@ static void r300_blitter_begin(struct r300_context* r300, enum r300_blitter_op o
util_blitter_save_vertex_buffer_slot(r300->blitter, r300->vertex_buffer);
util_blitter_save_vertex_elements(r300->blitter, r300->velems);
struct pipe_constant_buffer cb = {
/* r300 doesn't use the size for FS at all. The shader determines it.
* Set something for blitter.
*/
.buffer_size = 4,
.user_buffer = ((struct r300_constant_buffer*)r300->fs_constants.state)->ptr,
};
util_blitter_save_fragment_constant_buffer_slot(r300->blitter, &cb);
if (op & R300_SAVE_FRAMEBUFFER) {
util_blitter_save_framebuffer(r300->blitter, r300->fb_state.state);
}

View File

@@ -77,6 +77,8 @@ static void r600_blitter_begin(struct pipe_context *ctx, enum r600_blitter_op op
util_blitter_save_depth_stencil_alpha(rctx->blitter, rctx->dsa_state.cso);
util_blitter_save_stencil_ref(rctx->blitter, &rctx->stencil_ref.pipe_state);
util_blitter_save_sample_mask(rctx->blitter, rctx->sample_mask.sample_mask, rctx->ps_iter_samples);
util_blitter_save_fragment_constant_buffer_slot(rctx->blitter,
&rctx->constbuf_state[PIPE_SHADER_FRAGMENT].cb[0]);
}
if (op & R600_SAVE_FRAMEBUFFER)

View File

@@ -58,6 +58,8 @@ begin_blit(struct svga_context *svga)
(void*)svga->curr.depth);
util_blitter_save_stencil_ref(svga->blitter, &svga->curr.stencil_ref);
util_blitter_save_sample_mask(svga->blitter, svga->curr.sample_mask, 0);
util_blitter_save_fragment_constant_buffer_slot(svga->blitter,
&svga->curr.constbufs[PIPE_SHADER_FRAGMENT][0]);
}