X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fspirv%2Fnir_spirv.h;h=3d6f74e43ca9337952a7f9743c0d999cb805e6ed;hb=39006590517de05709d32378d6024de8041035d0;hp=500f2cb94dfb173d9095251b717ab9e1f21ba3a7;hpb=5567ae0547d5f31e51e5f32e78065894e594fd1a;p=mesa.git diff --git a/src/compiler/spirv/nir_spirv.h b/src/compiler/spirv/nir_spirv.h index 500f2cb94df..3d6f74e43ca 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,14 +37,69 @@ extern "C" { struct nir_spirv_specialization { uint32_t id; - uint32_t data; + 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, +}; + +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 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; + + 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; }; -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 nir_shader_compiler_options *options); +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 }