1 /* 2 * Copyright © Microsoft Corporation 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 * IN THE SOFTWARE. 22 */ 23 24 #ifndef DIXL_ENUMS_H 25 #define DIXL_ENUMS_H 26 27 #include <stdbool.h> 28 29 #include "shader_enums.h" 30 31 enum dxil_signature_kind { 32 DXIL_SIG_INVALID = 0, 33 DXIL_SIG_INPUT, 34 DXIL_SIG_OUTPUT, 35 DXIL_SIG_PATCH_CONST_OR_PRIM 36 }; 37 38 /* These enums are taken from 39 * DirectXShaderCompiler/lib/dxc/DXIL/DxilConstants.h 40 */ 41 enum dxil_semantic_kind { 42 DXIL_SEM_ARBITRARY, 43 DXIL_SEM_VERTEX_ID, 44 DXIL_SEM_INSTANCE_ID, 45 DXIL_SEM_POSITION, 46 DXIL_SEM_RENDERTARGET_ARRAY_INDEX, 47 DXIL_SEM_VIEWPORT_ARRAY_INDEX, 48 DXIL_SEM_CLIP_DISTANCE, 49 DXIL_SEM_CULL_DISTANCE, 50 DXIL_SEM_OUTPUT_CONTROL_POINT_ID, 51 DXIL_SEM_DOMAIN_LOCATION, 52 DXIL_SEM_PRIMITIVE_ID, 53 DXIL_SEM_GS_INSTANCE_ID, 54 DXIL_SEM_SAMPLE_INDEX, 55 DXIL_SEM_IS_FRONT_FACE, 56 DXIL_SEM_COVERAGE, 57 DXIL_SEM_INNER_COVERAGE, 58 DXIL_SEM_TARGET, 59 DXIL_SEM_DEPTH, 60 DXIL_SEM_DEPTH_LE, 61 DXIL_SEM_DEPTH_GE, 62 DXIL_SEM_STENCIL_REF, 63 DXIL_SEM_DISPATCH_THREAD_ID, 64 DXIL_SEM_GROUP_ID, 65 DXIL_SEM_GROUP_INDEX, 66 DXIL_SEM_GROUP_THREAD_ID, 67 DXIL_SEM_TESS_FACTOR, 68 DXIL_SEM_INSIDE_TESS_FACTOR, 69 DXIL_SEM_VIEW_ID, 70 DXIL_SEM_BARYCENTRICS, 71 DXIL_SEM_SHADING_RATE, 72 DXIL_SEM_CULL_PRIMITIVE, 73 DXIL_SEM_INVALID 74 }; 75 76 enum dxil_prog_sig_semantic { 77 DXIL_PROG_SEM_UNDEFINED = 0, 78 DXIL_PROG_SEM_POSITION = 1, 79 DXIL_PROG_SEM_CLIP_DISTANCE = 2, 80 DXIL_PROG_SEM_CULL_DISTANCE = 3, 81 DXIL_PROG_SEM_RENDERTARGET_ARRAY_INDEX = 4, 82 DXIL_PROG_SEM_VIEWPORT_ARRAY_INDEX = 5, 83 DXIL_PROG_SEM_VERTEX_ID = 6, 84 DXIL_PROG_SEM_PRIMITIVE_ID = 7, 85 DXIL_PROG_SEM_INSTANCE_ID = 8, 86 DXIL_PROG_SEM_IS_FRONTFACE = 9, 87 DXIL_PROG_SEM_SAMPLE_INDEX = 10, 88 DXIL_PROG_SEM_FINAL_QUAD_EDGE_TESSFACTOR = 11, 89 DXIL_PROG_SEM_FINAL_QUAD_INSIDE_EDGE_TESSFACTOR = 12, 90 DXIL_PROG_SEM_FINAL_TRI_EDGE_TESSFACTOR = 13, 91 DXIL_PROG_SEM_FINAL_TRI_INSIDE_EDGE_TESSFACTOR = 14, 92 DXIL_PROG_SEM_FINAL_LINE_DETAIL_TESSFACTOR = 15, 93 DXIL_PROG_SEM_FINAL_LINE_DENSITY_TESSFACTOR = 16, 94 DXIL_PROG_SEM_BARYCENTRICS = 23, 95 DXIL_PROG_SEM_SHADING_RATE = 24, 96 DXIL_PROG_SEM_CULL_PRIMITIVE = 25, 97 DXIL_PROG_SEM_TARGET = 64, 98 DXIL_PROG_SEM_DEPTH = 65, 99 DXIL_PROG_SEM_COVERAGE = 66, 100 DXIL_PROG_SEM_DEPTH_GE = 67, 101 DXIL_PROG_SEM_DEPTH_LE = 68, 102 DXIL_PROG_SEM_STENCIL_REF = 69, 103 DXIL_PROG_SEM_INNER_COVERAGE = 70 104 }; 105 106 enum dxil_prog_sig_comp_type { 107 DXIL_PROG_SIG_COMP_TYPE_UNKNOWN = 0, 108 DXIL_PROG_SIG_COMP_TYPE_UINT32 = 1, 109 DXIL_PROG_SIG_COMP_TYPE_SINT32 = 2, 110 DXIL_PROG_SIG_COMP_TYPE_FLOAT32 = 3, 111 DXIL_PROG_SIG_COMP_TYPE_UINT16 = 4, 112 DXIL_PROG_SIG_COMP_TYPE_SINT16 = 5, 113 DXIL_PROG_SIG_COMP_TYPE_FLOAT16 = 6, 114 DXIL_PROG_SIG_COMP_TYPE_UINT64 = 7, 115 DXIL_PROG_SIG_COMP_TYPE_SINT64 = 8, 116 DXIL_PROG_SIG_COMP_TYPE_FLOAT64 = 9, 117 DXIL_PROG_SIG_COMP_TYPE_COUNT 118 }; 119 120 121 enum dxil_sig_point_kind { 122 DXIL_SIG_POINT_VSIN, // Ordinary Vertex Shader input from Input Assembler 123 DXIL_SIG_POINT_VSOUT, // Ordinary Vertex Shader output that may feed Rasterizer 124 DXIL_SIG_POINT_PCIN, // Patch Constant function non-patch inputs 125 DXIL_SIG_POINT_HSIN, // Hull Shader function non-patch inputs 126 DXIL_SIG_POINT_HSCPIN, // Hull Shader patch inputs - Control Points 127 DXIL_SIG_POINT_HSCPOut, // Hull Shader function output - Control Point 128 DXIL_SIG_POINT_PCOUT, // Patch Constant function output - Patch Constant data passed to Domain Shader 129 DXIL_SIG_POINT_DSIN, // Domain Shader regular input - Patch Constant data plus system values 130 DXIL_SIG_POINT_DSCPIN, // Domain Shader patch input - Control Points 131 DXIL_SIG_POINT_DSOUT, // Domain Shader output - vertex data that may feed Rasterizer 132 DXIL_SIG_POINT_GSVIN, // Geometry Shader vertex input - qualified with primitive type 133 DXIL_SIG_POINT_GSIN, // Geometry Shader non-vertex inputs (system values) 134 DXIL_SIG_POINT_GSOUT, // Geometry Shader output - vertex data that may feed Rasterizer 135 DXIL_SIG_POINT_PSIN, // Pixel Shader input 136 DXIL_SIG_POINT_PSOUT, // Pixel Shader output 137 DXIL_SIG_POINT_CSIN, // Compute Shader input 138 DXIL_SIG_POINT_MSIN, // Mesh Shader input 139 DXIL_SIG_POINT_MSOUT, // Mesh Shader vertices output 140 DXIL_SIG_POINT_MSPOUT, // Mesh Shader primitives output 141 DXIL_SIG_POINT_ASIN, // Amplification Shader input 142 DXIL_SIG_POINT_INVALID 143 }; 144 145 enum dxil_min_precision { 146 DXIL_MIN_PREC_DEFAULT = 0, 147 DXIL_MIN_PREC_FLOAT16 = 1, 148 DXIL_MIN_PREC_FLOAT2_8 = 2, 149 DXIL_MIN_PREC_RESERVED = 3, 150 DXIL_MIN_PREC_SINT16 = 4, 151 DXIL_MIN_PREC_UINT16 = 5, 152 DXIL_MIN_PREC_ANY16 = 0xf0, 153 DXIL_MIN_PREC_ANY10 = 0xf1 154 }; 155 156 enum dxil_semantic_interpret_kind { 157 DXIL_SEM_INTERP_NA, // Not Available 158 DXIL_SEM_INTERP_SV, // Normal System Value 159 DXIL_SEM_INTERP_SGV, // System Generated Value (sorted last) 160 DXIL_SEM_INTERP_ARB, // Treated as Arbitrary 161 DXIL_SEM_INTERP_NOT_IN_SIG, // Not included in signature (intrinsic access) 162 DXIL_SEM_INTERP_NOT_PACKED, // Included in signature, but does not contribute to packing 163 DXIL_SEM_INTERP_TARGET, // Special handling for SV_Target 164 DXIL_SEM_INTERP_TESSFACTOR, // Special handling for tessellation factors 165 DXIL_SEM_INTERP_SHADOW, // Shadow element must be added to a signature for compatibility 166 DXIL_SEM_INTERP_CLIPCULL, // Special packing rules for SV_ClipDistance or SV_CullDistance 167 DXIL_SEM_INTERP_INVALID 168 }; 169 170 enum dxil_component_type { 171 DXIL_COMP_TYPE_INVALID = 0, 172 DXIL_COMP_TYPE_I1 = 1, 173 DXIL_COMP_TYPE_I16 = 2, 174 DXIL_COMP_TYPE_U16 = 3, 175 DXIL_COMP_TYPE_I32 = 4, 176 DXIL_COMP_TYPE_U32 = 5, 177 DXIL_COMP_TYPE_I64 = 6, 178 DXIL_COMP_TYPE_U64 = 7, 179 DXIL_COMP_TYPE_F16 = 8, 180 DXIL_COMP_TYPE_F32 = 9, 181 DXIL_COMP_TYPE_F64 = 10, 182 DXIL_COMP_TYPE_SNORMF16 = 11, 183 DXIL_COMP_TYPE_UNORMF16 = 12, 184 DXIL_COMP_TYPE_SNORMF32 = 13, 185 DXIL_COMP_TYPE_UNORMF32 = 14, 186 DXIL_COMP_TYPE_SNORMF64 = 15, 187 DXIL_COMP_TYPE_UNORMF64 = 16 188 }; 189 190 enum dxil_interpolation_mode { 191 DXIL_INTERP_UNDEFINED = 0, 192 DXIL_INTERP_CONSTANT = 1, 193 DXIL_INTERP_LINEAR = 2, 194 DXIL_INTERP_LINEAR_CENTROID = 3, 195 DXIL_INTERP_LINEAR_NOPERSPECTIVE = 4, 196 DXIL_INTERP_LINEAR_NOPERSPECTIVE_CENTROID = 5, 197 DXIL_INTERP_LINEAR_SAMPLE = 6, 198 DXIL_INTERP_LINEAR_NOPERSPECTIVE_SAMPLE = 7, 199 DXIL_INTERP_INVALID = 8 200 }; 201 202 enum overload_type { 203 DXIL_NONE, 204 DXIL_I1, 205 DXIL_I16, 206 DXIL_I32, 207 DXIL_I64, 208 DXIL_F16, 209 DXIL_F32, 210 DXIL_F64, 211 DXIL_NUM_OVERLOADS 212 }; 213 214 enum dxil_resource_class { 215 DXIL_RESOURCE_CLASS_SRV = 0, 216 DXIL_RESOURCE_CLASS_UAV = 1, 217 DXIL_RESOURCE_CLASS_CBV = 2, 218 DXIL_RESOURCE_CLASS_SAMPLER = 3 219 }; 220 221 enum dxil_resource_kind { 222 DXIL_RESOURCE_KIND_INVALID = 0, 223 DXIL_RESOURCE_KIND_TEXTURE1D = 1, 224 DXIL_RESOURCE_KIND_TEXTURE2D = 2, 225 DXIL_RESOURCE_KIND_TEXTURE2DMS = 3, 226 DXIL_RESOURCE_KIND_TEXTURE3D = 4, 227 DXIL_RESOURCE_KIND_TEXTURECUBE = 5, 228 DXIL_RESOURCE_KIND_TEXTURE1D_ARRAY = 6, 229 DXIL_RESOURCE_KIND_TEXTURE2D_ARRAY = 7, 230 DXIL_RESOURCE_KIND_TEXTURE2DMS_ARRAY = 8, 231 DXIL_RESOURCE_KIND_TEXTURECUBE_ARRAY = 9, 232 DXIL_RESOURCE_KIND_TYPED_BUFFER = 10, 233 DXIL_RESOURCE_KIND_RAW_BUFFER = 11, 234 DXIL_RESOURCE_KIND_STRUCTURED_BUFFER = 12, 235 DXIL_RESOURCE_KIND_CBUFFER = 13, 236 DXIL_RESOURCE_KIND_SAMPLER = 14, 237 DXIL_RESOURCE_KIND_TBUFFER = 15, 238 }; 239 240 enum dxil_sampler_kind { 241 DXIL_SAMPLER_KIND_DEFAULT = 0, 242 DXIL_SAMPLER_KIND_COMPARISON = 1, 243 DXIL_SAMPLER_KIND_MONO = 2, 244 DXIL_SAMPLER_KIND_INVALID = 3, 245 }; 246 247 enum dxil_attr_kind { 248 DXIL_ATTR_KIND_NONE = 0, 249 DXIL_ATTR_KIND_NO_DUPLICATE = 12, 250 DXIL_ATTR_KIND_NO_UNWIND = 18, 251 DXIL_ATTR_KIND_READ_NONE = 20, 252 DXIL_ATTR_KIND_READ_ONLY = 21, 253 }; 254 255 enum dxil_input_primitive { 256 DXIL_INPUT_PRIMITIVE_UNDEFINED = 0, 257 DXIL_INPUT_PRIMITIVE_POINT = 1, 258 DXIL_INPUT_PRIMITIVE_LINE = 2, 259 DXIL_INPUT_PRIMITIVE_TRIANGLE = 3, 260 DXIL_INPUT_PRIMITIVE_LINES_ADJENCY = 6, 261 DXIL_INPUT_PRIMITIVE_TRIANGLES_ADJENCY = 7, 262 }; 263 264 enum dxil_primitive_topology { 265 DXIL_PRIMITIVE_TOPOLOGY_UNDEFINED = 0, 266 DXIL_PRIMITIVE_TOPOLOGY_POINT_LIST = 1, 267 DXIL_PRIMITIVE_TOPOLOGY_LINE_LIST = 2, 268 DXIL_PRIMITIVE_TOPOLOGY_LINE_STRIP = 3, 269 DXIL_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 4, 270 DXIL_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 5, 271 }; 272 273 enum dxil_shader_tag { 274 DXIL_SHADER_TAG_FLAGS = 0, 275 DXIL_SHADER_TAG_GS_STATE = 1, 276 DXIL_SHADER_TAG_DS_STATE = 2, 277 DXIL_SHADER_TAG_HS_STATE = 3, 278 DXIL_SHADER_TAG_NUM_THREADS = 4, 279 DXIL_SHADER_TAG_WAVE_SIZE = 11, 280 DXIL_SHADER_TAG_WAVE_SIZE_RANGE = 23, 281 }; 282 283 enum dxil_barrier_mode { 284 DXIL_BARRIER_MODE_SYNC_THREAD_GROUP = 1, 285 DXIL_BARRIER_MODE_UAV_FENCE_GLOBAL = 2, 286 DXIL_BARRIER_MODE_UAV_FENCE_THREAD_GROUP = 4, 287 DXIL_BARRIER_MODE_GROUPSHARED_MEM_FENCE = 8, 288 }; 289 290 enum dxil_address_space { 291 DXIL_AS_DEFAULT = 0, 292 DXIL_AS_DEVMEM = 1, 293 DXIL_AS_CBUF = 2, 294 DXIL_AS_GROUPSHARED = 3, 295 }; 296 297 enum dxil_rmw_op { 298 DXIL_RMWOP_XCHG = 0, 299 DXIL_RMWOP_ADD = 1, 300 DXIL_RMWOP_SUB = 2, 301 DXIL_RMWOP_AND = 3, 302 DXIL_RMWOP_NAND = 4, 303 DXIL_RMWOP_OR = 5, 304 DXIL_RMWOP_XOR = 6, 305 DXIL_RMWOP_MAX = 7, 306 DXIL_RMWOP_MIN = 8, 307 DXIL_RMWOP_UMAX = 9, 308 DXIL_RMWOP_UMIN = 10, 309 }; 310 311 enum dxil_atomic_ordering { 312 DXIL_ATOMIC_ORDERING_NOTATOMIC = 0, 313 DXIL_ATOMIC_ORDERING_UNORDERED = 1, 314 DXIL_ATOMIC_ORDERING_MONOTONIC = 2, 315 DXIL_ATOMIC_ORDERING_ACQUIRE = 3, 316 DXIL_ATOMIC_ORDERING_RELEASE = 4, 317 DXIL_ATOMIC_ORDERING_ACQREL = 5, 318 DXIL_ATOMIC_ORDERING_SEQCST = 6, 319 }; 320 321 enum dxil_sync_scope { 322 DXIL_SYNC_SCOPE_SINGLETHREAD = 0, 323 DXIL_SYNC_SCOPE_CROSSTHREAD = 1, 324 }; 325 326 enum dxil_tessellator_domain { 327 DXIL_TESSELLATOR_DOMAIN_UNDEFINED = 0, 328 DXIL_TESSELLATOR_DOMAIN_ISOLINE = 1, 329 DXIL_TESSELLATOR_DOMAIN_TRI = 2, 330 DXIL_TESSELLATOR_DOMAIN_QUAD = 3, 331 }; 332 333 enum dxil_tessellator_output_primitive { 334 DXIL_TESSELLATOR_OUTPUT_PRIMITIVE_UNDEFINED = 0, 335 DXIL_TESSELLATOR_OUTPUT_PRIMITIVE_POINT = 1, 336 DXIL_TESSELLATOR_OUTPUT_PRIMITIVE_LINE = 2, 337 DXIL_TESSELLATOR_OUTPUT_PRIMITIVE_TRIANGLE_CW = 3, 338 DXIL_TESSELLATOR_OUTPUT_PRIMITIVE_TRIANGLE_CCW = 4, 339 }; 340 341 enum dxil_tessellator_partitioning { 342 DXIL_TESSELLATOR_PARTITIONING_UNDEFINED = 0, 343 DXIL_TESSELLATOR_PARTITIONING_INTEGER = 1, 344 DXIL_TESSELLATOR_PARTITIONING_POW2 = 2, 345 DXIL_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD = 3, 346 DXIL_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN = 4, 347 }; 348 349 enum dxil_signature_element_extended_properties { 350 DXIL_SIGNATURE_ELEMENT_OUTPUT_STREAM = 0, 351 DXIL_SIGNATURE_ELEMENT_GLOBAL_SYMBOL = 1, 352 DXIL_SIGNATURE_ELEMENT_DYNAMIC_INDEX_COMPONENT_MASK = 2, 353 DXIL_SIGNATURE_ELEMENT_USAGE_COMPONENT_MASK = 3, 354 }; 355 356 enum dxil_quad_op_kind { 357 QUAD_READ_ACROSS_X = 0, 358 QUAD_READ_ACROSS_Y = 1, 359 QUAD_READ_ACROSS_DIAGONAL = 2, 360 }; 361 362 enum dxil_wave_op_kind { 363 DXIL_WAVE_OP_SUM = 0, 364 DXIL_WAVE_OP_PRODUCT = 1, 365 DXIL_WAVE_OP_MIN = 2, 366 DXIL_WAVE_OP_MAX = 3, 367 }; 368 369 enum dxil_wave_bit_op_kind { 370 DXIL_WAVE_BIT_OP_AND = 0, 371 DXIL_WAVE_BIT_OP_OR = 1, 372 DXIL_WAVE_BIT_OP_XOR = 2, 373 }; 374 375 #ifdef __cplusplus 376 extern "C" { 377 #endif 378 379 struct glsl_type; 380 enum glsl_sampler_dim; 381 382 enum dxil_component_type dxil_get_comp_type(const struct glsl_type *type); 383 384 enum dxil_prog_sig_comp_type dxil_get_prog_sig_comp_type(const struct glsl_type *type); 385 enum dxil_component_type dxil_get_comp_type_from_prog_sig_type(enum dxil_prog_sig_comp_type type); 386 387 enum dxil_resource_kind dxil_sampler_dim_to_resource_kind(enum glsl_sampler_dim dim, bool is_array); 388 enum dxil_resource_kind dxil_get_resource_kind(const struct glsl_type *type); 389 390 enum dxil_primitive_topology dxil_get_primitive_topology(enum mesa_prim topology); 391 392 enum dxil_input_primitive dxil_get_input_primitive(enum mesa_prim primitive); 393 394 const char *dxil_overload_suffix( enum overload_type overload); 395 396 #ifdef __cplusplus 397 } 398 #endif 399 400 401 #endif // DXIL_ENUMS_H 402