From c09f00d339afdca38df933275b3d88442c9077c3 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Thu, 26 Mar 2026 12:03:55 +0200 Subject: [PATCH] anv: use shader source hash rather than cmd_buffer fields Signed-off-by: Lionel Landwerlin Reviewed-by: Paulo Zanoni Part-of: --- src/intel/vulkan/anv_cmd_buffer.c | 2 -- src/intel/vulkan/anv_private.h | 3 --- src/intel/vulkan/genX_cmd_draw.c | 45 +++++++++++++------------------ 3 files changed, 19 insertions(+), 31 deletions(-) diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c index 16e524a5d69..c17931b224b 100644 --- a/src/intel/vulkan/anv_cmd_buffer.c +++ b/src/intel/vulkan/anv_cmd_buffer.c @@ -1717,7 +1717,6 @@ bind_graphics_shaders(struct anv_cmd_buffer *cmd_buffer, diff_fix_state(VF_SGVS_2, vs.vf_sgvs_2); diff_fix_state(VF_COMPONENT_PACKING, vs.vf_component_packing); diff_var_state(VF_SGVS_INSTANCING, vs.vf_sgvs_instancing); - gfx->vs_source_hash = shader->prog_data->source_hash; } else { BITSET_SET(hw_state->pack_dirty, ANV_GFX_STATE_VS); } @@ -1773,7 +1772,6 @@ bind_graphics_shaders(struct anv_cmd_buffer *cmd_buffer, diff_fix_state(WM, ps.wm); diff_fix_state(PS, ps.ps); diff_fix_state(PS_EXTRA, ps.ps_extra); - gfx->fs_source_hash = shader->prog_data->source_hash; } else { BITSET_SET(hw_state->pack_dirty, ANV_GFX_STATE_PS_EXTRA); } diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 6deccb712e3..6ecec021765 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -4454,9 +4454,6 @@ struct anv_cmd_graphics_state { /* Bitfield of valid entries in the shaders array */ VkShaderStageFlags active_stages; - uint32_t vs_source_hash; - uint32_t fs_source_hash; - /* Pipeline information */ uint32_t instance_multiplier; diff --git a/src/intel/vulkan/genX_cmd_draw.c b/src/intel/vulkan/genX_cmd_draw.c index 4c7771ebd64..356f0f6e59a 100644 --- a/src/intel/vulkan/genX_cmd_draw.c +++ b/src/intel/vulkan/genX_cmd_draw.c @@ -1102,6 +1102,12 @@ anv_use_generated_draws(const struct anv_cmd_buffer *cmd_buffer, uint32_t count) return count >= instance->drirc.perf.generated_indirect_threshold; } +#define gfx_source_hashes(gfx) \ + (gfx->shaders[MESA_SHADER_VERTEX] != NULL ? \ + gfx->shaders[MESA_SHADER_VERTEX]->prog_data->source_hash : 0ull), \ + (gfx->shaders[MESA_SHADER_FRAGMENT] != NULL ? \ + gfx->shaders[MESA_SHADER_FRAGMENT]->prog_data->source_hash : 0ull) + #include "genX_cmd_draw_helpers.h" #include "genX_cmd_draw_generated_indirect.h" @@ -1305,8 +1311,7 @@ void genX(CmdDraw)( cmd_buffer_post_draw_wa(cmd_buffer, vertexCount, SEQUENTIAL); trace_intel_end_draw(&cmd_buffer->trace, count, - gfx->vs_source_hash, - gfx->fs_source_hash); + gfx_source_hashes(gfx)); } void genX(CmdDrawMultiEXT)( @@ -1360,8 +1365,7 @@ void genX(CmdDrawMultiEXT)( SEQUENTIAL); trace_intel_end_draw_multi(&cmd_buffer->trace, count, - gfx->vs_source_hash, - gfx->fs_source_hash); + gfx_source_hashes(gfx)); } #else vk_foreach_multi_draw(draw, i, pVertexInfo, drawCount, stride) { @@ -1395,8 +1399,7 @@ void genX(CmdDrawMultiEXT)( SEQUENTIAL); trace_intel_end_draw_multi(&cmd_buffer->trace, count, - gfx->vs_source_hash, - gfx->fs_source_hash); + gfx_source_hashes(gfx)); } #endif } @@ -1465,8 +1468,7 @@ void genX(CmdDrawIndexed)( cmd_buffer_post_draw_wa(cmd_buffer, indexCount, RANDOM); trace_intel_end_draw_indexed(&cmd_buffer->trace, count, - gfx->vs_source_hash, - gfx->fs_source_hash); + gfx_source_hashes(gfx)); } void genX(CmdDrawMultiIndexedEXT)( @@ -1536,8 +1538,7 @@ void genX(CmdDrawMultiIndexedEXT)( RANDOM); trace_intel_end_draw_indexed_multi(&cmd_buffer->trace, count, - gfx->vs_source_hash, - gfx->fs_source_hash); + gfx_source_hashes(gfx)); emitted = false; } } else { @@ -1575,8 +1576,7 @@ void genX(CmdDrawMultiIndexedEXT)( RANDOM); trace_intel_end_draw_indexed_multi(&cmd_buffer->trace, count, - gfx->vs_source_hash, - gfx->fs_source_hash); + gfx_source_hashes(gfx)); } } } else { @@ -1610,8 +1610,7 @@ void genX(CmdDrawMultiIndexedEXT)( RANDOM); trace_intel_end_draw_indexed_multi(&cmd_buffer->trace, count, - gfx->vs_source_hash, - gfx->fs_source_hash); + gfx_source_hashes(gfx)); } } #else @@ -1648,8 +1647,7 @@ void genX(CmdDrawMultiIndexedEXT)( RANDOM); trace_intel_end_draw_indexed_multi(&cmd_buffer->trace, count, - gfx->vs_source_hash, - gfx->fs_source_hash); + gfx_source_hashes(gfx)); } #endif } @@ -1768,8 +1766,7 @@ void genX(CmdDrawIndirectByteCount2EXT)( trace_intel_end_draw_indirect_byte_count(&cmd_buffer->trace, instanceCount * gfx->instance_multiplier, - gfx->vs_source_hash, - gfx->fs_source_hash); + gfx_source_hashes(gfx)); } static void @@ -2091,8 +2088,7 @@ void genX(CmdDrawIndirect2KHR)( } trace_intel_end_draw_indirect(&cmd_buffer->trace, pInfo->drawCount, - gfx->vs_source_hash, - gfx->fs_source_hash); + gfx_source_hashes(gfx)); } void genX(CmdDrawIndexedIndirect2KHR)( @@ -2132,8 +2128,7 @@ void genX(CmdDrawIndexedIndirect2KHR)( } trace_intel_end_draw_indexed_indirect(&cmd_buffer->trace, pInfo->drawCount, - gfx->vs_source_hash, - gfx->fs_source_hash); + gfx_source_hashes(gfx)); } #define MI_PREDICATE_SRC0 0x2400 @@ -2323,8 +2318,7 @@ void genX(CmdDrawIndirectCount2KHR)( trace_intel_end_draw_indirect_count(&cmd_buffer->trace, anv_address_utrace(count_address), - gfx->vs_source_hash, - gfx->fs_source_hash); + gfx_source_hashes(gfx)); } void genX(CmdDrawIndexedIndirectCount2KHR)( @@ -2368,8 +2362,7 @@ void genX(CmdDrawIndexedIndirectCount2KHR)( trace_intel_end_draw_indexed_indirect_count(&cmd_buffer->trace, anv_address_utrace(count_address), - gfx->vs_source_hash, - gfx->fs_source_hash); + gfx_source_hashes(gfx)); } void genX(CmdBeginTransformFeedback2EXT)(