Mesa (main): zink: lift some renderpass mechanics up a level in the api

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri May 20 16:58:32 UTC 2022


Module: Mesa
Branch: main
Commit: 91a9676a0c5d339c551836b608dc866fd3867a3c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=91a9676a0c5d339c551836b608dc866fd3867a3c

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Tue May 10 12:28:34 2022 -0400

zink: lift some renderpass mechanics up a level in the api

(should be) no functional changes

Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16476>

---

 src/gallium/drivers/zink/zink_context.c     | 16 ++++++++++++++--
 src/gallium/drivers/zink/zink_render_pass.c | 10 ++--------
 src/gallium/drivers/zink/zink_render_pass.h |  2 +-
 3 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c
index 541e7bc91c1..bdc28793902 100644
--- a/src/gallium/drivers/zink/zink_context.c
+++ b/src/gallium/drivers/zink/zink_context.c
@@ -1999,14 +1999,26 @@ zink_update_vk_sample_locations(struct zink_context *ctx)
 void
 zink_batch_rp(struct zink_context *ctx)
 {
+   if (ctx->batch.in_rp)
+      return;
+   unsigned clear_buffers;
+   clear_buffers = zink_begin_render_pass(ctx);
    if (!ctx->batch.in_rp)
-      zink_begin_render_pass(ctx);
+      return; //dead swapchain
+   if (ctx->render_condition.query)
+      zink_start_conditional_render(ctx);
+   zink_clear_framebuffer(ctx, clear_buffers);
 }
 
 void
 zink_batch_no_rp(struct zink_context *ctx)
 {
-   zink_end_render_pass(ctx);
+   if (!ctx->batch.in_rp)
+      return;
+   if (ctx->render_condition.query)
+      zink_stop_conditional_render(ctx);
+   if (ctx->gfx_pipeline_state.render_pass)
+      zink_end_render_pass(ctx);
    assert(!ctx->batch.in_rp);
 }
 
diff --git a/src/gallium/drivers/zink/zink_render_pass.c b/src/gallium/drivers/zink/zink_render_pass.c
index f4331b1aafa..6e330cb59c8 100644
--- a/src/gallium/drivers/zink/zink_render_pass.c
+++ b/src/gallium/drivers/zink/zink_render_pass.c
@@ -591,7 +591,7 @@ begin_render_pass(struct zink_context *ctx)
    return clear_buffers;
 }
 
-void
+unsigned
 zink_begin_render_pass(struct zink_context *ctx)
 {
    setup_framebuffer(ctx);
@@ -630,19 +630,13 @@ zink_begin_render_pass(struct zink_context *ctx)
       ctx->gfx_pipeline_state.render_pass = rp;
    }
    assert(ctx->gfx_pipeline_state.render_pass);
-   unsigned clear_buffers = begin_render_pass(ctx);
-
-   if (ctx->render_condition.query)
-      zink_start_conditional_render(ctx);
-   zink_clear_framebuffer(ctx, clear_buffers);
+   return begin_render_pass(ctx);
 }
 
 void
 zink_end_render_pass(struct zink_context *ctx)
 {
    if (ctx->batch.in_rp) {
-      if (ctx->render_condition.query)
-         zink_stop_conditional_render(ctx);
       VKCTX(CmdEndRenderPass)(ctx->batch.state->cmdbuf);
       for (unsigned i = 0; i < ctx->fb_state.nr_cbufs; i++) {
          struct zink_ctx_surface *csurf = (struct zink_ctx_surface*)ctx->fb_state.cbufs[i];
diff --git a/src/gallium/drivers/zink/zink_render_pass.h b/src/gallium/drivers/zink/zink_render_pass.h
index 65499ff29c3..2cf90c0de3a 100644
--- a/src/gallium/drivers/zink/zink_render_pass.h
+++ b/src/gallium/drivers/zink/zink_render_pass.h
@@ -89,7 +89,7 @@ zink_destroy_render_pass(struct zink_screen *screen,
                          struct zink_render_pass *rp);
 
 
-void
+unsigned
 zink_begin_render_pass(struct zink_context *ctx);
 void
 zink_end_render_pass(struct zink_context *ctx);



More information about the mesa-commit mailing list