From 91a9676a0c5d339c551836b608dc866fd3867a3c Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 10 May 2022 12:28:34 -0400 Subject: [PATCH] zink: lift some renderpass mechanics up a level in the api (should be) no functional changes Reviewed-by: Dave Airlie Part-of: --- 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);