X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fspirv%2Fnir_spirv.h;h=3cbd0269ffeb462ccfe60c68aeb0f45e976d02a4;hb=43d22c8f2011b780467df97e58981522edccfa21;hp=e3f4ee85cc92166f0da25e508836dabe51e4200a;hpb=944e8b08cd182d00f82e8fa1efea4503eed18e1d;p=mesa.git diff --git a/src/compiler/spirv/nir_spirv.h b/src/compiler/spirv/nir_spirv.h index e3f4ee85cc9..3cbd0269ffe 100644 --- a/src/compiler/spirv/nir_spirv.h +++ b/src/compiler/spirv/nir_spirv.h @@ -25,12 +25,11 @@ * */ -#pragma once - #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" { @@ -38,24 +37,73 @@ extern "C" { struct nir_spirv_specialization { uint32_t id; - union { - uint32_t data32; - uint64_t data64; - }; + nir_const_value value; + bool defined_on_module; +}; + +enum nir_spirv_debug_level { + NIR_SPIRV_DEBUG_LEVEL_INFO, + NIR_SPIRV_DEBUG_LEVEL_WARNING, + NIR_SPIRV_DEBUG_LEVEL_ERROR, }; -struct nir_spirv_supported_extensions { - bool float64; - bool image_ms_array; - bool tessellation; +enum nir_spirv_execution_environment { + NIR_SPIRV_VULKAN = 0, + NIR_SPIRV_OPENCL, + NIR_SPIRV_OPENGL, }; -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); +struct spirv_to_nir_options { + enum nir_spirv_execution_environment environment; + + /* Whether or not to lower all UBO/SSBO access to offsets up-front. */ + bool lower_ubo_ssbo_access_to_offsets; + + /* Whether to make FragCoord to a system value, the same as + * GLSLFragCoordIsSysVal in GLSL. + */ + bool frag_coord_is_sysval; + + /* Whether to keep ViewIndex as an input instead of rewriting to a sysval. + */ + bool view_index_is_input; + + 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; + + /* Whether UniformConstant memory should be treated as normal global memory. + * This is usefull for CL 2.0 implementations with fine grain system SVM + * support. + */ + bool constant_as_global; + + 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 }