diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 4073e229750..f7a88c3f9bf 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -3353,9 +3353,10 @@ zink_batch_rp(struct zink_context *ctx) bool maybe_has_query_ends = !ctx->track_renderpasses || ctx->dynamic_fb.tc_info.has_query_ends; ctx->queries_in_rp = maybe_has_query_ends; /* if possible, out-of-renderpass resume any queries that were stopped when previous rp ended */ - if (!ctx->queries_disabled && !maybe_has_query_ends) { + if (!ctx->queries_disabled && !maybe_has_query_ends && !list_is_empty(&ctx->suspended_queries)) { zink_resume_queries(ctx); - zink_query_update_gs_states(ctx); + if (ctx->vertices_query || !list_is_empty(&ctx->primitives_generated_queries)) + zink_query_update_gs_states(ctx); } unsigned clear_buffers = begin_rendering(ctx, true); assert(!ctx->rp_changed); @@ -3374,9 +3375,10 @@ zink_batch_rp(struct zink_context *ctx) zink_clear_framebuffer(ctx, clear_buffers); } /* unable to previously determine that queries didn't split renderpasses: ensure queries start inside renderpass */ - if (!ctx->queries_disabled && maybe_has_query_ends) { + if (!ctx->queries_disabled && maybe_has_query_ends && !list_is_empty(&ctx->suspended_queries)) { zink_resume_queries(ctx); - zink_query_update_gs_states(ctx); + if (ctx->vertices_query || !list_is_empty(&ctx->primitives_generated_queries)) + zink_query_update_gs_states(ctx); } } diff --git a/src/gallium/drivers/zink/zink_draw.cpp b/src/gallium/drivers/zink/zink_draw.cpp index c6b2a70b789..a9ed3c21f74 100644 --- a/src/gallium/drivers/zink/zink_draw.cpp +++ b/src/gallium/drivers/zink/zink_draw.cpp @@ -438,7 +438,8 @@ zink_draw(struct pipe_context *pctx, res->obj->unordered_read = false; } - zink_query_update_gs_states(ctx); + if (ctx->vertices_query || !list_is_empty(&ctx->primitives_generated_queries)) + zink_query_update_gs_states(ctx); if (unlikely(zink_debug & ZINK_DEBUG_SYNC)) { zink_batch_no_rp(ctx);