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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev