summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJordan Justen <[email protected]>2018-04-08 17:56:34 -0700
committerJordan Justen <[email protected]>2018-07-09 23:02:28 -0700
commit2a55553be3336d5bc969a7569cccbfab85671153 (patch)
tree65f4f61fada64f2a3dc0927b01ce115e25c29561
parent213491600a09aae15efa128fd6d4c46950fa4b4a (diff)
mesa: Add disk shader cache driver blob callback
Signed-off-by: Jordan Justen <[email protected]> Reviewed-by: Timothy Arceri <[email protected]>
-rw-r--r--src/compiler/glsl/shader_cache.cpp8
-rw-r--r--src/mesa/main/dd.h15
2 files changed, 23 insertions, 0 deletions
diff --git a/src/compiler/glsl/shader_cache.cpp b/src/compiler/glsl/shader_cache.cpp
index 042f3a60f5b..31d0aa62966 100644
--- a/src/compiler/glsl/shader_cache.cpp
+++ b/src/compiler/glsl/shader_cache.cpp
@@ -102,6 +102,14 @@ shader_cache_write_program_metadata(struct gl_context *ctx,
struct blob metadata;
blob_init(&metadata);
+ if (ctx->Driver.ShaderCacheSerializeDriverBlob) {
+ for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
+ struct gl_linked_shader *sh = prog->_LinkedShaders[i];
+ if (sh)
+ ctx->Driver.ShaderCacheSerializeDriverBlob(ctx, sh->Program);
+ }
+ }
+
serialize_glsl_program(&metadata, ctx, prog);
struct cache_item_metadata cache_item_metadata;
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 1b048d3ff8e..7081d586700 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -1282,6 +1282,21 @@ struct dd_function_table {
struct gl_semaphore_object *semObj,
int fd);
/*@}*/
+
+ /**
+ * \name Disk shader cache functions
+ */
+ /*@{*/
+ /**
+ * Called to initialize gl_program::driver_cache_blob (and size) with a
+ * ralloc allocated buffer.
+ *
+ * This buffer will be saved and restored as part of the gl_program
+ * serialization and deserialization.
+ */
+ void (*ShaderCacheSerializeDriverBlob)(struct gl_context *ctx,
+ struct gl_program *prog);
+ /*@}*/
};