r300,r600,svga: save the FS constant buffer for u_blitter to fix a regression
authorMarek Olšák <marek.olsak@amd.com>
Wed, 25 May 2022 16:22:45 +0000 (12:22 -0400)
committerMarge Bot <emma+marge@anholt.net>
Fri, 27 May 2022 00:01:41 +0000 (00:01 +0000)
Fixes: 773a23eb6da - 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>

src/gallium/drivers/r300/r300_blit.c
src/gallium/drivers/r600/r600_blit.c
src/gallium/drivers/svga/svga_pipe_clear.c

index e2648e3..af1abfb 100644 (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);
     }
index 5f386c9..257f799 100644 (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)
index 1e58549..810dfd6 100644 (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]);
 }