lima: reset scissor state if scissor test is disabled
The PLBU seems to preserve scissor state between draws, and since lima doesn't emit PLBU_CMD_SCISSORS() if scissor test is disabled, it uses state from previous draw. Fix it by emitting PLBU_CMD_SCISSORS() for full fb if scissor test is disabled. Signed-off-by: Icenowy Zheng <icenowy@aosc.io> Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com> Reviewed-by: Qiang Yu <yuq825@gmail.com>
This commit is contained in:
parent
533987b5f4
commit
d61b67b41d
|
@ -848,6 +848,8 @@ lima_pack_vs_cmd(struct lima_context *ctx, const struct pipe_draw_info *info)
|
|||
static void
|
||||
lima_pack_plbu_cmd(struct lima_context *ctx, const struct pipe_draw_info *info)
|
||||
{
|
||||
struct lima_context_framebuffer *fb = &ctx->framebuffer;
|
||||
|
||||
lima_pack_head_plbu_cmd(ctx);
|
||||
|
||||
/* If it's zero scissor, we skip adding all other commands */
|
||||
|
@ -890,6 +892,8 @@ lima_pack_plbu_cmd(struct lima_context *ctx, const struct pipe_draw_info *info)
|
|||
if (ctx->rasterizer->base.scissor) {
|
||||
struct pipe_scissor_state *scissor = &ctx->scissor;
|
||||
PLBU_CMD_SCISSORS(scissor->minx, scissor->maxx, scissor->miny, scissor->maxy);
|
||||
} else {
|
||||
PLBU_CMD_SCISSORS(0, fb->base.width, 0, fb->base.height);
|
||||
}
|
||||
|
||||
PLBU_CMD_UNKNOWN1();
|
||||
|
|
Loading…
Reference in New Issue