X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fspirv%2Fnir_spirv.h;h=acfcc084f417d33b6b43d1e987ae5b7ef8ad337d;hb=2044bdac4fbba0df471faa2a5736139c17c97857;hp=a2c40e57d1890a128fe313629c7871458e7c1d8e;hpb=50767214a790889120975bf0f598996c4f887dfc;p=mesa.git diff --git a/src/compiler/spirv/nir_spirv.h b/src/compiler/spirv/nir_spirv.h index a2c40e57d18..acfcc084f41 100644 --- a/src/compiler/spirv/nir_spirv.h +++ b/src/compiler/spirv/nir_spirv.h @@ -37,10 +37,8 @@ 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 { @@ -49,17 +47,45 @@ enum nir_spirv_debug_level { 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 { - /* 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. + 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 lower TessLevelInner and TessLevelOuter to system values. + * This is the inverse of GLSLTessLevelsAsInputs in GLSL. */ - bool lower_workgroup_access_to_offsets; + bool tess_levels_are_sysvals; 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, @@ -69,12 +95,16 @@ struct spirv_to_nir_options { } 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 struct spirv_to_nir_options *options, - const nir_shader_compiler_options *nir_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 }