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

Author: Mark Janes <markja...@swizzler.org>
Date:   Mon Sep 11 15:01:53 2023 -0700

iris: 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/gallium/drivers/iris/iris_disk_cache.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/iris/iris_disk_cache.c 
b/src/gallium/drivers/iris/iris_disk_cache.c
index 24ad475b1f9..2e7e300c8f0 100644
--- a/src/gallium/drivers/iris/iris_disk_cache.c
+++ b/src/gallium/drivers/iris/iris_disk_cache.c
@@ -103,6 +103,8 @@ iris_disk_cache_store(struct disk_cache *cache,
    /* We write the following data to the cache blob:
     *
     * 1. Prog data (must come first because it has the assembly size)
+    *   - Zero out pointer values in prog data, so cache entries will be
+    *     consistent.
     * 2. Assembly code
     * 3. Number of entries in the system value array
     * 4. System value array
@@ -111,7 +113,14 @@ iris_disk_cache_store(struct disk_cache *cache,
     * 7. Legacy param array (only used for compute workgroup ID)
     * 8. Binding table
     */
-   blob_write_bytes(&blob, shader->prog_data, brw_prog_data_size(stage));
+   size_t prog_data_s = brw_prog_data_size(stage);
+   union brw_any_prog_data serializable;
+   assert(prog_data_s <= sizeof(serializable));
+   memcpy(&serializable, shader->prog_data, prog_data_s);
+   serializable.base.param = NULL;
+   serializable.base.relocs = NULL;
+   blob_write_bytes(&blob, &serializable, prog_data_s);
+
    blob_write_bytes(&blob, shader->map, shader->prog_data->program_size);
    blob_write_uint32(&blob, shader->num_system_values);
    blob_write_bytes(&blob, shader->system_values,

Reply via email to