X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fspirv%2Fnir_spirv.h;h=c4381bdf62e3e0283e72b2ae11c39277587d91e8;hb=887c2a60923debf0facc4d95554ed87555d83620;hp=7f16866b4930e30a2fc2905195840b34b96c171f;hpb=f903f78b7237f11f0f8f2bb10db0741a1c69458e;p=mesa.git diff --git a/src/compiler/spirv/nir_spirv.h b/src/compiler/spirv/nir_spirv.h index 7f16866b493..c4381bdf62e 100644 --- a/src/compiler/spirv/nir_spirv.h +++ b/src/compiler/spirv/nir_spirv.h @@ -28,7 +28,8 @@ #ifndef _NIR_SPIRV_H_ #define _NIR_SPIRV_H_ -#include "nir/nir.h" +#include "compiler/nir/nir.h" +#include "compiler/shader_info.h" #ifdef __cplusplus extern "C" { @@ -40,25 +41,65 @@ struct nir_spirv_specialization { uint32_t data32; uint64_t data64; }; + bool defined_on_module; }; -struct nir_spirv_supported_extensions { - bool float64; - bool image_ms_array; - bool tessellation; - bool draw_parameters; - bool image_read_without_format; - bool image_write_without_format; - bool int64; - bool multiview; +enum nir_spirv_debug_level { + NIR_SPIRV_DEBUG_LEVEL_INFO, + NIR_SPIRV_DEBUG_LEVEL_WARNING, + NIR_SPIRV_DEBUG_LEVEL_ERROR, }; -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); +enum nir_spirv_execution_environment { + NIR_SPIRV_VULKAN = 0, + NIR_SPIRV_OPENCL, + NIR_SPIRV_OPENGL, +}; + +struct spirv_to_nir_options { + enum nir_spirv_execution_environment environment; + + /* Whether or not to lower all workgroup variable access to offsets + * up-front. This means you will _shared intrinsics instead of _var + * for workgroup data access. + * + * This is currently required for full variable pointers support. + */ + bool lower_workgroup_access_to_offsets; + + /* Whether or not to lower all UBO/SSBO access to offsets up-front. */ + bool lower_ubo_ssbo_access_to_offsets; + + struct spirv_supported_capabilities caps; + + /* Address format for various kinds of pointers. */ + nir_address_format ubo_addr_format; + nir_address_format ssbo_addr_format; + nir_address_format phys_ssbo_addr_format; + nir_address_format push_const_addr_format; + nir_address_format shared_addr_format; + nir_address_format global_addr_format; + nir_address_format temp_addr_format; + + struct { + void (*func)(void *private_data, + enum nir_spirv_debug_level level, + size_t spirv_offset, + const char *message); + void *private_data; + } 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_shader *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 spirv_to_nir_options *options, + const nir_shader_compiler_options *nir_options); #ifdef __cplusplus }