diff options
author | Alejandro Piñeiro <[email protected]> | 2018-01-18 12:31:52 +0100 |
---|---|---|
committer | Alejandro Piñeiro <[email protected]> | 2018-03-30 09:14:56 +0200 |
commit | 9063bf7ad8a9175c4eddba5d06d887c507f6b5be (patch) | |
tree | 997c580adcf89df5cc9b593b700777e2160f5a14 /src/compiler/spirv/nir_spirv.h | |
parent | bebe3d626e562bd2dd027f9bcd5fdeeab62997cd (diff) |
nir/spirv: add gl_spirv_validation method
ARB_gl_spirv adds the ability to use SPIR-V binaries, and a new
method, glSpecializeShader. Here we add a new function to do the
validation for this function:
From OpenGL 4.6 spec, section 7.2.1"
"Shader Specialization", error table:
INVALID_VALUE is generated if <pEntryPoint> does not name a valid
entry point for <shader>.
INVALID_VALUE is generated if any element of <pConstantIndex>
refers to a specialization constant that does not exist in the
shader module contained in <shader>.""
v2: rebase update (spirv_to_nir options added, changes on the warning
logging, and others)
v3: include passing options on common initialization, doesn't call
setjmp on common_initialization
v4: (after Jason comments):
* Rename common_initialization to vtn_builder_create
* Move validation method and their helpers to own source file.
* Create own handle_constant_decoration_cb instead of reuse existing one
v5: put vtn_build_create refactoring to their own patch (Jason)
v6: update after vtn_builder_create method renamed, add explanatory
comment, tweak existing comment and commit message (Timothy)
Diffstat (limited to 'src/compiler/spirv/nir_spirv.h')
-rw-r--r-- | src/compiler/spirv/nir_spirv.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/compiler/spirv/nir_spirv.h b/src/compiler/spirv/nir_spirv.h index a2c40e57d18..d2766abb7f9 100644 --- a/src/compiler/spirv/nir_spirv.h +++ b/src/compiler/spirv/nir_spirv.h @@ -41,6 +41,7 @@ struct nir_spirv_specialization { uint32_t data32; uint64_t data64; }; + bool defined_on_module; }; enum nir_spirv_debug_level { @@ -69,6 +70,10 @@ struct spirv_to_nir_options { } debug; }; +bool gl_spirv_validation(const uint32_t *words, size_t word_count, + struct nir_spirv_specialization *spec, unsigned num_spec, + gl_shader_stage stage, const char *entry_point_name); + nir_function *spirv_to_nir(const uint32_t *words, size_t word_count, struct nir_spirv_specialization *specializations, unsigned num_specializations, |