Module: Mesa
Branch: master
Commit: 40cc265888d0f82458ffa00672caf6e2eb67e735
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=40cc265888d0f82458ffa00672caf6e2eb67e735

Author: Mike Blumenkrantz <[email protected]>
Date:   Fri Feb  5 17:36:44 2021 -0500

zink: toggle conditional render when beginning/ending a renderpass

this resumes the same conditional render which was previously active

Reviewed-by: Erik Faye-Lund <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9783>

---

 src/gallium/drivers/zink/zink_context.c | 7 ++++++-
 src/gallium/drivers/zink/zink_query.c   | 9 +++++++--
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_context.c 
b/src/gallium/drivers/zink/zink_context.c
index 2a908b61495..2a6f8f74d4b 100644
--- a/src/gallium/drivers/zink/zink_context.c
+++ b/src/gallium/drivers/zink/zink_context.c
@@ -1316,14 +1316,19 @@ zink_begin_render_pass(struct zink_context *ctx, struct 
zink_batch *batch)
    vkCmdBeginRenderPass(batch->state->cmdbuf, &rpbi, 
VK_SUBPASS_CONTENTS_INLINE);
    batch->in_rp = true;
 
+   if (ctx->render_condition.query)
+      zink_start_conditional_render(ctx);
    zink_clear_framebuffer(ctx, clear_buffers);
 }
 
 static void
 zink_end_render_pass(struct zink_context *ctx, struct zink_batch *batch)
 {
-   if (batch->in_rp)
+   if (batch->in_rp) {
+      if (ctx->render_condition.query)
+         zink_stop_conditional_render(ctx);
       vkCmdEndRenderPass(batch->state->cmdbuf);
+   }
    batch->in_rp = false;
 }
 
diff --git a/src/gallium/drivers/zink/zink_query.c 
b/src/gallium/drivers/zink/zink_query.c
index 7821443f4cf..7723852ebbe 100644
--- a/src/gallium/drivers/zink/zink_query.c
+++ b/src/gallium/drivers/zink/zink_query.c
@@ -689,7 +689,11 @@ zink_render_condition(struct pipe_context *pctx,
    VkQueryResultFlagBits flags = 0;
 
    if (query == NULL) {
-      zink_stop_conditional_render(ctx);
+      /* force conditional clears if they exist */
+      if (ctx->clears_enabled && !ctx->batch.in_rp)
+         zink_batch_rp(ctx);
+      if (ctx->batch.in_rp)
+         zink_stop_conditional_render(ctx);
       ctx->render_condition_active = false;
       ctx->render_condition.query = NULL;
       return;
@@ -725,7 +729,8 @@ zink_render_condition(struct pipe_context *pctx,
    ctx->render_condition.inverted = condition;
    ctx->render_condition_active = true;
    ctx->render_condition.query = query;
-   zink_start_conditional_render(ctx);
+   if (ctx->batch.in_rp)
+      zink_start_conditional_render(ctx);
 }
 
 static void

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to