From cc939fe9b7013b8d9c043cfae3444ca0a35e5f98 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 3 Aug 2020 11:49:26 -0400 Subject: [PATCH] zink: correctly set up fb-sized scissors for each viewport each viewport must have a corresponding scissor, so we need to generate an array of these to ensure our states match up Reviewed-by: Erik Faye-Lund Part-of: --- src/gallium/drivers/zink/zink_draw.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/zink/zink_draw.c b/src/gallium/drivers/zink/zink_draw.c index 50db38f..36be5cc 100644 --- a/src/gallium/drivers/zink/zink_draw.c +++ b/src/gallium/drivers/zink/zink_draw.c @@ -397,10 +397,13 @@ zink_draw_vbo(struct pipe_context *pctx, if (ctx->rast_state->base.scissor) vkCmdSetScissor(batch->cmdbuf, 0, ctx->gfx_pipeline_state.num_viewports, ctx->scissors); else if (ctx->fb_state.width && ctx->fb_state.height) { - VkRect2D fb_scissor = {}; - fb_scissor.extent.width = ctx->fb_state.width; - fb_scissor.extent.height = ctx->fb_state.height; - vkCmdSetScissor(batch->cmdbuf, 0, 1, &fb_scissor); + VkRect2D fb_scissor[ctx->gfx_pipeline_state.num_viewports]; + for (unsigned i = 0; i < ctx->gfx_pipeline_state.num_viewports; i++) { + fb_scissor[i].offset.x = fb_scissor[i].offset.y = 0; + fb_scissor[i].extent.width = ctx->fb_state.width; + fb_scissor[i].extent.height = ctx->fb_state.height; + } + vkCmdSetScissor(batch->cmdbuf, 0, ctx->gfx_pipeline_state.num_viewports, fb_scissor); } if (line_width_needed(reduced_prim, rast_state->hw_state.polygon_mode)) { -- 2.7.4