Module: Mesa Branch: master Commit: efbd3584e37594821558b8ab31c1fec4898bdbdc URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=efbd3584e37594821558b8ab31c1fec4898bdbdc
Author: Mike Blumenkrantz <[email protected]> Date: Tue Aug 18 15:07:18 2020 -0400 zink: rework viewport handling viewport can be transformed at draw time based on clip_halfz, so we actually want to do the conversion from gallium->vulkan at that time as a nice bonus, we get to delete a struct member Reviewed-by: Erik Faye-Lund <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8946> --- src/gallium/drivers/zink/zink_context.c | 12 +----------- src/gallium/drivers/zink/zink_context.h | 1 - src/gallium/drivers/zink/zink_draw.c | 16 +++++++++++++++- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 1d3f06cc8ca..2b2d863b629 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -525,18 +525,8 @@ zink_set_viewport_states(struct pipe_context *pctx, { struct zink_context *ctx = zink_context(pctx); - for (unsigned i = 0; i < num_viewports; ++i) { - VkViewport viewport = { - state[i].translate[0] - state[i].scale[0], - state[i].translate[1] - state[i].scale[1], - state[i].scale[0] * 2, - state[i].scale[1] * 2, - state[i].translate[2] - state[i].scale[2], - state[i].translate[2] + state[i].scale[2] - }; + for (unsigned i = 0; i < num_viewports; ++i) ctx->viewport_states[start_slot + i] = state[i]; - ctx->viewports[start_slot + i] = viewport; - } if (ctx->gfx_pipeline_state.num_viewports != start_slot + num_viewports) ctx->gfx_pipeline_state.dirty = true; ctx->gfx_pipeline_state.num_viewports = start_slot + num_viewports; diff --git a/src/gallium/drivers/zink/zink_context.h b/src/gallium/drivers/zink/zink_context.h index d7dc6f7449f..a70a0add35b 100644 --- a/src/gallium/drivers/zink/zink_context.h +++ b/src/gallium/drivers/zink/zink_context.h @@ -143,7 +143,6 @@ struct zink_context { struct pipe_viewport_state viewport_states[PIPE_MAX_VIEWPORTS]; struct pipe_scissor_state scissor_states[PIPE_MAX_VIEWPORTS]; - VkViewport viewports[PIPE_MAX_VIEWPORTS]; VkRect2D scissors[PIPE_MAX_VIEWPORTS]; struct pipe_vertex_buffer buffers[PIPE_MAX_ATTRIBS]; uint32_t buffers_enabled_mask; diff --git a/src/gallium/drivers/zink/zink_draw.c b/src/gallium/drivers/zink/zink_draw.c index 88c4f8c5820..148d1b2e6cd 100644 --- a/src/gallium/drivers/zink/zink_draw.c +++ b/src/gallium/drivers/zink/zink_draw.c @@ -641,7 +641,21 @@ zink_draw_vbo(struct pipe_context *pctx, update_descriptors(ctx, screen, false); struct zink_batch *batch = zink_batch_rp(ctx); - vkCmdSetViewport(batch->cmdbuf, 0, ctx->gfx_pipeline_state.num_viewports, ctx->viewports); + VkViewport viewports[PIPE_MAX_VIEWPORTS] = {}; + for (unsigned i = 0; i < ctx->gfx_pipeline_state.num_viewports; i++) { + VkViewport viewport = { + ctx->viewport_states[i].translate[0] - ctx->viewport_states[i].scale[0], + ctx->viewport_states[i].translate[1] - ctx->viewport_states[i].scale[1], + ctx->viewport_states[i].scale[0] * 2, + ctx->viewport_states[i].scale[1] * 2, + ctx->rast_state->base.clip_halfz ? + ctx->viewport_states[i].translate[2] : + ctx->viewport_states[i].translate[2] - ctx->viewport_states[i].scale[2], + ctx->viewport_states[i].translate[2] + ctx->viewport_states[i].scale[2] + }; + viewports[i] = viewport; + } + vkCmdSetViewport(batch->cmdbuf, 0, ctx->gfx_pipeline_state.num_viewports, viewports); 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) { _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
