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