iris: Only store the SHA1 of the NIR in iris_uncompiled_shader
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 28 May 2019 22:34:52 +0000 (15:34 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 29 May 2019 18:16:32 +0000 (18:16 +0000)
Jason pointed out that we don't need to keep an entire copy of the
serialized NIR around, we just need the SHA1.  This does change our
disk cache key to be taking a SHA1 of a SHA1, which is a bit odd,
but should work out and be faster and use less memory.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/gallium/drivers/iris/iris_context.h
src/gallium/drivers/iris/iris_disk_cache.c
src/gallium/drivers/iris/iris_program.c

index fb4423957ca82cb72b3dcd17e36b9da597d9e39c..42cad5e85512d2742e5d1e0f6842fe8563da55a6 100644 (file)
@@ -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;
 
index 2b022aff66a432afad528562a68ea752768a071c..eac0104812202a12933385892bcf1a175e3b0f29 100644 (file)
@@ -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);
 }
 
 /**
index a5cd987664fb68177b74525f253d5a2cc8fe5b59..60f45eec629d8dd24de5b6199300b96e164df3b9 100644 (file)
@@ -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);
    }