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