radv: count gen_prims_queries_enabled
authorQiang Yu <yuq825@gmail.com>
Mon, 10 Oct 2022 02:39:29 +0000 (10:39 +0800)
committerMarge Bot <emma+marge@anholt.net>
Tue, 25 Oct 2022 02:42:52 +0000 (02:42 +0000)
User can enable/disable multi VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT
queries with same or different index.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19015>

src/amd/vulkan/radv_meta.c
src/amd/vulkan/radv_private.h
src/amd/vulkan/radv_query.c

index 7db1fbd..ed34023 100644 (file)
@@ -49,7 +49,7 @@ radv_suspend_queries(struct radv_meta_saved_state *state, struct radv_cmd_buffer
    }
 
    /* Primitives generated queries. */
-   if (cmd_buffer->state.prims_gen_query_enabled) {
+   if (cmd_buffer->state.active_prims_gen_queries) {
       cmd_buffer->state.suspend_streamout = true;
       radv_emit_streamout_enable(cmd_buffer);
 
@@ -76,7 +76,7 @@ radv_resume_queries(const struct radv_meta_saved_state *state, struct radv_cmd_b
    }
 
    /* Primitives generated queries. */
-   if (cmd_buffer->state.prims_gen_query_enabled) {
+   if (cmd_buffer->state.active_prims_gen_queries) {
       cmd_buffer->state.suspend_streamout = false;
       radv_emit_streamout_enable(cmd_buffer);
 
index 8ab926b..10e5661 100644 (file)
@@ -1529,7 +1529,7 @@ struct radv_cmd_state {
    bool perfect_occlusion_queries_enabled;
    unsigned active_pipeline_queries;
    unsigned active_pipeline_gds_queries;
-   bool prims_gen_query_enabled;
+   unsigned active_prims_gen_queries;
    uint32_t trace_id;
    uint32_t last_ia_multi_vgt_param;
    uint32_t last_ge_cntl;
@@ -3112,7 +3112,7 @@ radv_is_streamout_enabled(struct radv_cmd_buffer *cmd_buffer)
    struct radv_streamout_state *so = &cmd_buffer->state.streamout;
 
    /* Streamout must be enabled for the PRIMITIVES_GENERATED query to work. */
-   return (so->streamout_enabled || cmd_buffer->state.prims_gen_query_enabled) &&
+   return (so->streamout_enabled || cmd_buffer->state.active_prims_gen_queries) &&
           !cmd_buffer->state.suspend_streamout;
 }
 
index 31838b5..fafdbb1 100644 (file)
@@ -1836,14 +1836,16 @@ emit_begin_query(struct radv_cmd_buffer *cmd_buffer, struct radv_query_pool *poo
       emit_sample_streamout(cmd_buffer, va, index);
       break;
    case VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT: {
-      if (!cmd_buffer->state.prims_gen_query_enabled) {
+      if (!cmd_buffer->state.active_prims_gen_queries) {
          bool old_streamout_enabled = radv_is_streamout_enabled(cmd_buffer);
 
-         cmd_buffer->state.prims_gen_query_enabled = true;
+         cmd_buffer->state.active_prims_gen_queries++;
 
          if (old_streamout_enabled != radv_is_streamout_enabled(cmd_buffer)) {
             radv_emit_streamout_enable(cmd_buffer);
          }
+      } else {
+         cmd_buffer->state.active_prims_gen_queries++;
       }
 
       emit_sample_streamout(cmd_buffer, va, index);
@@ -1932,14 +1934,16 @@ emit_end_query(struct radv_cmd_buffer *cmd_buffer, struct radv_query_pool *pool,
       emit_sample_streamout(cmd_buffer, va + 16, index);
       break;
    case VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT: {
-      if (cmd_buffer->state.prims_gen_query_enabled) {
+      if (cmd_buffer->state.active_prims_gen_queries == 1) {
          bool old_streamout_enabled = radv_is_streamout_enabled(cmd_buffer);
 
-         cmd_buffer->state.prims_gen_query_enabled = false;
+         cmd_buffer->state.active_prims_gen_queries--;
 
          if (old_streamout_enabled != radv_is_streamout_enabled(cmd_buffer)) {
             radv_emit_streamout_enable(cmd_buffer);
          }
+      } else {
+         cmd_buffer->state.active_prims_gen_queries--;
       }
 
       emit_sample_streamout(cmd_buffer, va + 16, index);