diff options
author | Eduardo Lima Mitev <[email protected]> | 2017-11-13 13:57:46 +0100 |
---|---|---|
committer | Eduardo Lima Mitev <[email protected]> | 2017-12-12 08:18:32 +0100 |
commit | a8889f5cc7129c1f8942248d620f64b4496e8f35 (patch) | |
tree | 52b16c0c70a9b49b0ef4a49011958408bbd79d4f /src/mesa/main/glspirv.h | |
parent | 74f98ab76f2a21ef511e6bbddaa08ac1748aca2e (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.h | 25 |
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 */ |