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,