I like it, Reviewed-by: Edward O'Callaghan <[email protected]>
On 12/28/2016 10:30 AM, Dave Airlie wrote: > From: Dave Airlie <[email protected]> > > I expect over time the struct contents will change as all > drivers support stuff etc, but for now this should be a good > starting point. > > Signed-off-by: Dave Airlie <[email protected]> > --- > src/compiler/spirv/nir_spirv.h | 6 ++++++ > src/compiler/spirv/spirv2nir.c | 2 +- > src/compiler/spirv/spirv_to_nir.c | 17 +++++++++++++++-- > src/compiler/spirv/vtn_private.h | 1 + > src/intel/vulkan/anv_pipeline.c | 2 +- > 5 files changed, 24 insertions(+), 4 deletions(-) > > diff --git a/src/compiler/spirv/nir_spirv.h b/src/compiler/spirv/nir_spirv.h > index 500f2cb..d959f3f 100644 > --- a/src/compiler/spirv/nir_spirv.h > +++ b/src/compiler/spirv/nir_spirv.h > @@ -41,10 +41,16 @@ struct nir_spirv_specialization { > uint32_t data; > }; > > +struct nir_spirv_supported_extensions { > + bool storage_image_extended_formats; > + bool image_ms_array; > +}; > + > nir_function *spirv_to_nir(const uint32_t *words, size_t word_count, > struct nir_spirv_specialization *specializations, > unsigned num_specializations, > gl_shader_stage stage, const char > *entry_point_name, > + const struct nir_spirv_supported_extensions *ext, > const nir_shader_compiler_options *options); > > #ifdef __cplusplus > diff --git a/src/compiler/spirv/spirv2nir.c b/src/compiler/spirv/spirv2nir.c > index 3dc0735..0ae14fb 100644 > --- a/src/compiler/spirv/spirv2nir.c > +++ b/src/compiler/spirv/spirv2nir.c > @@ -73,7 +73,7 @@ int main(int argc, char **argv) > } > > nir_function *func = spirv_to_nir(map, word_count, NULL, 0, > - MESA_SHADER_FRAGMENT, "main", NULL); > + MESA_SHADER_FRAGMENT, "main", NULL, > NULL); > nir_print_shader(func->shader, stderr); > > return 0; > diff --git a/src/compiler/spirv/spirv_to_nir.c > b/src/compiler/spirv/spirv_to_nir.c > index 57d0886..b8acc1e 100644 > --- a/src/compiler/spirv/spirv_to_nir.c > +++ b/src/compiler/spirv/spirv_to_nir.c > @@ -2461,6 +2461,12 @@ stage_for_execution_model(SpvExecutionModel model) > } > } > > +#define spv_check_supported(name, cap) do { \ > + if (!(b->ext && b->ext->name)) \ > + vtn_warn("Unsupported SPIR-V capability: %s", \ > + spirv_capability_to_string(cap)); \ > + } while(0) > + > static bool > vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode, > const uint32_t *w, unsigned count) > @@ -2519,8 +2525,6 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, > SpvOp opcode, > case SpvCapabilityInt8: > case SpvCapabilitySparseResidency: > case SpvCapabilityMinLod: > - case SpvCapabilityImageMSArray: > - case SpvCapabilityStorageImageExtendedFormats: > case SpvCapabilityTransformFeedback: > case SpvCapabilityStorageImageReadWithoutFormat: > case SpvCapabilityStorageImageWriteWithoutFormat: > @@ -2541,6 +2545,13 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, > SpvOp opcode, > vtn_warn("Unsupported OpenCL-style SPIR-V capability: %s", > spirv_capability_to_string(cap)); > break; > + > + case SpvCapabilityStorageImageExtendedFormats: > + spv_check_supported(storage_image_extended_formats, cap); > + break; > + case SpvCapabilityImageMSArray: > + spv_check_supported(image_ms_array, cap); > + break; > } > break; > } > @@ -3015,6 +3026,7 @@ nir_function * > spirv_to_nir(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, > + const struct nir_spirv_supported_extensions *ext, > const nir_shader_compiler_options *options) > { > const uint32_t *word_end = words + word_count; > @@ -3037,6 +3049,7 @@ spirv_to_nir(const uint32_t *words, size_t word_count, > exec_list_make_empty(&b->functions); > b->entry_point_stage = stage; > b->entry_point_name = entry_point_name; > + b->ext = ext; > > /* Handle all the preamble instructions */ > words = vtn_foreach_instruction(b, words, word_end, > diff --git a/src/compiler/spirv/vtn_private.h > b/src/compiler/spirv/vtn_private.h > index 47579fe..9302611 100644 > --- a/src/compiler/spirv/vtn_private.h > +++ b/src/compiler/spirv/vtn_private.h > @@ -347,6 +347,7 @@ struct vtn_builder { > > nir_shader *shader; > nir_function_impl *impl; > + const struct nir_spirv_supported_extensions *ext; > struct vtn_block *block; > > /* Current file, line, and column. Useful for debugging. Set > diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c > index e2fbcab..db35d70 100644 > --- a/src/intel/vulkan/anv_pipeline.c > +++ b/src/intel/vulkan/anv_pipeline.c > @@ -124,7 +124,7 @@ anv_shader_compile_to_nir(struct anv_device *device, > nir_function *entry_point = > spirv_to_nir(spirv, module->size / 4, > spec_entries, num_spec_entries, > - stage, entrypoint_name, nir_options); > + stage, entrypoint_name, NULL, nir_options); > nir_shader *nir = entry_point->shader; > assert(nir->stage == stage); > nir_validate_shader(nir); >
signature.asc
Description: OpenPGP digital signature
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
