aboutsummaryrefslogtreecommitdiffstats
path: root/src/mesa/main/glspirv.h
diff options
context:
space:
mode:
authorEduardo Lima Mitev <[email protected]>2017-11-13 13:57:46 +0100
committerEduardo Lima Mitev <[email protected]>2017-12-12 08:18:32 +0100
commita8889f5cc7129c1f8942248d620f64b4496e8f35 (patch)
tree52b16c0c70a9b49b0ef4a49011958408bbd79d4f /src/mesa/main/glspirv.h
parent74f98ab76f2a21ef511e6bbddaa08ac1748aca2e (diff)
mesa/glspirv: Add struct gl_shader_spirv_data
This is a per-shader structure holding the SPIR-V data associated with the shader (binary module, specialization constants and entry-point). This is needed because both gl_shader and gl_linked_shader need to share this data. Instead of copying the data, we pass a reference to it upon program linking. That's why it is reference-counted. This struct is created and associated with the shader upon calling glShaderBinary(), then subsequently filled up by the call to glSpecializeShaderARB(). v2: Readability improvements (Ian Romanick) Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/mesa/main/glspirv.h')
-rw-r--r--src/mesa/main/glspirv.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/mesa/main/glspirv.h b/src/mesa/main/glspirv.h
index 4e033735cfe..b8a0125ea9f 100644
--- a/src/mesa/main/glspirv.h
+++ b/src/mesa/main/glspirv.h
@@ -42,10 +42,35 @@ struct gl_spirv_module {
char Binary[0];
};
+/**
+ * SPIR-V data needed to compile and link a SPIR-V shader.
+ *
+ * It includes a SPIR-V binary that is potentially shared among different
+ * shaders; and shader-specific specialization constants and entry point.
+ *
+ * It is reference-counted because it is shared between gl_shader and its
+ * corresponding gl_linked_shader.
+ */
+struct gl_shader_spirv_data {
+ GLint RefCount;
+
+ struct gl_spirv_module *SpirVModule;
+
+ GLchar *SpirVEntryPoint;
+
+ GLuint NumSpecializationConstants;
+ GLuint *SpecializationConstantsIndex;
+ GLuint *SpecializationConstantsValue;
+};
+
void
_mesa_spirv_module_reference(struct gl_spirv_module **dest,
struct gl_spirv_module *src);
+void
+_mesa_shader_spirv_data_reference(struct gl_shader_spirv_data **dest,
+ struct gl_shader_spirv_data *src);
+
/**
* \name API functions
*/