31#ifndef SPIRV_REFLECT_H
32#define SPIRV_REFLECT_H
34#if defined(SPIRV_REFLECT_USE_SYSTEM_SPIRV_H)
35#include <spirv/unified1/spirv.h>
37#include "./spirv/unified1/spirv.h"
45 #define SPV_REFLECT_DEPRECATED(msg_str) __declspec(deprecated("This symbol is deprecated. Details: " msg_str))
46#elif defined(__clang__)
47 #define SPV_REFLECT_DEPRECATED(msg_str) __attribute__((deprecated(msg_str)))
48#elif defined(__GNUC__)
49 #if GCC_VERSION >= 40500
50 #define SPV_REFLECT_DEPRECATED(msg_str) __attribute__((deprecated(msg_str)))
52 #define SPV_REFLECT_DEPRECATED(msg_str) __attribute__((deprecated))
55 #define SPV_REFLECT_DEPRECATED(msg_str)
61typedef enum SpvReflectResult {
62 SPV_REFLECT_RESULT_SUCCESS,
63 SPV_REFLECT_RESULT_NOT_READY,
64 SPV_REFLECT_RESULT_ERROR_PARSE_FAILED,
65 SPV_REFLECT_RESULT_ERROR_ALLOC_FAILED,
66 SPV_REFLECT_RESULT_ERROR_RANGE_EXCEEDED,
67 SPV_REFLECT_RESULT_ERROR_NULL_POINTER,
68 SPV_REFLECT_RESULT_ERROR_INTERNAL_ERROR,
69 SPV_REFLECT_RESULT_ERROR_COUNT_MISMATCH,
70 SPV_REFLECT_RESULT_ERROR_ELEMENT_NOT_FOUND,
71 SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_CODE_SIZE,
72 SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_MAGIC_NUMBER,
73 SPV_REFLECT_RESULT_ERROR_SPIRV_UNEXPECTED_EOF,
74 SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE,
75 SPV_REFLECT_RESULT_ERROR_SPIRV_SET_NUMBER_OVERFLOW,
76 SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_STORAGE_CLASS,
77 SPV_REFLECT_RESULT_ERROR_SPIRV_RECURSION,
78 SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_INSTRUCTION,
79 SPV_REFLECT_RESULT_ERROR_SPIRV_UNEXPECTED_BLOCK_DATA,
80 SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_BLOCK_MEMBER_REFERENCE,
81 SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ENTRY_POINT,
82 SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_EXECUTION_MODE,
83 SPV_REFLECT_RESULT_ERROR_SPIRV_MAX_RECURSIVE_EXCEEDED,
99 SPV_REFLECT_MODULE_FLAG_NONE = 0x00000000,
100 SPV_REFLECT_MODULE_FLAG_NO_COPY = 0x00000001,
103typedef uint32_t SpvReflectModuleFlags;
108typedef enum SpvReflectTypeFlagBits {
109 SPV_REFLECT_TYPE_FLAG_UNDEFINED = 0x00000000,
110 SPV_REFLECT_TYPE_FLAG_VOID = 0x00000001,
111 SPV_REFLECT_TYPE_FLAG_BOOL = 0x00000002,
112 SPV_REFLECT_TYPE_FLAG_INT = 0x00000004,
113 SPV_REFLECT_TYPE_FLAG_FLOAT = 0x00000008,
114 SPV_REFLECT_TYPE_FLAG_VECTOR = 0x00000100,
115 SPV_REFLECT_TYPE_FLAG_MATRIX = 0x00000200,
116 SPV_REFLECT_TYPE_FLAG_EXTERNAL_IMAGE = 0x00010000,
117 SPV_REFLECT_TYPE_FLAG_EXTERNAL_SAMPLER = 0x00020000,
118 SPV_REFLECT_TYPE_FLAG_EXTERNAL_SAMPLED_IMAGE = 0x00040000,
119 SPV_REFLECT_TYPE_FLAG_EXTERNAL_BLOCK = 0x00080000,
120 SPV_REFLECT_TYPE_FLAG_EXTERNAL_ACCELERATION_STRUCTURE = 0x00100000,
121 SPV_REFLECT_TYPE_FLAG_EXTERNAL_MASK = 0x00FF0000,
122 SPV_REFLECT_TYPE_FLAG_STRUCT = 0x10000000,
123 SPV_REFLECT_TYPE_FLAG_ARRAY = 0x20000000,
124 SPV_REFLECT_TYPE_FLAG_REF = 0x40000000,
125} SpvReflectTypeFlagBits;
127typedef uint32_t SpvReflectTypeFlags;
142typedef enum SpvReflectDecorationFlagBits {
143 SPV_REFLECT_DECORATION_NONE = 0x00000000,
144 SPV_REFLECT_DECORATION_BLOCK = 0x00000001,
145 SPV_REFLECT_DECORATION_BUFFER_BLOCK = 0x00000002,
146 SPV_REFLECT_DECORATION_ROW_MAJOR = 0x00000004,
147 SPV_REFLECT_DECORATION_COLUMN_MAJOR = 0x00000008,
148 SPV_REFLECT_DECORATION_BUILT_IN = 0x00000010,
149 SPV_REFLECT_DECORATION_NOPERSPECTIVE = 0x00000020,
150 SPV_REFLECT_DECORATION_FLAT = 0x00000040,
151 SPV_REFLECT_DECORATION_NON_WRITABLE = 0x00000080,
152 SPV_REFLECT_DECORATION_RELAXED_PRECISION = 0x00000100,
153 SPV_REFLECT_DECORATION_NON_READABLE = 0x00000200,
154 SPV_REFLECT_DECORATION_PATCH = 0x00000400,
155 SPV_REFLECT_DECORATION_PER_VERTEX = 0x00000800,
156 SPV_REFLECT_DECORATION_PER_TASK = 0x00001000,
157 SPV_REFLECT_DECORATION_WEIGHT_TEXTURE = 0x00002000,
158 SPV_REFLECT_DECORATION_BLOCK_MATCH_TEXTURE = 0x00004000,
159} SpvReflectDecorationFlagBits;
161typedef uint32_t SpvReflectDecorationFlags;
164typedef enum SpvReflectUserType {
165 SPV_REFLECT_USER_TYPE_INVALID = 0,
166 SPV_REFLECT_USER_TYPE_CBUFFER,
167 SPV_REFLECT_USER_TYPE_TBUFFER,
168 SPV_REFLECT_USER_TYPE_APPEND_STRUCTURED_BUFFER,
169 SPV_REFLECT_USER_TYPE_BUFFER,
170 SPV_REFLECT_USER_TYPE_BYTE_ADDRESS_BUFFER,
171 SPV_REFLECT_USER_TYPE_CONSTANT_BUFFER,
172 SPV_REFLECT_USER_TYPE_CONSUME_STRUCTURED_BUFFER,
173 SPV_REFLECT_USER_TYPE_INPUT_PATCH,
174 SPV_REFLECT_USER_TYPE_OUTPUT_PATCH,
175 SPV_REFLECT_USER_TYPE_RASTERIZER_ORDERED_BUFFER,
176 SPV_REFLECT_USER_TYPE_RASTERIZER_ORDERED_BYTE_ADDRESS_BUFFER,
177 SPV_REFLECT_USER_TYPE_RASTERIZER_ORDERED_STRUCTURED_BUFFER,
178 SPV_REFLECT_USER_TYPE_RASTERIZER_ORDERED_TEXTURE_1D,
179 SPV_REFLECT_USER_TYPE_RASTERIZER_ORDERED_TEXTURE_1D_ARRAY,
180 SPV_REFLECT_USER_TYPE_RASTERIZER_ORDERED_TEXTURE_2D,
181 SPV_REFLECT_USER_TYPE_RASTERIZER_ORDERED_TEXTURE_2D_ARRAY,
182 SPV_REFLECT_USER_TYPE_RASTERIZER_ORDERED_TEXTURE_3D,
183 SPV_REFLECT_USER_TYPE_RAYTRACING_ACCELERATION_STRUCTURE,
184 SPV_REFLECT_USER_TYPE_RW_BUFFER,
185 SPV_REFLECT_USER_TYPE_RW_BYTE_ADDRESS_BUFFER,
186 SPV_REFLECT_USER_TYPE_RW_STRUCTURED_BUFFER,
187 SPV_REFLECT_USER_TYPE_RW_TEXTURE_1D,
188 SPV_REFLECT_USER_TYPE_RW_TEXTURE_1D_ARRAY,
189 SPV_REFLECT_USER_TYPE_RW_TEXTURE_2D,
190 SPV_REFLECT_USER_TYPE_RW_TEXTURE_2D_ARRAY,
191 SPV_REFLECT_USER_TYPE_RW_TEXTURE_3D,
192 SPV_REFLECT_USER_TYPE_STRUCTURED_BUFFER,
193 SPV_REFLECT_USER_TYPE_SUBPASS_INPUT,
194 SPV_REFLECT_USER_TYPE_SUBPASS_INPUT_MS,
195 SPV_REFLECT_USER_TYPE_TEXTURE_1D,
196 SPV_REFLECT_USER_TYPE_TEXTURE_1D_ARRAY,
197 SPV_REFLECT_USER_TYPE_TEXTURE_2D,
198 SPV_REFLECT_USER_TYPE_TEXTURE_2D_ARRAY,
199 SPV_REFLECT_USER_TYPE_TEXTURE_2DMS,
200 SPV_REFLECT_USER_TYPE_TEXTURE_2DMS_ARRAY,
201 SPV_REFLECT_USER_TYPE_TEXTURE_3D,
202 SPV_REFLECT_USER_TYPE_TEXTURE_BUFFER,
203 SPV_REFLECT_USER_TYPE_TEXTURE_CUBE,
204 SPV_REFLECT_USER_TYPE_TEXTURE_CUBE_ARRAY,
210typedef enum SpvReflectResourceType {
211 SPV_REFLECT_RESOURCE_FLAG_UNDEFINED = 0x00000000,
212 SPV_REFLECT_RESOURCE_FLAG_SAMPLER = 0x00000001,
213 SPV_REFLECT_RESOURCE_FLAG_CBV = 0x00000002,
214 SPV_REFLECT_RESOURCE_FLAG_SRV = 0x00000004,
215 SPV_REFLECT_RESOURCE_FLAG_UAV = 0x00000008,
216} SpvReflectResourceType;
221typedef enum SpvReflectFormat {
222 SPV_REFLECT_FORMAT_UNDEFINED = 0,
223 SPV_REFLECT_FORMAT_R16_UINT = 74,
224 SPV_REFLECT_FORMAT_R16_SINT = 75,
225 SPV_REFLECT_FORMAT_R16_SFLOAT = 76,
226 SPV_REFLECT_FORMAT_R16G16_UINT = 81,
227 SPV_REFLECT_FORMAT_R16G16_SINT = 82,
228 SPV_REFLECT_FORMAT_R16G16_SFLOAT = 83,
229 SPV_REFLECT_FORMAT_R16G16B16_UINT = 88,
230 SPV_REFLECT_FORMAT_R16G16B16_SINT = 89,
231 SPV_REFLECT_FORMAT_R16G16B16_SFLOAT = 90,
232 SPV_REFLECT_FORMAT_R16G16B16A16_UINT = 95,
233 SPV_REFLECT_FORMAT_R16G16B16A16_SINT = 96,
234 SPV_REFLECT_FORMAT_R16G16B16A16_SFLOAT = 97,
235 SPV_REFLECT_FORMAT_R32_UINT = 98,
236 SPV_REFLECT_FORMAT_R32_SINT = 99,
237 SPV_REFLECT_FORMAT_R32_SFLOAT = 100,
238 SPV_REFLECT_FORMAT_R32G32_UINT = 101,
239 SPV_REFLECT_FORMAT_R32G32_SINT = 102,
240 SPV_REFLECT_FORMAT_R32G32_SFLOAT = 103,
241 SPV_REFLECT_FORMAT_R32G32B32_UINT = 104,
242 SPV_REFLECT_FORMAT_R32G32B32_SINT = 105,
243 SPV_REFLECT_FORMAT_R32G32B32_SFLOAT = 106,
244 SPV_REFLECT_FORMAT_R32G32B32A32_UINT = 107,
245 SPV_REFLECT_FORMAT_R32G32B32A32_SINT = 108,
246 SPV_REFLECT_FORMAT_R32G32B32A32_SFLOAT = 109,
247 SPV_REFLECT_FORMAT_R64_UINT = 110,
248 SPV_REFLECT_FORMAT_R64_SINT = 111,
249 SPV_REFLECT_FORMAT_R64_SFLOAT = 112,
250 SPV_REFLECT_FORMAT_R64G64_UINT = 113,
251 SPV_REFLECT_FORMAT_R64G64_SINT = 114,
252 SPV_REFLECT_FORMAT_R64G64_SFLOAT = 115,
253 SPV_REFLECT_FORMAT_R64G64B64_UINT = 116,
254 SPV_REFLECT_FORMAT_R64G64B64_SINT = 117,
255 SPV_REFLECT_FORMAT_R64G64B64_SFLOAT = 118,
256 SPV_REFLECT_FORMAT_R64G64B64A64_UINT = 119,
257 SPV_REFLECT_FORMAT_R64G64B64A64_SINT = 120,
258 SPV_REFLECT_FORMAT_R64G64B64A64_SFLOAT = 121,
264enum SpvReflectVariableFlagBits{
265 SPV_REFLECT_VARIABLE_FLAGS_NONE = 0x00000000,
266 SPV_REFLECT_VARIABLE_FLAGS_UNUSED = 0x00000001,
268 SPV_REFLECT_VARIABLE_FLAGS_PHYSICAL_POINTER_COPY = 0x00000002,
271typedef uint32_t SpvReflectVariableFlags;
276typedef enum SpvReflectDescriptorType {
277 SPV_REFLECT_DESCRIPTOR_TYPE_SAMPLER = 0,
278 SPV_REFLECT_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1,
279 SPV_REFLECT_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2,
280 SPV_REFLECT_DESCRIPTOR_TYPE_STORAGE_IMAGE = 3,
281 SPV_REFLECT_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 4,
282 SPV_REFLECT_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 5,
283 SPV_REFLECT_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 6,
284 SPV_REFLECT_DESCRIPTOR_TYPE_STORAGE_BUFFER = 7,
285 SPV_REFLECT_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8,
286 SPV_REFLECT_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9,
287 SPV_REFLECT_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10,
288 SPV_REFLECT_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000
289} SpvReflectDescriptorType;
294typedef enum SpvReflectShaderStageFlagBits {
295 SPV_REFLECT_SHADER_STAGE_VERTEX_BIT = 0x00000001,
296 SPV_REFLECT_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
297 SPV_REFLECT_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
298 SPV_REFLECT_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
299 SPV_REFLECT_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
300 SPV_REFLECT_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
301 SPV_REFLECT_SHADER_STAGE_TASK_BIT_NV = 0x00000040,
302 SPV_REFLECT_SHADER_STAGE_TASK_BIT_EXT = SPV_REFLECT_SHADER_STAGE_TASK_BIT_NV,
303 SPV_REFLECT_SHADER_STAGE_MESH_BIT_NV = 0x00000080,
304 SPV_REFLECT_SHADER_STAGE_MESH_BIT_EXT = SPV_REFLECT_SHADER_STAGE_MESH_BIT_NV,
305 SPV_REFLECT_SHADER_STAGE_RAYGEN_BIT_KHR = 0x00000100,
306 SPV_REFLECT_SHADER_STAGE_ANY_HIT_BIT_KHR = 0x00000200,
307 SPV_REFLECT_SHADER_STAGE_CLOSEST_HIT_BIT_KHR = 0x00000400,
308 SPV_REFLECT_SHADER_STAGE_MISS_BIT_KHR = 0x00000800,
309 SPV_REFLECT_SHADER_STAGE_INTERSECTION_BIT_KHR = 0x00001000,
310 SPV_REFLECT_SHADER_STAGE_CALLABLE_BIT_KHR = 0x00002000,
312} SpvReflectShaderStageFlagBits;
317typedef enum SpvReflectGenerator {
318 SPV_REFLECT_GENERATOR_KHRONOS_LLVM_SPIRV_TRANSLATOR = 6,
319 SPV_REFLECT_GENERATOR_KHRONOS_SPIRV_TOOLS_ASSEMBLER = 7,
320 SPV_REFLECT_GENERATOR_KHRONOS_GLSLANG_REFERENCE_FRONT_END = 8,
321 SPV_REFLECT_GENERATOR_GOOGLE_SHADERC_OVER_GLSLANG = 13,
322 SPV_REFLECT_GENERATOR_GOOGLE_SPIREGG = 14,
323 SPV_REFLECT_GENERATOR_GOOGLE_RSPIRV = 15,
324 SPV_REFLECT_GENERATOR_X_LEGEND_MESA_MESAIR_SPIRV_TRANSLATOR = 16,
325 SPV_REFLECT_GENERATOR_KHRONOS_SPIRV_TOOLS_LINKER = 17,
326 SPV_REFLECT_GENERATOR_WINE_VKD3D_SHADER_COMPILER = 18,
327 SPV_REFLECT_GENERATOR_CLAY_CLAY_SHADER_COMPILER = 19,
328} SpvReflectGenerator;
331 SPV_REFLECT_MAX_ARRAY_DIMS = 32,
332 SPV_REFLECT_MAX_DESCRIPTOR_SETS = 64,
336 SPV_REFLECT_BINDING_NUMBER_DONT_CHANGE = ~0,
337 SPV_REFLECT_SET_NUMBER_DONT_CHANGE = ~0
347 uint32_t component_count;
351 uint32_t column_count;
363 SpvImageFormat image_format;
366typedef enum SpvReflectArrayDimType {
367 SPV_REFLECT_ARRAY_DIM_RUNTIME = 0,
368} SpvReflectArrayDimType;
376 uint32_t dims[SPV_REFLECT_MAX_ARRAY_DIMS];
378 uint32_t spec_constant_op_ids[SPV_REFLECT_MAX_ARRAY_DIMS];
384 uint32_t dims[SPV_REFLECT_MAX_ARRAY_DIMS];
393 const char* type_name;
395 const char* struct_member_name;
396 SpvStorageClass storage_class;
397 SpvReflectTypeFlags type_flags;
398 SpvReflectDecorationFlags decoration_flags;
415 uint32_t member_count;
429 SpvStorageClass storage_class;
430 const char* semantic;
431 SpvReflectDecorationFlags decoration_flags;
436 uint32_t member_count;
439 SpvReflectFormat format;
460 uint32_t absolute_offset;
462 uint32_t padded_size;
463 SpvReflectDecorationFlags decoration_flags;
466 SpvReflectVariableFlags flags;
468 uint32_t member_count;
486 uint32_t input_attachment_index;
488 SpvReflectDescriptorType descriptor_type;
489 SpvReflectResourceType resource_type;
495 uint32_t uav_counter_id;
497 uint32_t byte_address_buffer_offset_count;
498 uint32_t* byte_address_buffer_offsets;
507 SpvReflectDecorationFlags decoration_flags;
509 SpvReflectUserType user_type;
517 uint32_t binding_count;
521typedef enum SpvReflectExecutionModeValue {
522 SPV_REFLECT_EXECUTION_MODE_SPEC_CONSTANT = 0xFFFFFFFF
523} SpvReflectExecutionModeValue;
532 SpvExecutionModel spirv_execution_model;
533 SpvReflectShaderStageFlagBits shader_stage;
535 uint32_t input_variable_count;
537 uint32_t output_variable_count;
539 uint32_t interface_variable_count;
542 uint32_t descriptor_set_count;
545 uint32_t used_uniform_count;
546 uint32_t* used_uniforms;
547 uint32_t used_push_constant_count;
548 uint32_t* used_push_constants;
550 uint32_t execution_mode_count;
551 SpvExecutionMode* execution_modes;
558 uint32_t invocations;
559 uint32_t output_vertices;
567 uint32_t word_offset;
576 uint32_t constant_id;
584 SpvReflectGenerator generator;
585 const char* entry_point_name;
586 uint32_t entry_point_id;
587 uint32_t entry_point_count;
589 SpvSourceLanguage source_language;
590 uint32_t source_language_version;
591 const char* source_file;
592 const char* source_source;
593 uint32_t capability_count;
595 SpvExecutionModel spirv_execution_model;
596 SpvReflectShaderStageFlagBits shader_stage;
597 uint32_t descriptor_binding_count;
599 uint32_t descriptor_set_count;
601 uint32_t input_variable_count;
603 uint32_t output_variable_count;
605 uint32_t interface_variable_count;
607 uint32_t push_constant_block_count;
609 uint32_t spec_constant_count;
613 SpvReflectModuleFlags module_flags;
615 uint32_t* spirv_code;
616 uint32_t spirv_word_count;
618 size_t type_description_count;
624#if defined(__cplusplus)
636SpvReflectResult spvReflectCreateShaderModule(
651SpvReflectResult spvReflectCreateShaderModule2(
652 SpvReflectModuleFlags flags,
658SPV_REFLECT_DEPRECATED(
"renamed to spvReflectCreateShaderModule")
659SpvReflectResult spvReflectGetShaderModule(
700 const
char* entry_point
721SpvReflectResult spvReflectEnumerateDescriptorBindings(
747SpvReflectResult spvReflectEnumerateEntryPointDescriptorBindings(
749 const
char* entry_point,
772SpvReflectResult spvReflectEnumerateDescriptorSets(
798SpvReflectResult spvReflectEnumerateEntryPointDescriptorSets(
800 const
char* entry_point,
825SpvReflectResult spvReflectEnumerateInterfaceVariables(
850SpvReflectResult spvReflectEnumerateEntryPointInterfaceVariables(
852 const
char* entry_point,
877SpvReflectResult spvReflectEnumerateInputVariables(
902SpvReflectResult spvReflectEnumerateEntryPointInputVariables(
904 const
char* entry_point,
929SpvReflectResult spvReflectEnumerateOutputVariables(
954SpvReflectResult spvReflectEnumerateEntryPointOutputVariables(
956 const
char* entry_point,
982SpvReflectResult spvReflectEnumeratePushConstantBlocks(
987SPV_REFLECT_DEPRECATED("renamed to spvReflectEnumeratePushConstantBlocks")
988SpvReflectResult spvReflectEnumeratePushConstants(
1014SpvReflectResult spvReflectEnumerateEntryPointPushConstantBlocks(
1016 const
char* entry_point,
1035SpvReflectResult spvReflectEnumerateSpecializationConstants(
1065 uint32_t binding_number,
1066 uint32_t set_number,
1067 SpvReflectResult* p_result
1097 const
char* entry_point,
1098 uint32_t binding_number,
1099 uint32_t set_number,
1100 SpvReflectResult* p_result
1122 uint32_t set_number,
1123 SpvReflectResult* p_result
1145 const
char* entry_point,
1146 uint32_t set_number,
1147 SpvReflectResult* p_result
1174 SpvReflectResult* p_result
1176SPV_REFLECT_DEPRECATED("renamed to spvReflectGetInputVariableByLocation")
1180 SpvReflectResult* p_result
1206 const
char* entry_point,
1208 SpvReflectResult* p_result
1234 const
char* semantic,
1235 SpvReflectResult* p_result
1262 const
char* entry_point,
1263 const
char* semantic,
1264 SpvReflectResult* p_result
1290 SpvReflectResult* p_result
1292SPV_REFLECT_DEPRECATED("renamed to spvReflectGetOutputVariableByLocation")
1296 SpvReflectResult* p_result
1322 const
char* entry_point,
1324 SpvReflectResult* p_result
1350 const
char* semantic,
1351 SpvReflectResult* p_result
1378 const
char* entry_point,
1379 const
char* semantic,
1380 SpvReflectResult* p_result
1403 SpvReflectResult* p_result
1405SPV_REFLECT_DEPRECATED("renamed to spvReflectGetPushConstantBlock")
1409 SpvReflectResult* p_result
1433 const
char* entry_point,
1434 SpvReflectResult* p_result
1461SpvReflectResult spvReflectChangeDescriptorBindingNumbers(
1464 uint32_t new_binding_number,
1465 uint32_t new_set_number
1467SPV_REFLECT_DEPRECATED("Renamed to spvReflectChangeDescriptorBindingNumbers")
1468SpvReflectResult spvReflectChangeDescriptorBindingNumber(
1471 uint32_t new_binding_number,
1472 uint32_t optional_new_set_number
1497SpvReflectResult spvReflectChangeDescriptorSetNumber(
1500 uint32_t new_set_number
1520SpvReflectResult spvReflectChangeInputVariableLocation(
1523 uint32_t new_location
1544SpvReflectResult spvReflectChangeOutputVariableLocation(
1547 uint32_t new_location
1557const
char* spvReflectSourceLanguage(SpvSourceLanguage source_lang);
1565const
char* spvReflectBlockVariableTypeName(
1569#if defined(__cplusplus)
1573#if defined(__cplusplus) && !defined(SPIRV_REFLECT_DISABLE_CPP_BINDINGS)
1578namespace spv_reflect {
1586 ShaderModule(
size_t size,
const void* p_code, SpvReflectModuleFlags flags = SPV_REFLECT_MODULE_FLAG_NONE);
1587 ShaderModule(
const std::vector<uint8_t>& code, SpvReflectModuleFlags flags = SPV_REFLECT_MODULE_FLAG_NONE);
1588 ShaderModule(
const std::vector<uint32_t>& code, SpvReflectModuleFlags flags = SPV_REFLECT_MODULE_FLAG_NONE);
1591 ShaderModule(ShaderModule&& other);
1592 ShaderModule& operator=(ShaderModule&& other);
1594 SpvReflectResult GetResult()
const;
1598 uint32_t GetCodeSize()
const;
1599 const uint32_t* GetCode()
const;
1601 const char* GetEntryPointName()
const;
1603 const char* GetSourceFile()
const;
1605 uint32_t GetEntryPointCount()
const;
1606 const char* GetEntryPointName(uint32_t index)
const;
1607 SpvReflectShaderStageFlagBits GetEntryPointShaderStage(uint32_t index)
const;
1609 SpvReflectShaderStageFlagBits GetShaderStage()
const;
1610 SPV_REFLECT_DEPRECATED(
"Renamed to GetShaderStage")
1611 SpvReflectShaderStageFlagBits GetVulkanShaderStage()
const {
1612 return GetShaderStage();
1616 SpvReflectResult EnumerateEntryPointDescriptorBindings(
const char* entry_point, uint32_t* p_count,
SpvReflectDescriptorBinding** pp_bindings)
const;
1618 SpvReflectResult EnumerateEntryPointDescriptorSets(
const char* entry_point, uint32_t* p_count,
SpvReflectDescriptorSet** pp_sets)
const ;
1620 SpvReflectResult EnumerateEntryPointInterfaceVariables(
const char* entry_point, uint32_t* p_count,
SpvReflectInterfaceVariable** pp_variables)
const;
1622 SpvReflectResult EnumerateEntryPointInputVariables(
const char* entry_point, uint32_t* p_count,
SpvReflectInterfaceVariable** pp_variables)
const;
1624 SpvReflectResult EnumerateEntryPointOutputVariables(
const char* entry_point, uint32_t* p_count,
SpvReflectInterfaceVariable** pp_variables)
const;
1626 SpvReflectResult EnumerateEntryPointPushConstantBlocks(
const char* entry_point, uint32_t* p_count,
SpvReflectBlockVariable** pp_blocks)
const;
1627 SPV_REFLECT_DEPRECATED(
"Renamed to EnumeratePushConstantBlocks")
1629 return EnumeratePushConstantBlocks(p_count, pp_blocks);
1633 const SpvReflectDescriptorBinding* GetDescriptorBinding(uint32_t binding_number, uint32_t set_number, SpvReflectResult* p_result =
nullptr)
const;
1634 const SpvReflectDescriptorBinding* GetEntryPointDescriptorBinding(
const char* entry_point, uint32_t binding_number, uint32_t set_number, SpvReflectResult* p_result =
nullptr)
const;
1635 const SpvReflectDescriptorSet* GetDescriptorSet(uint32_t set_number, SpvReflectResult* p_result =
nullptr)
const;
1636 const SpvReflectDescriptorSet* GetEntryPointDescriptorSet(
const char* entry_point, uint32_t set_number, SpvReflectResult* p_result =
nullptr)
const;
1638 SPV_REFLECT_DEPRECATED(
"Renamed to GetInputVariableByLocation")
1640 return GetInputVariableByLocation(location, p_result);
1642 const SpvReflectInterfaceVariable* GetEntryPointInputVariableByLocation(
const char* entry_point, uint32_t location, SpvReflectResult* p_result =
nullptr)
const;
1644 const SpvReflectInterfaceVariable* GetEntryPointInputVariableBySemantic(
const char* entry_point,
const char* semantic, SpvReflectResult* p_result =
nullptr)
const;
1646 SPV_REFLECT_DEPRECATED(
"Renamed to GetOutputVariableByLocation")
1648 return GetOutputVariableByLocation(location, p_result);
1650 const SpvReflectInterfaceVariable* GetEntryPointOutputVariableByLocation(
const char* entry_point, uint32_t location, SpvReflectResult* p_result =
nullptr)
const;
1652 const SpvReflectInterfaceVariable* GetEntryPointOutputVariableBySemantic(
const char* entry_point,
const char* semantic, SpvReflectResult* p_result =
nullptr)
const;
1653 const SpvReflectBlockVariable* GetPushConstantBlock(uint32_t index, SpvReflectResult* p_result =
nullptr)
const;
1654 SPV_REFLECT_DEPRECATED(
"Renamed to GetPushConstantBlock")
1656 return GetPushConstantBlock(index, p_result);
1658 const SpvReflectBlockVariable* GetEntryPointPushConstantBlock(
const char* entry_point, SpvReflectResult* p_result =
nullptr)
const;
1661 uint32_t new_binding_number = SPV_REFLECT_BINDING_NUMBER_DONT_CHANGE,
1662 uint32_t optional_new_set_number = SPV_REFLECT_SET_NUMBER_DONT_CHANGE);
1663 SPV_REFLECT_DEPRECATED(
"Renamed to ChangeDescriptorBindingNumbers")
1664 SpvReflectResult ChangeDescriptorBindingNumber(const
SpvReflectDescriptorBinding* p_binding, uint32_t new_binding_number = SPV_REFLECT_BINDING_NUMBER_DONT_CHANGE,
1665 uint32_t new_set_number = SPV_REFLECT_SET_NUMBER_DONT_CHANGE) {
1666 return ChangeDescriptorBindingNumbers(p_binding, new_binding_number, new_set_number);
1668 SpvReflectResult ChangeDescriptorSetNumber(
const SpvReflectDescriptorSet* p_set, uint32_t new_set_number = SPV_REFLECT_SET_NUMBER_DONT_CHANGE);
1674 ShaderModule(
const ShaderModule&);
1675 ShaderModule& operator=(
const ShaderModule&);
1678 mutable SpvReflectResult m_result = SPV_REFLECT_RESULT_NOT_READY;
1690inline ShaderModule::ShaderModule() {}
1699inline ShaderModule::ShaderModule(
size_t size,
const void* p_code, SpvReflectModuleFlags flags) {
1700 m_result = spvReflectCreateShaderModule2(
1712inline ShaderModule::ShaderModule(
const std::vector<uint8_t>& code, SpvReflectModuleFlags flags) {
1713 m_result = spvReflectCreateShaderModule2(
1725inline ShaderModule::ShaderModule(
const std::vector<uint32_t>& code, SpvReflectModuleFlags flags) {
1726 m_result = spvReflectCreateShaderModule2(
1728 code.size() *
sizeof(uint32_t),
1736inline ShaderModule::~ShaderModule() {
1737 spvReflectDestroyShaderModule(&m_module);
1741inline ShaderModule::ShaderModule(ShaderModule&& other)
1743 *
this = std::move(other);
1746inline ShaderModule& ShaderModule::operator=(ShaderModule&& other)
1748 m_result = std::move(other.m_result);
1749 m_module = std::move(other.m_module);
1751 other.m_module = {};
1760inline SpvReflectResult ShaderModule::GetResult()
const {
1780inline uint32_t ShaderModule::GetCodeSize()
const {
1781 return spvReflectGetCodeSize(&m_module);
1790inline const uint32_t* ShaderModule::GetCode()
const {
1791 return spvReflectGetCode(&m_module);
1800inline const char* ShaderModule::GetEntryPointName()
const {
1801 return this->GetEntryPointName(0);
1809inline const char* ShaderModule::GetSourceFile()
const {
1810 return m_module.source_file;
1818inline uint32_t ShaderModule::GetEntryPointCount()
const {
1819 return m_module.entry_point_count;
1827inline const char* ShaderModule::GetEntryPointName(uint32_t index)
const {
1828 return m_module.entry_points[index].name;
1836inline SpvReflectShaderStageFlagBits ShaderModule::GetEntryPointShaderStage(uint32_t index)
const {
1837 return m_module.entry_points[index].shader_stage;
1845inline SpvReflectShaderStageFlagBits ShaderModule::GetShaderStage()
const {
1846 return m_module.shader_stage;
1857inline SpvReflectResult ShaderModule::EnumerateDescriptorBindings(
1862 m_result = spvReflectEnumerateDescriptorBindings(
1877inline SpvReflectResult ShaderModule::EnumerateEntryPointDescriptorBindings(
1878 const char* entry_point,
1883 m_result = spvReflectEnumerateEntryPointDescriptorBindings(
1899inline SpvReflectResult ShaderModule::EnumerateDescriptorSets(
1904 m_result = spvReflectEnumerateDescriptorSets(
1919inline SpvReflectResult ShaderModule::EnumerateEntryPointDescriptorSets(
1920 const char* entry_point,
1925 m_result = spvReflectEnumerateEntryPointDescriptorSets(
1941inline SpvReflectResult ShaderModule::EnumerateInterfaceVariables(
1946 m_result = spvReflectEnumerateInterfaceVariables(
1961inline SpvReflectResult ShaderModule::EnumerateEntryPointInterfaceVariables(
1962 const char* entry_point,
1967 m_result = spvReflectEnumerateEntryPointInterfaceVariables(
1983inline SpvReflectResult ShaderModule::EnumerateInputVariables(
1988 m_result = spvReflectEnumerateInputVariables(
2003inline SpvReflectResult ShaderModule::EnumerateEntryPointInputVariables(
2004 const char* entry_point,
2009 m_result = spvReflectEnumerateEntryPointInputVariables(
2025inline SpvReflectResult ShaderModule::EnumerateOutputVariables(
2030 m_result = spvReflectEnumerateOutputVariables(
2045inline SpvReflectResult ShaderModule::EnumerateEntryPointOutputVariables(
2046 const char* entry_point,
2051 m_result = spvReflectEnumerateEntryPointOutputVariables(
2067inline SpvReflectResult ShaderModule::EnumeratePushConstantBlocks(
2072 m_result = spvReflectEnumeratePushConstantBlocks(
2084inline SpvReflectResult ShaderModule::EnumerateSpecializationConstants(
2089 m_result = spvReflectEnumerateSpecializationConstants(
2105inline SpvReflectResult ShaderModule::EnumerateEntryPointPushConstantBlocks(
2106 const char* entry_point,
2111 m_result = spvReflectEnumerateEntryPointPushConstantBlocks(
2129 uint32_t binding_number,
2130 uint32_t set_number,
2131 SpvReflectResult* p_result
2134 return spvReflectGetDescriptorBinding(
2151 const char* entry_point,
2152 uint32_t binding_number,
2153 uint32_t set_number,
2154 SpvReflectResult* p_result
2157 return spvReflectGetEntryPointDescriptorBinding(
2174 uint32_t set_number,
2175 SpvReflectResult* p_result
2178 return spvReflectGetDescriptorSet(
2193 const char* entry_point,
2194 uint32_t set_number,
2195 SpvReflectResult* p_result
2198 return spvReflectGetEntryPointDescriptorSet(
2215 SpvReflectResult* p_result
2218 return spvReflectGetInputVariableByLocation(
2224 const char* semantic,
2225 SpvReflectResult* p_result
2228 return spvReflectGetInputVariableBySemantic(
2243 const char* entry_point,
2245 SpvReflectResult* p_result
2248 return spvReflectGetEntryPointInputVariableByLocation(
2255 const char* entry_point,
2256 const char* semantic,
2257 SpvReflectResult* p_result
2260 return spvReflectGetEntryPointInputVariableBySemantic(
2277 SpvReflectResult* p_result
2280 return spvReflectGetOutputVariableByLocation(
2286 const char* semantic,
2287 SpvReflectResult* p_result
2290 return spvReflectGetOutputVariableBySemantic(&m_module,
2304 const char* entry_point,
2306 SpvReflectResult* p_result
2309 return spvReflectGetEntryPointOutputVariableByLocation(
2316 const char* entry_point,
2317 const char* semantic,
2318 SpvReflectResult* p_result
2321 return spvReflectGetEntryPointOutputVariableBySemantic(
2338 SpvReflectResult* p_result
2341 return spvReflectGetPushConstantBlock(
2356 const char* entry_point,
2357 SpvReflectResult* p_result
2360 return spvReflectGetEntryPointPushConstantBlock(
2375inline SpvReflectResult ShaderModule::ChangeDescriptorBindingNumbers(
2377 uint32_t new_binding_number,
2378 uint32_t new_set_number
2381 return spvReflectChangeDescriptorBindingNumbers(
2396inline SpvReflectResult ShaderModule::ChangeDescriptorSetNumber(
2398 uint32_t new_set_number
2401 return spvReflectChangeDescriptorSetNumber(
2415inline SpvReflectResult ShaderModule::ChangeInputVariableLocation(
2417 uint32_t new_location)
2419 return spvReflectChangeInputVariableLocation(
2433inline SpvReflectResult ShaderModule::ChangeOutputVariableLocation(
2435 uint32_t new_location)
2437 return spvReflectChangeOutputVariableLocation(
SpvReflectModuleFlagBits
Definition spirv_reflect.h:98
Definition spirv_reflect.h:370
Definition spirv_reflect.h:382
Definition spirv_reflect.h:455
Definition spirv_reflect.h:565
Definition spirv_reflect.h:482
Definition spirv_reflect.h:515
Definition spirv_reflect.h:553
Definition spirv_reflect.h:528
Definition spirv_reflect.h:357
The OpVariable that is either an Input or Output to the module.
Definition spirv_reflect.h:424
Definition spirv_reflect.h:350
Definition spirv_reflect.h:341
Definition spirv_reflect.h:346
Definition spirv_reflect.h:340
Definition spirv_reflect.h:612
Definition spirv_reflect.h:583
Definition spirv_reflect.h:574
Definition spirv_reflect.h:400
Information about an OpType* instruction.
Definition spirv_reflect.h:390