Module: Mesa
Branch: main
Commit: a1e68790212c30797605f699a96b813456c4b8ef
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a1e68790212c30797605f699a96b813456c4b8ef

Author: Mark Janes <markja...@swizzler.org>
Date:   Wed Sep 20 15:17:00 2023 -0700

anv: make shader cache content deterministic

Pointer values in shader cache data generate binary differences for
functionally identical shader content.

Reviewed-by: Ian Romanick <ian.d.roman...@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25923>

---

 src/intel/vulkan/anv_pipeline_cache.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/intel/vulkan/anv_pipeline_cache.c 
b/src/intel/vulkan/anv_pipeline_cache.c
index 06f2573abe8..880b297858b 100644
--- a/src/intel/vulkan/anv_pipeline_cache.c
+++ b/src/intel/vulkan/anv_pipeline_cache.c
@@ -218,7 +218,14 @@ anv_shader_bin_serialize(struct vk_pipeline_cache_object 
*object,
    blob_write_bytes(blob, shader->kernel.map, shader->kernel_size);
 
    blob_write_uint32(blob, shader->prog_data_size);
-   blob_write_bytes(blob, shader->prog_data, shader->prog_data_size);
+
+   union brw_any_prog_data prog_data;
+   assert(shader->prog_data_size <= sizeof(prog_data));
+   memcpy(&prog_data, shader->prog_data, shader->prog_data_size);
+   prog_data.base.relocs = NULL;
+   prog_data.base.param = NULL;
+   blob_write_bytes(blob, &prog_data, shader->prog_data_size);
+
    blob_write_bytes(blob, shader->prog_data->relocs,
                     shader->prog_data->num_relocs *
                     sizeof(shader->prog_data->relocs[0]));

Reply via email to