X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fglspirv.h;h=8025c17c099d0f4e3f8d835f4f4cb2d5d78d6767;hb=651441c16fd2fa0eede876d70997cbfd646ef289;hp=4e033735cfe96b38e3df4e63b7d1296bccf614a1;hpb=74f98ab76f2a21ef511e6bbddaa08ac1748aca2e;p=mesa.git diff --git a/src/mesa/main/glspirv.h b/src/mesa/main/glspirv.h index 4e033735cfe..8025c17c099 100644 --- a/src/mesa/main/glspirv.h +++ b/src/mesa/main/glspirv.h @@ -24,12 +24,16 @@ #ifndef GLSPIRV_H #define GLSPIRV_H -#include "mtypes.h" +#include "compiler/nir/nir.h" #ifdef __cplusplus extern "C" { #endif +struct gl_shader_program; +struct gl_context; +struct gl_shader; + /** * A SPIR-V module contains the raw SPIR-V binary as set by ShaderBinary. * @@ -42,10 +46,50 @@ 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); + +void +_mesa_spirv_shader_binary(struct gl_context *ctx, + unsigned n, struct gl_shader **shaders, + const void* binary, size_t length); + +void +_mesa_spirv_link_shaders(struct gl_context *ctx, + struct gl_shader_program *prog); + +nir_shader * +_mesa_spirv_to_nir(struct gl_context *ctx, + const struct gl_shader_program *prog, + gl_shader_stage stage, + const nir_shader_compiler_options *options); + /** * \name API functions */