glsl/serialize: Save shader program metadata sha1
authorJordan Justen <jordan.l.justen@intel.com>
Sat, 10 Mar 2018 09:59:47 +0000 (01:59 -0800)
committerJordan Justen <jordan.l.justen@intel.com>
Mon, 19 Mar 2018 16:57:09 +0000 (09:57 -0700)
When the shader cache is used, this can be generated. In fact, the
shader cache uses this sha1 to lookup the serialized GL shader
program.

If a GL shader program is restored with ProgramBinary, the shaders are
not available, and therefore the correct sha1 cannot be generated. If
this is restored, then we can use the shader cache to restore the
binary programs to the program that was loaded with ProgramBinary.

Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
src/compiler/glsl/serialize.cpp

index 9d2033bddfa8e6a159e1d1276e9ed48906a58e9c..1fdbaa990f43b8a491aba96fe8b37b36411bdcf9 100644 (file)
@@ -1163,6 +1163,8 @@ extern "C" void
 serialize_glsl_program(struct blob *blob, struct gl_context *ctx,
                        struct gl_shader_program *prog)
 {
+   blob_write_bytes(blob, prog->data->sha1, sizeof(prog->data->sha1));
+
    write_uniforms(blob, prog);
 
    write_hash_tables(blob, prog);
@@ -1219,6 +1221,8 @@ deserialize_glsl_program(struct blob_reader *blob, struct gl_context *ctx,
 
    assert(prog->data->UniformStorage == NULL);
 
+   blob_copy_bytes(blob, prog->data->sha1, sizeof(prog->data->sha1));
+
    read_uniforms(blob, prog);
 
    read_hash_tables(blob, prog);