[Mesa-dev] [PATCH 20/68] glsl: include bindings when creating sha1 for metadata

Timothy Arceri timothy.arceri at collabora.com
Wed Jun 1 06:23:01 UTC 2016


These bindings change the resulting binary so they are just as
important as the shader source.
---
 src/compiler/glsl/shader_cache.cpp | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/src/compiler/glsl/shader_cache.cpp b/src/compiler/glsl/shader_cache.cpp
index 8b50ff6..7e6e9ca 100644
--- a/src/compiler/glsl/shader_cache.cpp
+++ b/src/compiler/glsl/shader_cache.cpp
@@ -389,6 +389,13 @@ read_shader_metadata(struct blob_reader *metadata,
    }
 }
 
+static void
+create_binding_str(const char *key, unsigned value, void *closure)
+{
+   char **bindings_str = (char **) closure;
+   ralloc_asprintf_append(bindings_str, "%s:%u,", key, value);
+}
+
 void
 shader_cache_write_program_metadata(struct gl_context *ctx,
                                     struct gl_shader_program *prog)
@@ -443,6 +450,7 @@ shader_cache_read_program_metadata(struct gl_context *ctx,
 {
    const char *stage_name[] = { "vs", "tcs", "tes", "gs", "fs", "cs" };
    char buf[256], sha1buf[41];
+   unsigned char sha1[20];
    int offset = 0;
    uint8_t *buffer;
    struct program_cache *cache;
@@ -463,6 +471,19 @@ shader_cache_read_program_metadata(struct gl_context *ctx,
       }
    }
 
+   char *bindings_str = ralloc_strdup(NULL, "vb: ");
+   prog->AttributeBindings->iterate(create_binding_str, &bindings_str);
+   ralloc_strcat(&bindings_str, "fb: ");
+   prog->FragDataBindings->iterate(create_binding_str, &bindings_str);
+   ralloc_strcat(&bindings_str, "fbi: ");
+   prog->FragDataIndexBindings->iterate(create_binding_str, &bindings_str);
+   _mesa_sha1_compute(bindings_str, strlen(bindings_str), sha1);
+   ralloc_free(bindings_str);
+
+   offset += snprintf(buf + offset, sizeof(buf) - offset,
+                      "bindings: %s\n",
+                      _mesa_sha1_format(sha1buf, sha1));
+
    for (unsigned i = 0; i < prog->NumShaders; i++) {
       if (prog->Shaders[i]->Source == NULL)
          return false;
-- 
2.5.5



More information about the mesa-dev mailing list