}
/* 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);
}
/* 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);
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;
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;
}
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);
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);