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. */

Reply via email to