mesa: Always call ProgramBinarySerializeDriverBlob

The driver may prefer to have a different blob for
ARB_get_program_binary compared to the version saved out for the disk
shader cache.

Since they both use the driver_cache_blob field, we need to always
give the driver the opportunity to fill in the driver_cache_blob when
saving the program binary.

Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
Jordan Justen 2018-04-19 15:39:40 -07:00
parent 6497be42b7
commit cce3994dee
No known key found for this signature in database
GPG Key ID: 37F99F68CAF992EB
1 changed files with 8 additions and 10 deletions

View File

@ -171,24 +171,22 @@ static void
write_program_payload(struct gl_context *ctx, struct blob *blob,
struct gl_shader_program *sh_prog)
{
bool serialize[MESA_SHADER_STAGES];
for (unsigned stage = 0; stage < MESA_SHADER_STAGES; stage++) {
struct gl_linked_shader *shader = sh_prog->_LinkedShaders[stage];
serialize[stage] = shader && shader->Program->driver_cache_blob == NULL;
if (serialize[stage])
if (shader)
ctx->Driver.ProgramBinarySerializeDriverBlob(ctx, shader->Program);
}
serialize_glsl_program(blob, ctx, sh_prog);
for (unsigned stage = 0; stage < MESA_SHADER_STAGES; stage++) {
if (!serialize[stage])
continue;
struct gl_program *prog = sh_prog->_LinkedShaders[stage]->Program;
ralloc_free(prog->driver_cache_blob);
prog->driver_cache_blob = NULL;
prog->driver_cache_blob_size = 0;
struct gl_linked_shader *shader = sh_prog->_LinkedShaders[stage];
if (shader) {
struct gl_program *prog = sh_prog->_LinkedShaders[stage]->Program;
ralloc_free(prog->driver_cache_blob);
prog->driver_cache_blob = NULL;
prog->driver_cache_blob_size = 0;
}
}
}