freedreno: Fix rast state for multisample clear

a6xx in particular cares about the multisample bit.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6649>
This commit is contained in:
Rob Clark
2020-09-08 14:56:55 -07:00
committed by Marge Bot
parent b0722cb670
commit 97e49b223c
3 changed files with 9 additions and 6 deletions

View File

@@ -194,7 +194,8 @@ fd_blitter_clear(struct pipe_context *pctx, unsigned buffers,
};
pctx->set_constant_buffer(pctx, PIPE_SHADER_FRAGMENT, 0, &cb);
if (!ctx->clear_rs_state) {
unsigned rs_idx = pfb->samples > 1 ? 1 : 0;
if (!ctx->clear_rs_state[rs_idx]) {
const struct pipe_rasterizer_state tmpl = {
.cull_face = PIPE_FACE_NONE,
.half_pixel_center = 1,
@@ -202,10 +203,11 @@ fd_blitter_clear(struct pipe_context *pctx, unsigned buffers,
.flatshade = 1,
.depth_clip_near = 1,
.depth_clip_far = 1,
.multisample = pfb->samples > 1,
};
ctx->clear_rs_state = pctx->create_rasterizer_state(pctx, &tmpl);
ctx->clear_rs_state[rs_idx] = pctx->create_rasterizer_state(pctx, &tmpl);
}
pctx->bind_rasterizer_state(pctx, ctx->clear_rs_state);
pctx->bind_rasterizer_state(pctx, ctx->clear_rs_state[rs_idx]);
struct pipe_viewport_state vp = {
.scale = { 0.5f * pfb->width, -0.5f * pfb->height, depth },

View File

@@ -235,8 +235,9 @@ fd_context_destroy(struct pipe_context *pctx)
if (pctx->stream_uploader)
u_upload_destroy(pctx->stream_uploader);
if (ctx->clear_rs_state)
pctx->delete_rasterizer_state(pctx, ctx->clear_rs_state);
for (i = 0; i < ARRAY_SIZE(ctx->clear_rs_state); i++)
if (ctx->clear_rs_state[i])
pctx->delete_rasterizer_state(pctx, ctx->clear_rs_state[i]);
if (ctx->primconvert)
util_primconvert_destroy(ctx->primconvert);

View File

@@ -185,7 +185,7 @@ struct fd_context {
struct fd_pipe *pipe;
struct blitter_context *blitter;
void *clear_rs_state;
void *clear_rs_state[2];
struct primconvert_context *primconvert;
/* slab for pipe_transfer allocations: */