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

Reply via email to