diff --git a/src/gallium/drivers/iris/iris_context.h b/src/gallium/drivers/iris/iris_context.h index fb4423957ca..42cad5e8551 100644 --- a/src/gallium/drivers/iris/iris_context.h +++ b/src/gallium/drivers/iris/iris_context.h @@ -260,9 +260,8 @@ struct iris_uncompiled_shader { struct pipe_stream_output_info stream_output; - /* The serialized NIR (for the disk cache) and size in bytes. */ - void *ir_cache_binary; - uint32_t ir_cache_binary_size; + /* A SHA1 of the serialized NIR for the disk cache. */ + unsigned char nir_sha1[20]; unsigned program_id; diff --git a/src/gallium/drivers/iris/iris_disk_cache.c b/src/gallium/drivers/iris/iris_disk_cache.c index 2b022aff66a..eac01048122 100644 --- a/src/gallium/drivers/iris/iris_disk_cache.c +++ b/src/gallium/drivers/iris/iris_disk_cache.c @@ -61,16 +61,13 @@ iris_disk_cache_compute_key(struct disk_cache *cache, memcpy(&prog_key, orig_prog_key, prog_key_size); brw_prog_key_set_id(&prog_key, stage, 0); - uint32_t data_size = prog_key_size + ish->ir_cache_binary_size; + uint8_t data[sizeof(prog_key) + sizeof(ish->nir_sha1)]; + uint32_t data_size = prog_key_size + sizeof(ish->nir_sha1); - void *data = malloc(data_size); - memcpy(data, &prog_key, prog_key_size); - memcpy(data + prog_key_size, ish->ir_cache_binary, - ish->ir_cache_binary_size); + memcpy(data, ish->nir_sha1, sizeof(ish->nir_sha1)); + memcpy(data + sizeof(ish->nir_sha1), &prog_key, prog_key_size); disk_cache_compute_key(cache, data, data_size, cache_key); - - free(data); } /** diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c index a5cd987664f..60f45eec629 100644 --- a/src/gallium/drivers/iris/iris_program.c +++ b/src/gallium/drivers/iris/iris_program.c @@ -1506,9 +1506,7 @@ iris_create_uncompiled_shader(struct pipe_context *ctx, struct blob blob; blob_init(&blob); nir_serialize(&blob, ish->nir); - ish->ir_cache_binary = malloc(blob.size); - ish->ir_cache_binary_size = blob.size; - memcpy(ish->ir_cache_binary, blob.data, blob.size); + _mesa_sha1_compute(blob.data, blob.size, ish->nir_sha1); blob_finish(&blob); }