diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 30eeea2f014..2122165dd3b 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -2218,6 +2218,7 @@ enum anv_cmd_dirty_bits { ANV_CMD_DIRTY_RENDER_TARGETS = 1 << 2, ANV_CMD_DIRTY_XFB_ENABLE = 1 << 3, ANV_CMD_DIRTY_RESTART_INDEX = 1 << 4, + ANV_CMD_DIRTY_OCCLUSION_QUERY_ACTIVE = 1 << 5, }; typedef enum anv_cmd_dirty_bits anv_cmd_dirty_mask_t; diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index df113005b80..6157e551cf7 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -3442,8 +3442,10 @@ genX(BeginCommandBuffer)( cmd_buffer->state.conditional_render_enabled = conditional_rendering_info && conditional_rendering_info->conditionalRenderingEnable; - if (pBeginInfo->pInheritanceInfo->occlusionQueryEnable) + if (pBeginInfo->pInheritanceInfo->occlusionQueryEnable) { cmd_buffer->state.gfx.n_occlusion_queries = 1; + cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_OCCLUSION_QUERY_ACTIVE; + } } return VK_SUCCESS; diff --git a/src/intel/vulkan/genX_query.c b/src/intel/vulkan/genX_query.c index 5eedad512a1..b22f7e5a7f6 100644 --- a/src/intel/vulkan/genX_query.c +++ b/src/intel/vulkan/genX_query.c @@ -1017,6 +1017,7 @@ void genX(CmdBeginQueryIndexedEXT)( switch (pool->vk.query_type) { case VK_QUERY_TYPE_OCCLUSION: cmd_buffer->state.gfx.n_occlusion_queries++; + cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_OCCLUSION_QUERY_ACTIVE; emit_ps_depth_count(cmd_buffer, anv_address_add(query_addr, 8)); break; @@ -1201,6 +1202,7 @@ void genX(CmdEndQueryIndexedEXT)( emit_ps_depth_count(cmd_buffer, anv_address_add(query_addr, 16)); emit_query_pc_availability(cmd_buffer, query_addr, true); cmd_buffer->state.gfx.n_occlusion_queries--; + cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_OCCLUSION_QUERY_ACTIVE; break; case VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT: