iris: Clone before calling nir_strip and serializing
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 28 May 2019 22:39:24 +0000 (15:39 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 29 May 2019 18:16:32 +0000 (18:16 +0000)
This is non-destructive and leaves the debugging information in place.

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

index 60f45eec629d8dd24de5b6199300b96e164df3b9..0e294d1b8e0f7fc4cceb04b22b2997f6cdd99764 100644 (file)
@@ -1496,18 +1496,20 @@ iris_create_uncompiled_shader(struct pipe_context *ctx,
       /* Serialize the NIR to a binary blob that we can hash for the disk
        * cache.  First, drop unnecessary information (like variable names)
        * so the serialized NIR is smaller, and also to let us detect more
-       * isomorphic shaders when hashing, increasing cache hits.
-       *
-       * We skip this step when not using the disk cache, as variable names
-       * are useful for inspecting and debugging shaders.
+       * isomorphic shaders when hashing, increasing cache hits.  We clone
+       * the NIR before stripping away this info because it can be useful
+       * when inspecting and debugging shaders.
        */
-      nir_strip(nir);
+      nir_shader *clone = nir_shader_clone(NULL, nir);
+      nir_strip(clone);
 
       struct blob blob;
       blob_init(&blob);
-      nir_serialize(&blob, ish->nir);
+      nir_serialize(&blob, clone);
       _mesa_sha1_compute(blob.data, blob.size, ish->nir_sha1);
       blob_finish(&blob);
+
+      ralloc_free(clone);
    }
 
    return ish;