Module: Mesa Branch: main Commit: 532d63993f9e33e13c259e0d95b77586816a08a0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=532d63993f9e33e13c259e0d95b77586816a08a0
Author: Samuel Pitoiset <[email protected]> Date: Wed Feb 8 16:26:50 2023 +0100 radv: keep track of the retained NIR shaders sha1 for LTO pipelines Otherwise the per pipeline cache key doesn't consider shaders at all when they are imported from libs. Signed-off-by: Samuel Pitoiset <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21834> --- src/amd/vulkan/radv_pipeline.c | 4 ++++ src/amd/vulkan/radv_private.h | 1 + 2 files changed, 5 insertions(+) diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index e013b8d9d40..baa2a91710f 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -3076,6 +3076,8 @@ radv_pipeline_get_nir(struct radv_graphics_pipeline *pipeline, struct radv_pipel if (retain_shaders) { /* Clone the NIR shader because NIR passes after this step will change it. */ pipeline->retained_shaders[s].nir = nir_shader_clone(NULL, stages[s].nir); + memcpy(pipeline->retained_shaders[s].shader_sha1, stages[s].shader_sha1, + sizeof(stages[s].shader_sha1)); } stages[s].feedback.duration += os_time_get_nano() - stage_start; @@ -3097,6 +3099,8 @@ radv_pipeline_load_retained_shaders(struct radv_graphics_pipeline *pipeline, stages[s].stage = s; stages[s].entrypoint = nir_shader_get_entrypoint(pipeline->retained_shaders[s].nir)->function->name; + memcpy(stages[s].shader_sha1, pipeline->retained_shaders[s].shader_sha1, + sizeof(stages[s].shader_sha1)); stages[s].feedback.duration += os_time_get_nano() - stage_start; stages[s].feedback.flags |= VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT; diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 8269cb078de..931f03621bf 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -2228,6 +2228,7 @@ struct radv_graphics_pipeline { bool retain_shaders; struct { nir_shader *nir; + unsigned char shader_sha1[SHA1_DIGEST_LENGTH]; } retained_shaders[MESA_VULKAN_SHADER_STAGES]; /* For relocation of shaders with RGP. */
