1 // 2 //Copyright (C) 2014-2015 LunarG, Inc. 3 // 4 //All rights reserved. 5 // 6 //Redistribution and use in source and binary forms, with or without 7 //modification, are permitted provided that the following conditions 8 //are met: 9 // 10 // Redistributions of source code must retain the above copyright 11 // notice, this list of conditions and the following disclaimer. 12 // 13 // Redistributions in binary form must reproduce the above 14 // copyright notice, this list of conditions and the following 15 // disclaimer in the documentation and/or other materials provided 16 // with the distribution. 17 // 18 // Neither the name of 3Dlabs Inc. Ltd. nor the names of its 19 // contributors may be used to endorse or promote products derived 20 // from this software without specific prior written permission. 21 // 22 //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23 //"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24 //LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 25 //FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 26 //COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 27 //INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 28 //BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 29 //LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 30 //CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 //LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 32 //ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 33 //POSSIBILITY OF SUCH DAMAGE. 34 35 // 36 // 1) Programatically fill in instruction/operand information. 37 // This can be used for disassembly, printing documentation, etc. 38 // 39 // 2) Print documentation from this parameterization. 40 // 41 42 #include "doc.h" 43 44 #include <stdio.h> 45 #include <string.h> 46 #include <algorithm> 47 48 namespace spv { 49 50 // 51 // Whole set of functions that translate enumerants to their text strings for 52 // the specification (or their sanitized versions for auto-generating the 53 // spirv headers. 54 // 55 // Also, the ceilings are declared next to these, to help keep them in sync. 56 // Ceilings should be 57 // - one more than the maximum value an enumerant takes on, for non-mask enumerants 58 // (for non-sparse enums, this is the number of enumurants) 59 // - the number of bits consumed by the set of masks 60 // (for non-sparse mask enums, this is the number of enumurants) 61 // 62 63 const int SourceLanguageCeiling = 6; // HLSL todo: need official enumerant 64 65 const char* SourceString(int source) 66 { 67 switch (source) { 68 case 0: return "Unknown"; 69 case 1: return "ESSL"; 70 case 2: return "GLSL"; 71 case 3: return "OpenCL_C"; 72 case 4: return "OpenCL_CPP"; 73 case 5: return "HLSL"; 74 75 case SourceLanguageCeiling: 76 default: return "Bad"; 77 } 78 } 79 80 const int ExecutionModelCeiling = 7; 81 82 const char* ExecutionModelString(int model) 83 { 84 switch (model) { 85 case 0: return "Vertex"; 86 case 1: return "TessellationControl"; 87 case 2: return "TessellationEvaluation"; 88 case 3: return "Geometry"; 89 case 4: return "Fragment"; 90 case 5: return "GLCompute"; 91 case 6: return "Kernel"; 92 93 case ExecutionModelCeiling: 94 default: return "Bad"; 95 } 96 } 97 98 const int AddressingModelCeiling = 3; 99 100 const char* AddressingString(int addr) 101 { 102 switch (addr) { 103 case 0: return "Logical"; 104 case 1: return "Physical32"; 105 case 2: return "Physical64"; 106 107 case AddressingModelCeiling: 108 default: return "Bad"; 109 } 110 } 111 112 const int MemoryModelCeiling = 3; 113 114 const char* MemoryString(int mem) 115 { 116 switch (mem) { 117 case 0: return "Simple"; 118 case 1: return "GLSL450"; 119 case 2: return "OpenCL"; 120 121 case MemoryModelCeiling: 122 default: return "Bad"; 123 } 124 } 125 126 const int ExecutionModeCeiling = 33; 127 128 const char* ExecutionModeString(int mode) 129 { 130 switch (mode) { 131 case 0: return "Invocations"; 132 case 1: return "SpacingEqual"; 133 case 2: return "SpacingFractionalEven"; 134 case 3: return "SpacingFractionalOdd"; 135 case 4: return "VertexOrderCw"; 136 case 5: return "VertexOrderCcw"; 137 case 6: return "PixelCenterInteger"; 138 case 7: return "OriginUpperLeft"; 139 case 8: return "OriginLowerLeft"; 140 case 9: return "EarlyFragmentTests"; 141 case 10: return "PointMode"; 142 case 11: return "Xfb"; 143 case 12: return "DepthReplacing"; 144 case 13: return "Bad"; 145 case 14: return "DepthGreater"; 146 case 15: return "DepthLess"; 147 case 16: return "DepthUnchanged"; 148 case 17: return "LocalSize"; 149 case 18: return "LocalSizeHint"; 150 case 19: return "InputPoints"; 151 case 20: return "InputLines"; 152 case 21: return "InputLinesAdjacency"; 153 case 22: return "Triangles"; 154 case 23: return "InputTrianglesAdjacency"; 155 case 24: return "Quads"; 156 case 25: return "Isolines"; 157 case 26: return "OutputVertices"; 158 case 27: return "OutputPoints"; 159 case 28: return "OutputLineStrip"; 160 case 29: return "OutputTriangleStrip"; 161 case 30: return "VecTypeHint"; 162 case 31: return "ContractionOff"; 163 case 32: return "Bad"; 164 165 case ExecutionModeCeiling: 166 default: return "Bad"; 167 } 168 } 169 170 const int StorageClassCeiling = 12; 171 172 const char* StorageClassString(int StorageClass) 173 { 174 switch (StorageClass) { 175 case 0: return "UniformConstant"; 176 case 1: return "Input"; 177 case 2: return "Uniform"; 178 case 3: return "Output"; 179 case 4: return "Workgroup"; 180 case 5: return "CrossWorkgroup"; 181 case 6: return "Private"; 182 case 7: return "Function"; 183 case 8: return "Generic"; 184 case 9: return "PushConstant"; 185 case 10: return "AtomicCounter"; 186 case 11: return "Image"; 187 188 case StorageClassCeiling: 189 default: return "Bad"; 190 } 191 } 192 193 const int DecorationCeiling = 45; 194 195 const char* DecorationString(int decoration) 196 { 197 switch (decoration) { 198 case 0: return "RelaxedPrecision"; 199 case 1: return "SpecId"; 200 case 2: return "Block"; 201 case 3: return "BufferBlock"; 202 case 4: return "RowMajor"; 203 case 5: return "ColMajor"; 204 case 6: return "ArrayStride"; 205 case 7: return "MatrixStride"; 206 case 8: return "GLSLShared"; 207 case 9: return "GLSLPacked"; 208 case 10: return "CPacked"; 209 case 11: return "BuiltIn"; 210 case 12: return "Bad"; 211 case 13: return "NoPerspective"; 212 case 14: return "Flat"; 213 case 15: return "Patch"; 214 case 16: return "Centroid"; 215 case 17: return "Sample"; 216 case 18: return "Invariant"; 217 case 19: return "Restrict"; 218 case 20: return "Aliased"; 219 case 21: return "Volatile"; 220 case 22: return "Constant"; 221 case 23: return "Coherent"; 222 case 24: return "NonWritable"; 223 case 25: return "NonReadable"; 224 case 26: return "Uniform"; 225 case 27: return "Bad"; 226 case 28: return "SaturatedConversion"; 227 case 29: return "Stream"; 228 case 30: return "Location"; 229 case 31: return "Component"; 230 case 32: return "Index"; 231 case 33: return "Binding"; 232 case 34: return "DescriptorSet"; 233 case 35: return "Offset"; 234 case 36: return "XfbBuffer"; 235 case 37: return "XfbStride"; 236 case 38: return "FuncParamAttr"; 237 case 39: return "FP Rounding Mode"; 238 case 40: return "FP Fast Math Mode"; 239 case 41: return "Linkage Attributes"; 240 case 42: return "NoContraction"; 241 case 43: return "InputAttachmentIndex"; 242 case 44: return "Alignment"; 243 244 case DecorationCeiling: 245 default: return "Bad"; 246 } 247 } 248 249 const int BuiltInCeiling = 44; 250 251 const char* BuiltInString(int builtIn) 252 { 253 switch (builtIn) { 254 case 0: return "Position"; 255 case 1: return "PointSize"; 256 case 2: return "Bad"; 257 case 3: return "ClipDistance"; 258 case 4: return "CullDistance"; 259 case 5: return "VertexId"; 260 case 6: return "InstanceId"; 261 case 7: return "PrimitiveId"; 262 case 8: return "InvocationId"; 263 case 9: return "Layer"; 264 case 10: return "ViewportIndex"; 265 case 11: return "TessLevelOuter"; 266 case 12: return "TessLevelInner"; 267 case 13: return "TessCoord"; 268 case 14: return "PatchVertices"; 269 case 15: return "FragCoord"; 270 case 16: return "PointCoord"; 271 case 17: return "FrontFacing"; 272 case 18: return "SampleId"; 273 case 19: return "SamplePosition"; 274 case 20: return "SampleMask"; 275 case 21: return "Bad"; 276 case 22: return "FragDepth"; 277 case 23: return "HelperInvocation"; 278 case 24: return "NumWorkgroups"; 279 case 25: return "WorkgroupSize"; 280 case 26: return "WorkgroupId"; 281 case 27: return "LocalInvocationId"; 282 case 28: return "GlobalInvocationId"; 283 case 29: return "LocalInvocationIndex"; 284 case 30: return "WorkDim"; 285 case 31: return "GlobalSize"; 286 case 32: return "EnqueuedWorkgroupSize"; 287 case 33: return "GlobalOffset"; 288 case 34: return "GlobalLinearId"; 289 case 35: return "Bad"; 290 case 36: return "SubgroupSize"; 291 case 37: return "SubgroupMaxSize"; 292 case 38: return "NumSubgroups"; 293 case 39: return "NumEnqueuedSubgroups"; 294 case 40: return "SubgroupId"; 295 case 41: return "SubgroupLocalInvocationId"; 296 case 42: return "VertexIndex"; // TBD: put next to VertexId? 297 case 43: return "InstanceIndex"; // TBD: put next to InstanceId? 298 299 case BuiltInCeiling: 300 default: return "Bad"; 301 } 302 } 303 304 const int DimensionCeiling = 7; 305 306 const char* DimensionString(int dim) 307 { 308 switch (dim) { 309 case 0: return "1D"; 310 case 1: return "2D"; 311 case 2: return "3D"; 312 case 3: return "Cube"; 313 case 4: return "Rect"; 314 case 5: return "Buffer"; 315 case 6: return "SubpassData"; 316 317 case DimensionCeiling: 318 default: return "Bad"; 319 } 320 } 321 322 const int SamplerAddressingModeCeiling = 5; 323 324 const char* SamplerAddressingModeString(int mode) 325 { 326 switch (mode) { 327 case 0: return "None"; 328 case 1: return "ClampToEdge"; 329 case 2: return "Clamp"; 330 case 3: return "Repeat"; 331 case 4: return "RepeatMirrored"; 332 333 case SamplerAddressingModeCeiling: 334 default: return "Bad"; 335 } 336 } 337 338 const int SamplerFilterModeCeiling = 2; 339 340 const char* SamplerFilterModeString(int mode) 341 { 342 switch (mode) { 343 case 0: return "Nearest"; 344 case 1: return "Linear"; 345 346 case SamplerFilterModeCeiling: 347 default: return "Bad"; 348 } 349 } 350 351 const int ImageFormatCeiling = 40; 352 353 const char* ImageFormatString(int format) 354 { 355 switch (format) { 356 case 0: return "Unknown"; 357 358 // ES/Desktop float 359 case 1: return "Rgba32f"; 360 case 2: return "Rgba16f"; 361 case 3: return "R32f"; 362 case 4: return "Rgba8"; 363 case 5: return "Rgba8Snorm"; 364 365 // Desktop float 366 case 6: return "Rg32f"; 367 case 7: return "Rg16f"; 368 case 8: return "R11fG11fB10f"; 369 case 9: return "R16f"; 370 case 10: return "Rgba16"; 371 case 11: return "Rgb10A2"; 372 case 12: return "Rg16"; 373 case 13: return "Rg8"; 374 case 14: return "R16"; 375 case 15: return "R8"; 376 case 16: return "Rgba16Snorm"; 377 case 17: return "Rg16Snorm"; 378 case 18: return "Rg8Snorm"; 379 case 19: return "R16Snorm"; 380 case 20: return "R8Snorm"; 381 382 // ES/Desktop int 383 case 21: return "Rgba32i"; 384 case 22: return "Rgba16i"; 385 case 23: return "Rgba8i"; 386 case 24: return "R32i"; 387 388 // Desktop int 389 case 25: return "Rg32i"; 390 case 26: return "Rg16i"; 391 case 27: return "Rg8i"; 392 case 28: return "R16i"; 393 case 29: return "R8i"; 394 395 // ES/Desktop uint 396 case 30: return "Rgba32ui"; 397 case 31: return "Rgba16ui"; 398 case 32: return "Rgba8ui"; 399 case 33: return "R32ui"; 400 401 // Desktop uint 402 case 34: return "Rgb10a2ui"; 403 case 35: return "Rg32ui"; 404 case 36: return "Rg16ui"; 405 case 37: return "Rg8ui"; 406 case 38: return "R16ui"; 407 case 39: return "R8ui"; 408 409 case ImageFormatCeiling: 410 default: 411 return "Bad"; 412 } 413 } 414 415 const int ImageChannelOrderCeiling = 19; 416 417 const char* ImageChannelOrderString(int format) 418 { 419 switch (format) { 420 case 0: return "R"; 421 case 1: return "A"; 422 case 2: return "RG"; 423 case 3: return "RA"; 424 case 4: return "RGB"; 425 case 5: return "RGBA"; 426 case 6: return "BGRA"; 427 case 7: return "ARGB"; 428 case 8: return "Intensity"; 429 case 9: return "Luminance"; 430 case 10: return "Rx"; 431 case 11: return "RGx"; 432 case 12: return "RGBx"; 433 case 13: return "Depth"; 434 case 14: return "DepthStencil"; 435 case 15: return "sRGB"; 436 case 16: return "sRGBx"; 437 case 17: return "sRGBA"; 438 case 18: return "sBGRA"; 439 440 case ImageChannelOrderCeiling: 441 default: 442 return "Bad"; 443 } 444 } 445 446 const int ImageChannelDataTypeCeiling = 17; 447 448 const char* ImageChannelDataTypeString(int type) 449 { 450 switch (type) 451 { 452 case 0: return "SnormInt8"; 453 case 1: return "SnormInt16"; 454 case 2: return "UnormInt8"; 455 case 3: return "UnormInt16"; 456 case 4: return "UnormShort565"; 457 case 5: return "UnormShort555"; 458 case 6: return "UnormInt101010"; 459 case 7: return "SignedInt8"; 460 case 8: return "SignedInt16"; 461 case 9: return "SignedInt32"; 462 case 10: return "UnsignedInt8"; 463 case 11: return "UnsignedInt16"; 464 case 12: return "UnsignedInt32"; 465 case 13: return "HalfFloat"; 466 case 14: return "Float"; 467 case 15: return "UnormInt24"; 468 case 16: return "UnormInt101010_2"; 469 470 case ImageChannelDataTypeCeiling: 471 default: 472 return "Bad"; 473 } 474 } 475 476 const int ImageOperandsCeiling = 8; 477 478 const char* ImageOperandsString(int format) 479 { 480 switch (format) { 481 case 0: return "Bias"; 482 case 1: return "Lod"; 483 case 2: return "Grad"; 484 case 3: return "ConstOffset"; 485 case 4: return "Offset"; 486 case 5: return "ConstOffsets"; 487 case 6: return "Sample"; 488 case 7: return "MinLod"; 489 490 case ImageOperandsCeiling: 491 default: 492 return "Bad"; 493 } 494 } 495 496 const int FPFastMathCeiling = 5; 497 498 const char* FPFastMathString(int mode) 499 { 500 switch (mode) { 501 case 0: return "NotNaN"; 502 case 1: return "NotInf"; 503 case 2: return "NSZ"; 504 case 3: return "AllowRecip"; 505 case 4: return "Fast"; 506 507 case FPFastMathCeiling: 508 default: return "Bad"; 509 } 510 } 511 512 const int FPRoundingModeCeiling = 4; 513 514 const char* FPRoundingModeString(int mode) 515 { 516 switch (mode) { 517 case 0: return "RTE"; 518 case 1: return "RTZ"; 519 case 2: return "RTP"; 520 case 3: return "RTN"; 521 522 case FPRoundingModeCeiling: 523 default: return "Bad"; 524 } 525 } 526 527 const int LinkageTypeCeiling = 2; 528 529 const char* LinkageTypeString(int type) 530 { 531 switch (type) { 532 case 0: return "Export"; 533 case 1: return "Import"; 534 535 case LinkageTypeCeiling: 536 default: return "Bad"; 537 } 538 } 539 540 const int FuncParamAttrCeiling = 8; 541 542 const char* FuncParamAttrString(int attr) 543 { 544 switch (attr) { 545 case 0: return "Zext"; 546 case 1: return "Sext"; 547 case 2: return "ByVal"; 548 case 3: return "Sret"; 549 case 4: return "NoAlias"; 550 case 5: return "NoCapture"; 551 case 6: return "NoWrite"; 552 case 7: return "NoReadWrite"; 553 554 case FuncParamAttrCeiling: 555 default: return "Bad"; 556 } 557 } 558 559 const int AccessQualifierCeiling = 3; 560 561 const char* AccessQualifierString(int attr) 562 { 563 switch (attr) { 564 case 0: return "ReadOnly"; 565 case 1: return "WriteOnly"; 566 case 2: return "ReadWrite"; 567 568 case AccessQualifierCeiling: 569 default: return "Bad"; 570 } 571 } 572 573 const int SelectControlCeiling = 2; 574 575 const char* SelectControlString(int cont) 576 { 577 switch (cont) { 578 case 0: return "Flatten"; 579 case 1: return "DontFlatten"; 580 581 case SelectControlCeiling: 582 default: return "Bad"; 583 } 584 } 585 586 const int LoopControlCeiling = 2; 587 588 const char* LoopControlString(int cont) 589 { 590 switch (cont) { 591 case 0: return "Unroll"; 592 case 1: return "DontUnroll"; 593 594 case LoopControlCeiling: 595 default: return "Bad"; 596 } 597 } 598 599 const int FunctionControlCeiling = 4; 600 601 const char* FunctionControlString(int cont) 602 { 603 switch (cont) { 604 case 0: return "Inline"; 605 case 1: return "DontInline"; 606 case 2: return "Pure"; 607 case 3: return "Const"; 608 609 case FunctionControlCeiling: 610 default: return "Bad"; 611 } 612 } 613 614 const int MemorySemanticsCeiling = 12; 615 616 const char* MemorySemanticsString(int mem) 617 { 618 // Note: No bits set (None) means "Relaxed" 619 switch (mem) { 620 case 0: return "Bad"; // Note: this is a placeholder for 'Consume' 621 case 1: return "Acquire"; 622 case 2: return "Release"; 623 case 3: return "AcquireRelease"; 624 case 4: return "SequentiallyConsistent"; 625 case 5: return "Bad"; // Note: reserved for future expansion 626 case 6: return "UniformMemory"; 627 case 7: return "SubgroupMemory"; 628 case 8: return "WorkgroupMemory"; 629 case 9: return "CrossWorkgroupMemory"; 630 case 10: return "AtomicCounterMemory"; 631 case 11: return "ImageMemory"; 632 633 case MemorySemanticsCeiling: 634 default: return "Bad"; 635 } 636 } 637 638 const int MemoryAccessCeiling = 3; 639 640 const char* MemoryAccessString(int mem) 641 { 642 switch (mem) { 643 case 0: return "Volatile"; 644 case 1: return "Aligned"; 645 case 2: return "Nontemporal"; 646 647 case MemoryAccessCeiling: 648 default: return "Bad"; 649 } 650 } 651 652 const int ScopeCeiling = 5; 653 654 const char* ScopeString(int mem) 655 { 656 switch (mem) { 657 case 0: return "CrossDevice"; 658 case 1: return "Device"; 659 case 2: return "Workgroup"; 660 case 3: return "Subgroup"; 661 case 4: return "Invocation"; 662 663 case ScopeCeiling: 664 default: return "Bad"; 665 } 666 } 667 668 const int GroupOperationCeiling = 3; 669 670 const char* GroupOperationString(int gop) 671 { 672 673 switch (gop) 674 { 675 case 0: return "Reduce"; 676 case 1: return "InclusiveScan"; 677 case 2: return "ExclusiveScan"; 678 679 case GroupOperationCeiling: 680 default: return "Bad"; 681 } 682 } 683 684 const int KernelEnqueueFlagsCeiling = 3; 685 686 const char* KernelEnqueueFlagsString(int flag) 687 { 688 switch (flag) 689 { 690 case 0: return "NoWait"; 691 case 1: return "WaitKernel"; 692 case 2: return "WaitWorkGroup"; 693 694 case KernelEnqueueFlagsCeiling: 695 default: return "Bad"; 696 } 697 } 698 699 const int KernelProfilingInfoCeiling = 1; 700 701 const char* KernelProfilingInfoString(int info) 702 { 703 switch (info) 704 { 705 case 0: return "CmdExecTime"; 706 707 case KernelProfilingInfoCeiling: 708 default: return "Bad"; 709 } 710 } 711 712 const int CapabilityCeiling = 58; 713 714 const char* CapabilityString(int info) 715 { 716 switch (info) 717 { 718 case 0: return "Matrix"; 719 case 1: return "Shader"; 720 case 2: return "Geometry"; 721 case 3: return "Tessellation"; 722 case 4: return "Addresses"; 723 case 5: return "Linkage"; 724 case 6: return "Kernel"; 725 case 7: return "Vector16"; 726 case 8: return "Float16Buffer"; 727 case 9: return "Float16"; 728 case 10: return "Float64"; 729 case 11: return "Int64"; 730 case 12: return "Int64Atomics"; 731 case 13: return "ImageBasic"; 732 case 14: return "ImageReadWrite"; 733 case 15: return "ImageMipmap"; 734 case 16: return "Bad"; 735 case 17: return "Pipes"; 736 case 18: return "Groups"; 737 case 19: return "DeviceEnqueue"; 738 case 20: return "LiteralSampler"; 739 case 21: return "AtomicStorage"; 740 case 22: return "Int16"; 741 case 23: return "TessellationPointSize"; 742 case 24: return "GeometryPointSize"; 743 case 25: return "ImageGatherExtended"; 744 case 26: return "Bad"; 745 case 27: return "StorageImageMultisample"; 746 case 28: return "UniformBufferArrayDynamicIndexing"; 747 case 29: return "SampledImageArrayDynamicIndexing"; 748 case 30: return "StorageBufferArrayDynamicIndexing"; 749 case 31: return "StorageImageArrayDynamicIndexing"; 750 case 32: return "ClipDistance"; 751 case 33: return "CullDistance"; 752 case 34: return "ImageCubeArray"; 753 case 35: return "SampleRateShading"; 754 case 36: return "ImageRect"; 755 case 37: return "SampledRect"; 756 case 38: return "GenericPointer"; 757 case 39: return "Int8"; 758 case 40: return "InputAttachment"; 759 case 41: return "SparseResidency"; 760 case 42: return "MinLod"; 761 case 43: return "Sampled1D"; 762 case 44: return "Image1D"; 763 case 45: return "SampledCubeArray"; 764 case 46: return "SampledBuffer"; 765 case 47: return "ImageBuffer"; 766 case 48: return "ImageMSArray"; 767 case 49: return "StorageImageExtendedFormats"; 768 case 50: return "ImageQuery"; 769 case 51: return "DerivativeControl"; 770 case 52: return "InterpolationFunction"; 771 case 53: return "TransformFeedback"; 772 case 54: return "GeometryStreams"; 773 case 55: return "StorageImageReadWithoutFormat"; 774 case 56: return "StorageImageWriteWithoutFormat"; 775 case 57: return "MultiViewport"; 776 777 case CapabilityCeiling: 778 default: return "Bad"; 779 } 780 } 781 782 const char* OpcodeString(int op) 783 { 784 switch (op) { 785 case 0: return "OpNop"; 786 case 1: return "OpUndef"; 787 case 2: return "OpSourceContinued"; 788 case 3: return "OpSource"; 789 case 4: return "OpSourceExtension"; 790 case 5: return "OpName"; 791 case 6: return "OpMemberName"; 792 case 7: return "OpString"; 793 case 8: return "OpLine"; 794 case 9: return "Bad"; 795 case 10: return "OpExtension"; 796 case 11: return "OpExtInstImport"; 797 case 12: return "OpExtInst"; 798 case 13: return "Bad"; 799 case 14: return "OpMemoryModel"; 800 case 15: return "OpEntryPoint"; 801 case 16: return "OpExecutionMode"; 802 case 17: return "OpCapability"; 803 case 18: return "Bad"; 804 case 19: return "OpTypeVoid"; 805 case 20: return "OpTypeBool"; 806 case 21: return "OpTypeInt"; 807 case 22: return "OpTypeFloat"; 808 case 23: return "OpTypeVector"; 809 case 24: return "OpTypeMatrix"; 810 case 25: return "OpTypeImage"; 811 case 26: return "OpTypeSampler"; 812 case 27: return "OpTypeSampledImage"; 813 case 28: return "OpTypeArray"; 814 case 29: return "OpTypeRuntimeArray"; 815 case 30: return "OpTypeStruct"; 816 case 31: return "OpTypeOpaque"; 817 case 32: return "OpTypePointer"; 818 case 33: return "OpTypeFunction"; 819 case 34: return "OpTypeEvent"; 820 case 35: return "OpTypeDeviceEvent"; 821 case 36: return "OpTypeReserveId"; 822 case 37: return "OpTypeQueue"; 823 case 38: return "OpTypePipe"; 824 case 39: return "OpTypeForwardPointer"; 825 case 40: return "Bad"; 826 case 41: return "OpConstantTrue"; 827 case 42: return "OpConstantFalse"; 828 case 43: return "OpConstant"; 829 case 44: return "OpConstantComposite"; 830 case 45: return "OpConstantSampler"; 831 case 46: return "OpConstantNull"; 832 case 47: return "Bad"; 833 case 48: return "OpSpecConstantTrue"; 834 case 49: return "OpSpecConstantFalse"; 835 case 50: return "OpSpecConstant"; 836 case 51: return "OpSpecConstantComposite"; 837 case 52: return "OpSpecConstantOp"; 838 case 53: return "Bad"; 839 case 54: return "OpFunction"; 840 case 55: return "OpFunctionParameter"; 841 case 56: return "OpFunctionEnd"; 842 case 57: return "OpFunctionCall"; 843 case 58: return "Bad"; 844 case 59: return "OpVariable"; 845 case 60: return "OpImageTexelPointer"; 846 case 61: return "OpLoad"; 847 case 62: return "OpStore"; 848 case 63: return "OpCopyMemory"; 849 case 64: return "OpCopyMemorySized"; 850 case 65: return "OpAccessChain"; 851 case 66: return "OpInBoundsAccessChain"; 852 case 67: return "OpPtrAccessChain"; 853 case 68: return "OpArrayLength"; 854 case 69: return "OpGenericPtrMemSemantics"; 855 case 70: return "OpInBoundsPtrAccessChain"; 856 case 71: return "OpDecorate"; 857 case 72: return "OpMemberDecorate"; 858 case 73: return "OpDecorationGroup"; 859 case 74: return "OpGroupDecorate"; 860 case 75: return "OpGroupMemberDecorate"; 861 case 76: return "Bad"; 862 case 77: return "OpVectorExtractDynamic"; 863 case 78: return "OpVectorInsertDynamic"; 864 case 79: return "OpVectorShuffle"; 865 case 80: return "OpCompositeConstruct"; 866 case 81: return "OpCompositeExtract"; 867 case 82: return "OpCompositeInsert"; 868 case 83: return "OpCopyObject"; 869 case 84: return "OpTranspose"; 870 case 85: return "Bad"; 871 case 86: return "OpSampledImage"; 872 case 87: return "OpImageSampleImplicitLod"; 873 case 88: return "OpImageSampleExplicitLod"; 874 case 89: return "OpImageSampleDrefImplicitLod"; 875 case 90: return "OpImageSampleDrefExplicitLod"; 876 case 91: return "OpImageSampleProjImplicitLod"; 877 case 92: return "OpImageSampleProjExplicitLod"; 878 case 93: return "OpImageSampleProjDrefImplicitLod"; 879 case 94: return "OpImageSampleProjDrefExplicitLod"; 880 case 95: return "OpImageFetch"; 881 case 96: return "OpImageGather"; 882 case 97: return "OpImageDrefGather"; 883 case 98: return "OpImageRead"; 884 case 99: return "OpImageWrite"; 885 case 100: return "OpImage"; 886 case 101: return "OpImageQueryFormat"; 887 case 102: return "OpImageQueryOrder"; 888 case 103: return "OpImageQuerySizeLod"; 889 case 104: return "OpImageQuerySize"; 890 case 105: return "OpImageQueryLod"; 891 case 106: return "OpImageQueryLevels"; 892 case 107: return "OpImageQuerySamples"; 893 case 108: return "Bad"; 894 case 109: return "OpConvertFToU"; 895 case 110: return "OpConvertFToS"; 896 case 111: return "OpConvertSToF"; 897 case 112: return "OpConvertUToF"; 898 case 113: return "OpUConvert"; 899 case 114: return "OpSConvert"; 900 case 115: return "OpFConvert"; 901 case 116: return "OpQuantizeToF16"; 902 case 117: return "OpConvertPtrToU"; 903 case 118: return "OpSatConvertSToU"; 904 case 119: return "OpSatConvertUToS"; 905 case 120: return "OpConvertUToPtr"; 906 case 121: return "OpPtrCastToGeneric"; 907 case 122: return "OpGenericCastToPtr"; 908 case 123: return "OpGenericCastToPtrExplicit"; 909 case 124: return "OpBitcast"; 910 case 125: return "Bad"; 911 case 126: return "OpSNegate"; 912 case 127: return "OpFNegate"; 913 case 128: return "OpIAdd"; 914 case 129: return "OpFAdd"; 915 case 130: return "OpISub"; 916 case 131: return "OpFSub"; 917 case 132: return "OpIMul"; 918 case 133: return "OpFMul"; 919 case 134: return "OpUDiv"; 920 case 135: return "OpSDiv"; 921 case 136: return "OpFDiv"; 922 case 137: return "OpUMod"; 923 case 138: return "OpSRem"; 924 case 139: return "OpSMod"; 925 case 140: return "OpFRem"; 926 case 141: return "OpFMod"; 927 case 142: return "OpVectorTimesScalar"; 928 case 143: return "OpMatrixTimesScalar"; 929 case 144: return "OpVectorTimesMatrix"; 930 case 145: return "OpMatrixTimesVector"; 931 case 146: return "OpMatrixTimesMatrix"; 932 case 147: return "OpOuterProduct"; 933 case 148: return "OpDot"; 934 case 149: return "OpIAddCarry"; 935 case 150: return "OpISubBorrow"; 936 case 151: return "OpUMulExtended"; 937 case 152: return "OpSMulExtended"; 938 case 153: return "Bad"; 939 case 154: return "OpAny"; 940 case 155: return "OpAll"; 941 case 156: return "OpIsNan"; 942 case 157: return "OpIsInf"; 943 case 158: return "OpIsFinite"; 944 case 159: return "OpIsNormal"; 945 case 160: return "OpSignBitSet"; 946 case 161: return "OpLessOrGreater"; 947 case 162: return "OpOrdered"; 948 case 163: return "OpUnordered"; 949 case 164: return "OpLogicalEqual"; 950 case 165: return "OpLogicalNotEqual"; 951 case 166: return "OpLogicalOr"; 952 case 167: return "OpLogicalAnd"; 953 case 168: return "OpLogicalNot"; 954 case 169: return "OpSelect"; 955 case 170: return "OpIEqual"; 956 case 171: return "OpINotEqual"; 957 case 172: return "OpUGreaterThan"; 958 case 173: return "OpSGreaterThan"; 959 case 174: return "OpUGreaterThanEqual"; 960 case 175: return "OpSGreaterThanEqual"; 961 case 176: return "OpULessThan"; 962 case 177: return "OpSLessThan"; 963 case 178: return "OpULessThanEqual"; 964 case 179: return "OpSLessThanEqual"; 965 case 180: return "OpFOrdEqual"; 966 case 181: return "OpFUnordEqual"; 967 case 182: return "OpFOrdNotEqual"; 968 case 183: return "OpFUnordNotEqual"; 969 case 184: return "OpFOrdLessThan"; 970 case 185: return "OpFUnordLessThan"; 971 case 186: return "OpFOrdGreaterThan"; 972 case 187: return "OpFUnordGreaterThan"; 973 case 188: return "OpFOrdLessThanEqual"; 974 case 189: return "OpFUnordLessThanEqual"; 975 case 190: return "OpFOrdGreaterThanEqual"; 976 case 191: return "OpFUnordGreaterThanEqual"; 977 case 192: return "Bad"; 978 case 193: return "Bad"; 979 case 194: return "OpShiftRightLogical"; 980 case 195: return "OpShiftRightArithmetic"; 981 case 196: return "OpShiftLeftLogical"; 982 case 197: return "OpBitwiseOr"; 983 case 198: return "OpBitwiseXor"; 984 case 199: return "OpBitwiseAnd"; 985 case 200: return "OpNot"; 986 case 201: return "OpBitFieldInsert"; 987 case 202: return "OpBitFieldSExtract"; 988 case 203: return "OpBitFieldUExtract"; 989 case 204: return "OpBitReverse"; 990 case 205: return "OpBitCount"; 991 case 206: return "Bad"; 992 case 207: return "OpDPdx"; 993 case 208: return "OpDPdy"; 994 case 209: return "OpFwidth"; 995 case 210: return "OpDPdxFine"; 996 case 211: return "OpDPdyFine"; 997 case 212: return "OpFwidthFine"; 998 case 213: return "OpDPdxCoarse"; 999 case 214: return "OpDPdyCoarse"; 1000 case 215: return "OpFwidthCoarse"; 1001 case 216: return "Bad"; 1002 case 217: return "Bad"; 1003 case 218: return "OpEmitVertex"; 1004 case 219: return "OpEndPrimitive"; 1005 case 220: return "OpEmitStreamVertex"; 1006 case 221: return "OpEndStreamPrimitive"; 1007 case 222: return "Bad"; 1008 case 223: return "Bad"; 1009 case 224: return "OpControlBarrier"; 1010 case 225: return "OpMemoryBarrier"; 1011 case 226: return "Bad"; 1012 case 227: return "OpAtomicLoad"; 1013 case 228: return "OpAtomicStore"; 1014 case 229: return "OpAtomicExchange"; 1015 case 230: return "OpAtomicCompareExchange"; 1016 case 231: return "OpAtomicCompareExchangeWeak"; 1017 case 232: return "OpAtomicIIncrement"; 1018 case 233: return "OpAtomicIDecrement"; 1019 case 234: return "OpAtomicIAdd"; 1020 case 235: return "OpAtomicISub"; 1021 case 236: return "OpAtomicSMin"; 1022 case 237: return "OpAtomicUMin"; 1023 case 238: return "OpAtomicSMax"; 1024 case 239: return "OpAtomicUMax"; 1025 case 240: return "OpAtomicAnd"; 1026 case 241: return "OpAtomicOr"; 1027 case 242: return "OpAtomicXor"; 1028 case 243: return "Bad"; 1029 case 244: return "Bad"; 1030 case 245: return "OpPhi"; 1031 case 246: return "OpLoopMerge"; 1032 case 247: return "OpSelectionMerge"; 1033 case 248: return "OpLabel"; 1034 case 249: return "OpBranch"; 1035 case 250: return "OpBranchConditional"; 1036 case 251: return "OpSwitch"; 1037 case 252: return "OpKill"; 1038 case 253: return "OpReturn"; 1039 case 254: return "OpReturnValue"; 1040 case 255: return "OpUnreachable"; 1041 case 256: return "OpLifetimeStart"; 1042 case 257: return "OpLifetimeStop"; 1043 case 258: return "Bad"; 1044 case 259: return "OpGroupAsyncCopy"; 1045 case 260: return "OpGroupWaitEvents"; 1046 case 261: return "OpGroupAll"; 1047 case 262: return "OpGroupAny"; 1048 case 263: return "OpGroupBroadcast"; 1049 case 264: return "OpGroupIAdd"; 1050 case 265: return "OpGroupFAdd"; 1051 case 266: return "OpGroupFMin"; 1052 case 267: return "OpGroupUMin"; 1053 case 268: return "OpGroupSMin"; 1054 case 269: return "OpGroupFMax"; 1055 case 270: return "OpGroupUMax"; 1056 case 271: return "OpGroupSMax"; 1057 case 272: return "Bad"; 1058 case 273: return "Bad"; 1059 case 274: return "OpReadPipe"; 1060 case 275: return "OpWritePipe"; 1061 case 276: return "OpReservedReadPipe"; 1062 case 277: return "OpReservedWritePipe"; 1063 case 278: return "OpReserveReadPipePackets"; 1064 case 279: return "OpReserveWritePipePackets"; 1065 case 280: return "OpCommitReadPipe"; 1066 case 281: return "OpCommitWritePipe"; 1067 case 282: return "OpIsValidReserveId"; 1068 case 283: return "OpGetNumPipePackets"; 1069 case 284: return "OpGetMaxPipePackets"; 1070 case 285: return "OpGroupReserveReadPipePackets"; 1071 case 286: return "OpGroupReserveWritePipePackets"; 1072 case 287: return "OpGroupCommitReadPipe"; 1073 case 288: return "OpGroupCommitWritePipe"; 1074 case 289: return "Bad"; 1075 case 290: return "Bad"; 1076 case 291: return "OpEnqueueMarker"; 1077 case 292: return "OpEnqueueKernel"; 1078 case 293: return "OpGetKernelNDrangeSubGroupCount"; 1079 case 294: return "OpGetKernelNDrangeMaxSubGroupSize"; 1080 case 295: return "OpGetKernelWorkGroupSize"; 1081 case 296: return "OpGetKernelPreferredWorkGroupSizeMultiple"; 1082 case 297: return "OpRetainEvent"; 1083 case 298: return "OpReleaseEvent"; 1084 case 299: return "OpCreateUserEvent"; 1085 case 300: return "OpIsValidEvent"; 1086 case 301: return "OpSetUserEventStatus"; 1087 case 302: return "OpCaptureEventProfilingInfo"; 1088 case 303: return "OpGetDefaultQueue"; 1089 case 304: return "OpBuildNDRange"; 1090 case 305: return "OpImageSparseSampleImplicitLod"; 1091 case 306: return "OpImageSparseSampleExplicitLod"; 1092 case 307: return "OpImageSparseSampleDrefImplicitLod"; 1093 case 308: return "OpImageSparseSampleDrefExplicitLod"; 1094 case 309: return "OpImageSparseSampleProjImplicitLod"; 1095 case 310: return "OpImageSparseSampleProjExplicitLod"; 1096 case 311: return "OpImageSparseSampleProjDrefImplicitLod"; 1097 case 312: return "OpImageSparseSampleProjDrefExplicitLod"; 1098 case 313: return "OpImageSparseFetch"; 1099 case 314: return "OpImageSparseGather"; 1100 case 315: return "OpImageSparseDrefGather"; 1101 case 316: return "OpImageSparseTexelsResident"; 1102 case 317: return "OpNoLine"; 1103 case 318: return "OpAtomicFlagTestAndSet"; 1104 case 319: return "OpAtomicFlagClear"; 1105 case 320: return "OpImageSparseRead"; 1106 1107 case OpcodeCeiling: 1108 default: 1109 return "Bad"; 1110 } 1111 } 1112 1113 // The set of objects that hold all the instruction/operand 1114 // parameterization information. 1115 InstructionParameters InstructionDesc[OpcodeCeiling]; 1116 OperandParameters ExecutionModeOperands[ExecutionModeCeiling]; 1117 OperandParameters DecorationOperands[DecorationCeiling]; 1118 1119 EnumDefinition OperandClassParams[OperandCount]; 1120 EnumParameters ExecutionModelParams[ExecutionModelCeiling]; 1121 EnumParameters AddressingParams[AddressingModelCeiling]; 1122 EnumParameters MemoryParams[MemoryModelCeiling]; 1123 EnumParameters ExecutionModeParams[ExecutionModeCeiling]; 1124 EnumParameters StorageParams[StorageClassCeiling]; 1125 EnumParameters SamplerAddressingModeParams[SamplerAddressingModeCeiling]; 1126 EnumParameters SamplerFilterModeParams[SamplerFilterModeCeiling]; 1127 EnumParameters ImageFormatParams[ImageFormatCeiling]; 1128 EnumParameters ImageChannelOrderParams[ImageChannelOrderCeiling]; 1129 EnumParameters ImageChannelDataTypeParams[ImageChannelDataTypeCeiling]; 1130 EnumParameters ImageOperandsParams[ImageOperandsCeiling]; 1131 EnumParameters FPFastMathParams[FPFastMathCeiling]; 1132 EnumParameters FPRoundingModeParams[FPRoundingModeCeiling]; 1133 EnumParameters LinkageTypeParams[LinkageTypeCeiling]; 1134 EnumParameters DecorationParams[DecorationCeiling]; 1135 EnumParameters BuiltInParams[BuiltInCeiling]; 1136 EnumParameters DimensionalityParams[DimensionCeiling]; 1137 EnumParameters FuncParamAttrParams[FuncParamAttrCeiling]; 1138 EnumParameters AccessQualifierParams[AccessQualifierCeiling]; 1139 EnumParameters GroupOperationParams[GroupOperationCeiling]; 1140 EnumParameters LoopControlParams[FunctionControlCeiling]; 1141 EnumParameters SelectionControlParams[SelectControlCeiling]; 1142 EnumParameters FunctionControlParams[FunctionControlCeiling]; 1143 EnumParameters MemorySemanticsParams[MemorySemanticsCeiling]; 1144 EnumParameters MemoryAccessParams[MemoryAccessCeiling]; 1145 EnumParameters ScopeParams[ScopeCeiling]; 1146 EnumParameters KernelEnqueueFlagsParams[KernelEnqueueFlagsCeiling]; 1147 EnumParameters KernelProfilingInfoParams[KernelProfilingInfoCeiling]; 1148 EnumParameters CapabilityParams[CapabilityCeiling]; 1149 1150 // Set up all the parameterizing descriptions of the opcodes, operands, etc. 1151 void Parameterize() 1152 { 1153 // only do this once. 1154 static bool initialized = false; 1155 if (initialized) 1156 return; 1157 initialized = true; 1158 1159 // Exceptions to having a result <id> and a resulting type <id>. 1160 // (Everything is initialized to have both). 1161 1162 InstructionDesc[OpNop].setResultAndType(false, false); 1163 InstructionDesc[OpSource].setResultAndType(false, false); 1164 InstructionDesc[OpSourceContinued].setResultAndType(false, false); 1165 InstructionDesc[OpSourceExtension].setResultAndType(false, false); 1166 InstructionDesc[OpExtension].setResultAndType(false, false); 1167 InstructionDesc[OpExtInstImport].setResultAndType(true, false); 1168 InstructionDesc[OpCapability].setResultAndType(false, false); 1169 InstructionDesc[OpMemoryModel].setResultAndType(false, false); 1170 InstructionDesc[OpEntryPoint].setResultAndType(false, false); 1171 InstructionDesc[OpExecutionMode].setResultAndType(false, false); 1172 InstructionDesc[OpTypeVoid].setResultAndType(true, false); 1173 InstructionDesc[OpTypeBool].setResultAndType(true, false); 1174 InstructionDesc[OpTypeInt].setResultAndType(true, false); 1175 InstructionDesc[OpTypeFloat].setResultAndType(true, false); 1176 InstructionDesc[OpTypeVector].setResultAndType(true, false); 1177 InstructionDesc[OpTypeMatrix].setResultAndType(true, false); 1178 InstructionDesc[OpTypeImage].setResultAndType(true, false); 1179 InstructionDesc[OpTypeSampler].setResultAndType(true, false); 1180 InstructionDesc[OpTypeSampledImage].setResultAndType(true, false); 1181 InstructionDesc[OpTypeArray].setResultAndType(true, false); 1182 InstructionDesc[OpTypeRuntimeArray].setResultAndType(true, false); 1183 InstructionDesc[OpTypeStruct].setResultAndType(true, false); 1184 InstructionDesc[OpTypeOpaque].setResultAndType(true, false); 1185 InstructionDesc[OpTypePointer].setResultAndType(true, false); 1186 InstructionDesc[OpTypeForwardPointer].setResultAndType(false, false); 1187 InstructionDesc[OpTypeFunction].setResultAndType(true, false); 1188 InstructionDesc[OpTypeEvent].setResultAndType(true, false); 1189 InstructionDesc[OpTypeDeviceEvent].setResultAndType(true, false); 1190 InstructionDesc[OpTypeReserveId].setResultAndType(true, false); 1191 InstructionDesc[OpTypeQueue].setResultAndType(true, false); 1192 InstructionDesc[OpTypePipe].setResultAndType(true, false); 1193 InstructionDesc[OpFunctionEnd].setResultAndType(false, false); 1194 InstructionDesc[OpStore].setResultAndType(false, false); 1195 InstructionDesc[OpImageWrite].setResultAndType(false, false); 1196 InstructionDesc[OpDecorationGroup].setResultAndType(true, false); 1197 InstructionDesc[OpDecorate].setResultAndType(false, false); 1198 InstructionDesc[OpMemberDecorate].setResultAndType(false, false); 1199 InstructionDesc[OpGroupDecorate].setResultAndType(false, false); 1200 InstructionDesc[OpGroupMemberDecorate].setResultAndType(false, false); 1201 InstructionDesc[OpName].setResultAndType(false, false); 1202 InstructionDesc[OpMemberName].setResultAndType(false, false); 1203 InstructionDesc[OpString].setResultAndType(true, false); 1204 InstructionDesc[OpLine].setResultAndType(false, false); 1205 InstructionDesc[OpNoLine].setResultAndType(false, false); 1206 InstructionDesc[OpCopyMemory].setResultAndType(false, false); 1207 InstructionDesc[OpCopyMemorySized].setResultAndType(false, false); 1208 InstructionDesc[OpEmitVertex].setResultAndType(false, false); 1209 InstructionDesc[OpEndPrimitive].setResultAndType(false, false); 1210 InstructionDesc[OpEmitStreamVertex].setResultAndType(false, false); 1211 InstructionDesc[OpEndStreamPrimitive].setResultAndType(false, false); 1212 InstructionDesc[OpControlBarrier].setResultAndType(false, false); 1213 InstructionDesc[OpMemoryBarrier].setResultAndType(false, false); 1214 InstructionDesc[OpAtomicStore].setResultAndType(false, false); 1215 InstructionDesc[OpLoopMerge].setResultAndType(false, false); 1216 InstructionDesc[OpSelectionMerge].setResultAndType(false, false); 1217 InstructionDesc[OpLabel].setResultAndType(true, false); 1218 InstructionDesc[OpBranch].setResultAndType(false, false); 1219 InstructionDesc[OpBranchConditional].setResultAndType(false, false); 1220 InstructionDesc[OpSwitch].setResultAndType(false, false); 1221 InstructionDesc[OpKill].setResultAndType(false, false); 1222 InstructionDesc[OpReturn].setResultAndType(false, false); 1223 InstructionDesc[OpReturnValue].setResultAndType(false, false); 1224 InstructionDesc[OpUnreachable].setResultAndType(false, false); 1225 InstructionDesc[OpLifetimeStart].setResultAndType(false, false); 1226 InstructionDesc[OpLifetimeStop].setResultAndType(false, false); 1227 InstructionDesc[OpCommitReadPipe].setResultAndType(false, false); 1228 InstructionDesc[OpCommitWritePipe].setResultAndType(false, false); 1229 InstructionDesc[OpGroupCommitWritePipe].setResultAndType(false, false); 1230 InstructionDesc[OpGroupCommitReadPipe].setResultAndType(false, false); 1231 InstructionDesc[OpCaptureEventProfilingInfo].setResultAndType(false, false); 1232 InstructionDesc[OpSetUserEventStatus].setResultAndType(false, false); 1233 InstructionDesc[OpRetainEvent].setResultAndType(false, false); 1234 InstructionDesc[OpReleaseEvent].setResultAndType(false, false); 1235 InstructionDesc[OpGroupWaitEvents].setResultAndType(false, false); 1236 InstructionDesc[OpAtomicFlagClear].setResultAndType(false, false); 1237 1238 // Specific additional context-dependent operands 1239 1240 ExecutionModeOperands[ExecutionModeInvocations].push(OperandLiteralNumber, "'Number of <<Invocation,invocations>>'"); 1241 1242 ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'x size'"); 1243 ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'y size'"); 1244 ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'z size'"); 1245 1246 ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'x size'"); 1247 ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'y size'"); 1248 ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'z size'"); 1249 1250 ExecutionModeOperands[ExecutionModeOutputVertices].push(OperandLiteralNumber, "'Vertex count'"); 1251 ExecutionModeOperands[ExecutionModeVecTypeHint].push(OperandLiteralNumber, "'Vector type'"); 1252 1253 DecorationOperands[DecorationStream].push(OperandLiteralNumber, "'Stream Number'"); 1254 DecorationOperands[DecorationLocation].push(OperandLiteralNumber, "'Location'"); 1255 DecorationOperands[DecorationComponent].push(OperandLiteralNumber, "'Component'"); 1256 DecorationOperands[DecorationIndex].push(OperandLiteralNumber, "'Index'"); 1257 DecorationOperands[DecorationBinding].push(OperandLiteralNumber, "'Binding Point'"); 1258 DecorationOperands[DecorationDescriptorSet].push(OperandLiteralNumber, "'Descriptor Set'"); 1259 DecorationOperands[DecorationOffset].push(OperandLiteralNumber, "'Byte Offset'"); 1260 DecorationOperands[DecorationXfbBuffer].push(OperandLiteralNumber, "'XFB Buffer Number'"); 1261 DecorationOperands[DecorationXfbStride].push(OperandLiteralNumber, "'XFB Stride'"); 1262 DecorationOperands[DecorationArrayStride].push(OperandLiteralNumber, "'Array Stride'"); 1263 DecorationOperands[DecorationMatrixStride].push(OperandLiteralNumber, "'Matrix Stride'"); 1264 DecorationOperands[DecorationBuiltIn].push(OperandLiteralNumber, "See <<BuiltIn,*BuiltIn*>>"); 1265 DecorationOperands[DecorationFPRoundingMode].push(OperandFPRoundingMode, "'Floating-Point Rounding Mode'"); 1266 DecorationOperands[DecorationFPFastMathMode].push(OperandFPFastMath, "'Fast-Math Mode'"); 1267 DecorationOperands[DecorationLinkageAttributes].push(OperandLiteralString, "'Name'"); 1268 DecorationOperands[DecorationLinkageAttributes].push(OperandLinkageType, "'Linkage Type'"); 1269 DecorationOperands[DecorationFuncParamAttr].push(OperandFuncParamAttr, "'Function Parameter Attribute'"); 1270 DecorationOperands[DecorationSpecId].push(OperandLiteralNumber, "'Specialization Constant ID'"); 1271 DecorationOperands[DecorationInputAttachmentIndex].push(OperandLiteralNumber, "'Attachment Index'"); 1272 DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "'Alignment'"); 1273 1274 OperandClassParams[OperandSource].set(SourceLanguageCeiling, SourceString, 0); 1275 OperandClassParams[OperandExecutionModel].set(ExecutionModelCeiling, ExecutionModelString, ExecutionModelParams); 1276 OperandClassParams[OperandAddressing].set(AddressingModelCeiling, AddressingString, AddressingParams); 1277 OperandClassParams[OperandMemory].set(MemoryModelCeiling, MemoryString, MemoryParams); 1278 OperandClassParams[OperandExecutionMode].set(ExecutionModeCeiling, ExecutionModeString, ExecutionModeParams); 1279 OperandClassParams[OperandExecutionMode].setOperands(ExecutionModeOperands); 1280 OperandClassParams[OperandStorage].set(StorageClassCeiling, StorageClassString, StorageParams); 1281 OperandClassParams[OperandDimensionality].set(DimensionCeiling, DimensionString, DimensionalityParams); 1282 OperandClassParams[OperandSamplerAddressingMode].set(SamplerAddressingModeCeiling, SamplerAddressingModeString, SamplerAddressingModeParams); 1283 OperandClassParams[OperandSamplerFilterMode].set(SamplerFilterModeCeiling, SamplerFilterModeString, SamplerFilterModeParams); 1284 OperandClassParams[OperandSamplerImageFormat].set(ImageFormatCeiling, ImageFormatString, ImageFormatParams); 1285 OperandClassParams[OperandImageChannelOrder].set(ImageChannelOrderCeiling, ImageChannelOrderString, ImageChannelOrderParams); 1286 OperandClassParams[OperandImageChannelDataType].set(ImageChannelDataTypeCeiling, ImageChannelDataTypeString, ImageChannelDataTypeParams); 1287 OperandClassParams[OperandImageOperands].set(ImageOperandsCeiling, ImageOperandsString, ImageOperandsParams, true); 1288 OperandClassParams[OperandFPFastMath].set(FPFastMathCeiling, FPFastMathString, FPFastMathParams, true); 1289 OperandClassParams[OperandFPRoundingMode].set(FPRoundingModeCeiling, FPRoundingModeString, FPRoundingModeParams); 1290 OperandClassParams[OperandLinkageType].set(LinkageTypeCeiling, LinkageTypeString, LinkageTypeParams); 1291 OperandClassParams[OperandFuncParamAttr].set(FuncParamAttrCeiling, FuncParamAttrString, FuncParamAttrParams); 1292 OperandClassParams[OperandAccessQualifier].set(AccessQualifierCeiling, AccessQualifierString, AccessQualifierParams); 1293 OperandClassParams[OperandDecoration].set(DecorationCeiling, DecorationString, DecorationParams); 1294 OperandClassParams[OperandDecoration].setOperands(DecorationOperands); 1295 OperandClassParams[OperandBuiltIn].set(BuiltInCeiling, BuiltInString, BuiltInParams); 1296 OperandClassParams[OperandSelect].set(SelectControlCeiling, SelectControlString, SelectionControlParams, true); 1297 OperandClassParams[OperandLoop].set(LoopControlCeiling, LoopControlString, LoopControlParams, true); 1298 OperandClassParams[OperandFunction].set(FunctionControlCeiling, FunctionControlString, FunctionControlParams, true); 1299 OperandClassParams[OperandMemorySemantics].set(MemorySemanticsCeiling, MemorySemanticsString, MemorySemanticsParams, true); 1300 OperandClassParams[OperandMemoryAccess].set(MemoryAccessCeiling, MemoryAccessString, MemoryAccessParams, true); 1301 OperandClassParams[OperandScope].set(ScopeCeiling, ScopeString, ScopeParams); 1302 OperandClassParams[OperandGroupOperation].set(GroupOperationCeiling, GroupOperationString, GroupOperationParams); 1303 OperandClassParams[OperandKernelEnqueueFlags].set(KernelEnqueueFlagsCeiling, KernelEnqueueFlagsString, KernelEnqueueFlagsParams); 1304 OperandClassParams[OperandKernelProfilingInfo].set(KernelProfilingInfoCeiling, KernelProfilingInfoString, KernelProfilingInfoParams, true); 1305 OperandClassParams[OperandCapability].set(CapabilityCeiling, CapabilityString, CapabilityParams); 1306 OperandClassParams[OperandOpcode].set(OpcodeCeiling, OpcodeString, 0); 1307 1308 CapabilityParams[CapabilityShader].caps.push_back(CapabilityMatrix); 1309 CapabilityParams[CapabilityGeometry].caps.push_back(CapabilityShader); 1310 CapabilityParams[CapabilityTessellation].caps.push_back(CapabilityShader); 1311 CapabilityParams[CapabilityVector16].caps.push_back(CapabilityKernel); 1312 CapabilityParams[CapabilityFloat16Buffer].caps.push_back(CapabilityKernel); 1313 CapabilityParams[CapabilityInt64Atomics].caps.push_back(CapabilityInt64); 1314 CapabilityParams[CapabilityImageBasic].caps.push_back(CapabilityKernel); 1315 CapabilityParams[CapabilityImageReadWrite].caps.push_back(CapabilityImageBasic); 1316 CapabilityParams[CapabilityImageMipmap].caps.push_back(CapabilityImageBasic); 1317 CapabilityParams[CapabilityPipes].caps.push_back(CapabilityKernel); 1318 CapabilityParams[CapabilityDeviceEnqueue].caps.push_back(CapabilityKernel); 1319 CapabilityParams[CapabilityLiteralSampler].caps.push_back(CapabilityKernel); 1320 CapabilityParams[CapabilityAtomicStorage].caps.push_back(CapabilityShader); 1321 CapabilityParams[CapabilitySampleRateShading].caps.push_back(CapabilityShader); 1322 CapabilityParams[CapabilityTessellationPointSize].caps.push_back(CapabilityTessellation); 1323 CapabilityParams[CapabilityGeometryPointSize].caps.push_back(CapabilityGeometry); 1324 CapabilityParams[CapabilityImageGatherExtended].caps.push_back(CapabilityShader); 1325 CapabilityParams[CapabilityStorageImageExtendedFormats].caps.push_back(CapabilityShader); 1326 CapabilityParams[CapabilityStorageImageMultisample].caps.push_back(CapabilityShader); 1327 CapabilityParams[CapabilityUniformBufferArrayDynamicIndexing].caps.push_back(CapabilityShader); 1328 CapabilityParams[CapabilitySampledImageArrayDynamicIndexing].caps.push_back(CapabilityShader); 1329 CapabilityParams[CapabilityStorageBufferArrayDynamicIndexing].caps.push_back(CapabilityShader); 1330 CapabilityParams[CapabilityStorageImageArrayDynamicIndexing].caps.push_back(CapabilityShader); 1331 CapabilityParams[CapabilityClipDistance].caps.push_back(CapabilityShader); 1332 CapabilityParams[CapabilityCullDistance].caps.push_back(CapabilityShader); 1333 CapabilityParams[CapabilityGenericPointer].caps.push_back(CapabilityAddresses); 1334 CapabilityParams[CapabilityInt8].caps.push_back(CapabilityKernel); 1335 CapabilityParams[CapabilityInputAttachment].caps.push_back(CapabilityShader); 1336 CapabilityParams[CapabilityMinLod].caps.push_back(CapabilityShader); 1337 CapabilityParams[CapabilitySparseResidency].caps.push_back(CapabilityShader); 1338 CapabilityParams[CapabilitySampled1D].caps.push_back(CapabilityShader); 1339 CapabilityParams[CapabilitySampledRect].caps.push_back(CapabilityShader); 1340 CapabilityParams[CapabilitySampledBuffer].caps.push_back(CapabilityShader); 1341 CapabilityParams[CapabilitySampledCubeArray].caps.push_back(CapabilityShader); 1342 CapabilityParams[CapabilityImageMSArray].caps.push_back(CapabilityShader); 1343 CapabilityParams[CapabilityImage1D].caps.push_back(CapabilitySampled1D); 1344 CapabilityParams[CapabilityImageRect].caps.push_back(CapabilitySampledRect); 1345 CapabilityParams[CapabilityImageBuffer].caps.push_back(CapabilitySampledBuffer); 1346 CapabilityParams[CapabilityImageCubeArray].caps.push_back(CapabilitySampledCubeArray); 1347 CapabilityParams[CapabilityImageQuery].caps.push_back(CapabilityShader); 1348 CapabilityParams[CapabilityDerivativeControl].caps.push_back(CapabilityShader); 1349 CapabilityParams[CapabilityInterpolationFunction].caps.push_back(CapabilityShader); 1350 CapabilityParams[CapabilityTransformFeedback].caps.push_back(CapabilityShader); 1351 CapabilityParams[CapabilityGeometryStreams].caps.push_back(CapabilityGeometry); 1352 CapabilityParams[CapabilityStorageImageReadWithoutFormat].caps.push_back(CapabilityShader); 1353 CapabilityParams[CapabilityStorageImageWriteWithoutFormat].caps.push_back(CapabilityShader); 1354 CapabilityParams[CapabilityMultiViewport].caps.push_back(CapabilityGeometry); 1355 1356 AddressingParams[AddressingModelPhysical32].caps.push_back(CapabilityAddresses); 1357 AddressingParams[AddressingModelPhysical64].caps.push_back(CapabilityAddresses); 1358 1359 MemoryParams[MemoryModelSimple].caps.push_back(CapabilityShader); 1360 MemoryParams[MemoryModelGLSL450].caps.push_back(CapabilityShader); 1361 MemoryParams[MemoryModelOpenCL].caps.push_back(CapabilityKernel); 1362 1363 MemorySemanticsParams[MemorySemanticsUniformMemoryShift].caps.push_back(CapabilityShader); 1364 MemorySemanticsParams[MemorySemanticsAtomicCounterMemoryShift].caps.push_back(CapabilityAtomicStorage); 1365 1366 ExecutionModelParams[ExecutionModelVertex].caps.push_back(CapabilityShader); 1367 ExecutionModelParams[ExecutionModelTessellationControl].caps.push_back(CapabilityTessellation); 1368 ExecutionModelParams[ExecutionModelTessellationEvaluation].caps.push_back(CapabilityTessellation); 1369 ExecutionModelParams[ExecutionModelGeometry].caps.push_back(CapabilityGeometry); 1370 ExecutionModelParams[ExecutionModelFragment].caps.push_back(CapabilityShader); 1371 ExecutionModelParams[ExecutionModelGLCompute].caps.push_back(CapabilityShader); 1372 ExecutionModelParams[ExecutionModelKernel].caps.push_back(CapabilityKernel); 1373 1374 // Storage capabilites 1375 StorageParams[StorageClassInput].caps.push_back(CapabilityShader); 1376 StorageParams[StorageClassUniform].caps.push_back(CapabilityShader); 1377 StorageParams[StorageClassOutput].caps.push_back(CapabilityShader); 1378 StorageParams[StorageClassPrivate].caps.push_back(CapabilityShader); 1379 StorageParams[StorageClassGeneric].caps.push_back(CapabilityKernel); 1380 StorageParams[StorageClassAtomicCounter].caps.push_back(CapabilityAtomicStorage); 1381 StorageParams[StorageClassPushConstant].caps.push_back(CapabilityShader); 1382 1383 // Sampler Filter & Addressing mode capabilities 1384 SamplerAddressingModeParams[SamplerAddressingModeNone].caps.push_back(CapabilityKernel); 1385 SamplerAddressingModeParams[SamplerAddressingModeClampToEdge].caps.push_back(CapabilityKernel); 1386 SamplerAddressingModeParams[SamplerAddressingModeClamp].caps.push_back(CapabilityKernel); 1387 SamplerAddressingModeParams[SamplerAddressingModeRepeat].caps.push_back(CapabilityKernel); 1388 SamplerAddressingModeParams[SamplerAddressingModeRepeatMirrored].caps.push_back(CapabilityKernel); 1389 1390 SamplerFilterModeParams[SamplerFilterModeNearest].caps.push_back(CapabilityKernel); 1391 SamplerFilterModeParams[SamplerFilterModeLinear].caps.push_back(CapabilityKernel); 1392 1393 // image format capabilities 1394 1395 // ES/Desktop float 1396 ImageFormatParams[ImageFormatRgba32f].caps.push_back(CapabilityShader); 1397 ImageFormatParams[ImageFormatRgba16f].caps.push_back(CapabilityShader); 1398 ImageFormatParams[ImageFormatR32f].caps.push_back(CapabilityShader); 1399 ImageFormatParams[ImageFormatRgba8].caps.push_back(CapabilityShader); 1400 ImageFormatParams[ImageFormatRgba8Snorm].caps.push_back(CapabilityShader); 1401 1402 // Desktop float 1403 ImageFormatParams[ImageFormatRg32f].caps.push_back(CapabilityStorageImageExtendedFormats); 1404 ImageFormatParams[ImageFormatRg16f].caps.push_back(CapabilityStorageImageExtendedFormats); 1405 ImageFormatParams[ImageFormatR11fG11fB10f].caps.push_back(CapabilityStorageImageExtendedFormats); 1406 ImageFormatParams[ImageFormatR16f].caps.push_back(CapabilityStorageImageExtendedFormats); 1407 ImageFormatParams[ImageFormatRgba16].caps.push_back(CapabilityStorageImageExtendedFormats); 1408 ImageFormatParams[ImageFormatRgb10A2].caps.push_back(CapabilityStorageImageExtendedFormats); 1409 ImageFormatParams[ImageFormatRg16].caps.push_back(CapabilityStorageImageExtendedFormats); 1410 ImageFormatParams[ImageFormatRg8].caps.push_back(CapabilityStorageImageExtendedFormats); 1411 ImageFormatParams[ImageFormatR16].caps.push_back(CapabilityStorageImageExtendedFormats); 1412 ImageFormatParams[ImageFormatR8].caps.push_back(CapabilityStorageImageExtendedFormats); 1413 ImageFormatParams[ImageFormatRgba16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats); 1414 ImageFormatParams[ImageFormatRg16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats); 1415 ImageFormatParams[ImageFormatRg8Snorm].caps.push_back(CapabilityStorageImageExtendedFormats); 1416 ImageFormatParams[ImageFormatR16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats); 1417 ImageFormatParams[ImageFormatR8Snorm].caps.push_back(CapabilityStorageImageExtendedFormats); 1418 1419 // ES/Desktop int 1420 ImageFormatParams[ImageFormatRgba32i].caps.push_back(CapabilityShader); 1421 ImageFormatParams[ImageFormatRgba16i].caps.push_back(CapabilityShader); 1422 ImageFormatParams[ImageFormatRgba8i].caps.push_back(CapabilityShader); 1423 ImageFormatParams[ImageFormatR32i].caps.push_back(CapabilityShader); 1424 1425 // Desktop int 1426 ImageFormatParams[ImageFormatRg32i].caps.push_back(CapabilityStorageImageExtendedFormats); 1427 ImageFormatParams[ImageFormatRg16i].caps.push_back(CapabilityStorageImageExtendedFormats); 1428 ImageFormatParams[ImageFormatRg8i].caps.push_back(CapabilityStorageImageExtendedFormats); 1429 ImageFormatParams[ImageFormatR16i].caps.push_back(CapabilityStorageImageExtendedFormats); 1430 ImageFormatParams[ImageFormatR8i].caps.push_back(CapabilityStorageImageExtendedFormats); 1431 1432 // ES/Desktop uint 1433 ImageFormatParams[ImageFormatRgba32ui].caps.push_back(CapabilityShader); 1434 ImageFormatParams[ImageFormatRgba16ui].caps.push_back(CapabilityShader); 1435 ImageFormatParams[ImageFormatRgba8ui].caps.push_back(CapabilityShader); 1436 ImageFormatParams[ImageFormatR32ui].caps.push_back(CapabilityShader); 1437 1438 // Desktop uint 1439 ImageFormatParams[ImageFormatRgb10a2ui].caps.push_back(CapabilityStorageImageExtendedFormats); 1440 ImageFormatParams[ImageFormatRg32ui].caps.push_back(CapabilityStorageImageExtendedFormats); 1441 ImageFormatParams[ImageFormatRg16ui].caps.push_back(CapabilityStorageImageExtendedFormats); 1442 ImageFormatParams[ImageFormatRg8ui].caps.push_back(CapabilityStorageImageExtendedFormats); 1443 ImageFormatParams[ImageFormatR16ui].caps.push_back(CapabilityStorageImageExtendedFormats); 1444 ImageFormatParams[ImageFormatR8ui].caps.push_back(CapabilityStorageImageExtendedFormats); 1445 1446 // image channel order capabilities 1447 for (int i = 0; i < ImageChannelOrderCeiling; ++i) { 1448 ImageChannelOrderParams[i].caps.push_back(CapabilityKernel); 1449 } 1450 1451 // image channel type capabilities 1452 for (int i = 0; i < ImageChannelDataTypeCeiling; ++i) { 1453 ImageChannelDataTypeParams[i].caps.push_back(CapabilityKernel); 1454 } 1455 1456 // image lookup operands 1457 ImageOperandsParams[ImageOperandsBiasShift].caps.push_back(CapabilityShader); 1458 ImageOperandsParams[ImageOperandsOffsetShift].caps.push_back(CapabilityImageGatherExtended); 1459 ImageOperandsParams[ImageOperandsMinLodShift].caps.push_back(CapabilityMinLod); 1460 1461 // fast math flags capabilities 1462 for (int i = 0; i < FPFastMathCeiling; ++i) { 1463 FPFastMathParams[i].caps.push_back(CapabilityKernel); 1464 } 1465 1466 // fp rounding mode capabilities 1467 for (int i = 0; i < FPRoundingModeCeiling; ++i) { 1468 FPRoundingModeParams[i].caps.push_back(CapabilityKernel); 1469 } 1470 1471 // linkage types 1472 for (int i = 0; i < LinkageTypeCeiling; ++i) { 1473 LinkageTypeParams[i].caps.push_back(CapabilityLinkage); 1474 } 1475 1476 // function argument types 1477 for (int i = 0; i < FuncParamAttrCeiling; ++i) { 1478 FuncParamAttrParams[i].caps.push_back(CapabilityKernel); 1479 } 1480 1481 // function argument types 1482 for (int i = 0; i < AccessQualifierCeiling; ++i) { 1483 AccessQualifierParams[i].caps.push_back(CapabilityKernel); 1484 } 1485 1486 ExecutionModeParams[ExecutionModeInvocations].caps.push_back(CapabilityGeometry); 1487 ExecutionModeParams[ExecutionModeSpacingEqual].caps.push_back(CapabilityTessellation); 1488 ExecutionModeParams[ExecutionModeSpacingFractionalEven].caps.push_back(CapabilityTessellation); 1489 ExecutionModeParams[ExecutionModeSpacingFractionalOdd].caps.push_back(CapabilityTessellation); 1490 ExecutionModeParams[ExecutionModeVertexOrderCw].caps.push_back(CapabilityTessellation); 1491 ExecutionModeParams[ExecutionModeVertexOrderCcw].caps.push_back(CapabilityTessellation); 1492 ExecutionModeParams[ExecutionModePixelCenterInteger].caps.push_back(CapabilityShader); 1493 ExecutionModeParams[ExecutionModeOriginUpperLeft].caps.push_back(CapabilityShader); 1494 ExecutionModeParams[ExecutionModeOriginLowerLeft].caps.push_back(CapabilityShader); 1495 ExecutionModeParams[ExecutionModeEarlyFragmentTests].caps.push_back(CapabilityShader); 1496 ExecutionModeParams[ExecutionModePointMode].caps.push_back(CapabilityTessellation); 1497 ExecutionModeParams[ExecutionModeXfb].caps.push_back(CapabilityTransformFeedback); 1498 ExecutionModeParams[ExecutionModeDepthReplacing].caps.push_back(CapabilityShader); 1499 ExecutionModeParams[ExecutionModeDepthGreater].caps.push_back(CapabilityShader); 1500 ExecutionModeParams[ExecutionModeDepthLess].caps.push_back(CapabilityShader); 1501 ExecutionModeParams[ExecutionModeDepthUnchanged].caps.push_back(CapabilityShader); 1502 ExecutionModeParams[ExecutionModeLocalSizeHint].caps.push_back(CapabilityKernel); 1503 ExecutionModeParams[ExecutionModeInputPoints].caps.push_back(CapabilityGeometry); 1504 ExecutionModeParams[ExecutionModeInputLines].caps.push_back(CapabilityGeometry); 1505 ExecutionModeParams[ExecutionModeInputLinesAdjacency].caps.push_back(CapabilityGeometry); 1506 ExecutionModeParams[ExecutionModeTriangles].caps.push_back(CapabilityGeometry); 1507 ExecutionModeParams[ExecutionModeTriangles].caps.push_back(CapabilityTessellation); 1508 ExecutionModeParams[ExecutionModeInputTrianglesAdjacency].caps.push_back(CapabilityGeometry); 1509 ExecutionModeParams[ExecutionModeQuads].caps.push_back(CapabilityTessellation); 1510 ExecutionModeParams[ExecutionModeIsolines].caps.push_back(CapabilityTessellation); 1511 ExecutionModeParams[ExecutionModeOutputVertices].caps.push_back(CapabilityGeometry); 1512 ExecutionModeParams[ExecutionModeOutputVertices].caps.push_back(CapabilityTessellation); 1513 ExecutionModeParams[ExecutionModeOutputPoints].caps.push_back(CapabilityGeometry); 1514 ExecutionModeParams[ExecutionModeOutputLineStrip].caps.push_back(CapabilityGeometry); 1515 ExecutionModeParams[ExecutionModeOutputTriangleStrip].caps.push_back(CapabilityGeometry); 1516 ExecutionModeParams[ExecutionModeVecTypeHint].caps.push_back(CapabilityKernel); 1517 ExecutionModeParams[ExecutionModeContractionOff].caps.push_back(CapabilityKernel); 1518 1519 DecorationParams[DecorationRelaxedPrecision].caps.push_back(CapabilityShader); 1520 DecorationParams[DecorationBlock].caps.push_back(CapabilityShader); 1521 DecorationParams[DecorationBufferBlock].caps.push_back(CapabilityShader); 1522 DecorationParams[DecorationRowMajor].caps.push_back(CapabilityMatrix); 1523 DecorationParams[DecorationColMajor].caps.push_back(CapabilityMatrix); 1524 DecorationParams[DecorationGLSLShared].caps.push_back(CapabilityShader); 1525 DecorationParams[DecorationGLSLPacked].caps.push_back(CapabilityShader); 1526 DecorationParams[DecorationNoPerspective].caps.push_back(CapabilityShader); 1527 DecorationParams[DecorationFlat].caps.push_back(CapabilityShader); 1528 DecorationParams[DecorationPatch].caps.push_back(CapabilityTessellation); 1529 DecorationParams[DecorationCentroid].caps.push_back(CapabilityShader); 1530 DecorationParams[DecorationSample].caps.push_back(CapabilitySampleRateShading); 1531 DecorationParams[DecorationInvariant].caps.push_back(CapabilityShader); 1532 DecorationParams[DecorationConstant].caps.push_back(CapabilityKernel); 1533 DecorationParams[DecorationUniform].caps.push_back(CapabilityShader); 1534 DecorationParams[DecorationCPacked].caps.push_back(CapabilityKernel); 1535 DecorationParams[DecorationSaturatedConversion].caps.push_back(CapabilityKernel); 1536 DecorationParams[DecorationStream].caps.push_back(CapabilityGeometryStreams); 1537 DecorationParams[DecorationLocation].caps.push_back(CapabilityShader); 1538 DecorationParams[DecorationComponent].caps.push_back(CapabilityShader); 1539 DecorationParams[DecorationOffset].caps.push_back(CapabilityShader); 1540 DecorationParams[DecorationIndex].caps.push_back(CapabilityShader); 1541 DecorationParams[DecorationBinding].caps.push_back(CapabilityShader); 1542 DecorationParams[DecorationDescriptorSet].caps.push_back(CapabilityShader); 1543 DecorationParams[DecorationXfbBuffer].caps.push_back(CapabilityTransformFeedback); 1544 DecorationParams[DecorationXfbStride].caps.push_back(CapabilityTransformFeedback); 1545 DecorationParams[DecorationArrayStride].caps.push_back(CapabilityShader); 1546 DecorationParams[DecorationMatrixStride].caps.push_back(CapabilityMatrix); 1547 DecorationParams[DecorationFuncParamAttr].caps.push_back(CapabilityKernel); 1548 DecorationParams[DecorationFPRoundingMode].caps.push_back(CapabilityKernel); 1549 DecorationParams[DecorationFPFastMathMode].caps.push_back(CapabilityKernel); 1550 DecorationParams[DecorationLinkageAttributes].caps.push_back(CapabilityLinkage); 1551 DecorationParams[DecorationSpecId].caps.push_back(CapabilityShader); 1552 DecorationParams[DecorationNoContraction].caps.push_back(CapabilityShader); 1553 DecorationParams[DecorationInputAttachmentIndex].caps.push_back(CapabilityInputAttachment); 1554 DecorationParams[DecorationAlignment].caps.push_back(CapabilityKernel); 1555 1556 BuiltInParams[BuiltInPosition].caps.push_back(CapabilityShader); 1557 BuiltInParams[BuiltInPointSize].caps.push_back(CapabilityShader); 1558 BuiltInParams[BuiltInClipDistance].caps.push_back(CapabilityClipDistance); 1559 BuiltInParams[BuiltInCullDistance].caps.push_back(CapabilityCullDistance); 1560 1561 BuiltInParams[BuiltInVertexId].caps.push_back(CapabilityShader); 1562 BuiltInParams[BuiltInVertexId].desc = "Vertex ID, which takes on values 0, 1, 2, . . . ."; 1563 1564 BuiltInParams[BuiltInInstanceId].caps.push_back(CapabilityShader); 1565 BuiltInParams[BuiltInInstanceId].desc = "Instance ID, which takes on values 0, 1, 2, . . . ."; 1566 1567 BuiltInParams[BuiltInVertexIndex].caps.push_back(CapabilityShader); 1568 BuiltInParams[BuiltInVertexIndex].desc = "Vertex index, which takes on values base, base+1, base+2, . . . ."; 1569 1570 BuiltInParams[BuiltInInstanceIndex].caps.push_back(CapabilityShader); 1571 BuiltInParams[BuiltInInstanceIndex].desc = "Instance index, which takes on values base, base+1, base+2, . . . ."; 1572 1573 BuiltInParams[BuiltInPrimitiveId].caps.push_back(CapabilityGeometry); 1574 BuiltInParams[BuiltInPrimitiveId].caps.push_back(CapabilityTessellation); 1575 BuiltInParams[BuiltInInvocationId].caps.push_back(CapabilityGeometry); 1576 BuiltInParams[BuiltInInvocationId].caps.push_back(CapabilityTessellation); 1577 BuiltInParams[BuiltInLayer].caps.push_back(CapabilityGeometry); 1578 BuiltInParams[BuiltInViewportIndex].caps.push_back(CapabilityMultiViewport); 1579 BuiltInParams[BuiltInTessLevelOuter].caps.push_back(CapabilityTessellation); 1580 BuiltInParams[BuiltInTessLevelInner].caps.push_back(CapabilityTessellation); 1581 BuiltInParams[BuiltInTessCoord].caps.push_back(CapabilityTessellation); 1582 BuiltInParams[BuiltInPatchVertices].caps.push_back(CapabilityTessellation); 1583 BuiltInParams[BuiltInFragCoord].caps.push_back(CapabilityShader); 1584 BuiltInParams[BuiltInPointCoord].caps.push_back(CapabilityShader); 1585 BuiltInParams[BuiltInFrontFacing].caps.push_back(CapabilityShader); 1586 BuiltInParams[BuiltInSampleId].caps.push_back(CapabilitySampleRateShading); 1587 BuiltInParams[BuiltInSamplePosition].caps.push_back(CapabilitySampleRateShading); 1588 BuiltInParams[BuiltInSampleMask].caps.push_back(CapabilitySampleRateShading); 1589 BuiltInParams[BuiltInFragDepth].caps.push_back(CapabilityShader); 1590 BuiltInParams[BuiltInHelperInvocation].caps.push_back(CapabilityShader); 1591 BuiltInParams[BuiltInWorkDim].caps.push_back(CapabilityKernel); 1592 BuiltInParams[BuiltInGlobalSize].caps.push_back(CapabilityKernel); 1593 BuiltInParams[BuiltInEnqueuedWorkgroupSize].caps.push_back(CapabilityKernel); 1594 BuiltInParams[BuiltInGlobalOffset].caps.push_back(CapabilityKernel); 1595 BuiltInParams[BuiltInGlobalLinearId].caps.push_back(CapabilityKernel); 1596 1597 BuiltInParams[BuiltInSubgroupSize].caps.push_back(CapabilityKernel); 1598 BuiltInParams[BuiltInSubgroupMaxSize].caps.push_back(CapabilityKernel); 1599 BuiltInParams[BuiltInNumSubgroups].caps.push_back(CapabilityKernel); 1600 BuiltInParams[BuiltInNumEnqueuedSubgroups].caps.push_back(CapabilityKernel); 1601 BuiltInParams[BuiltInSubgroupId].caps.push_back(CapabilityKernel); 1602 BuiltInParams[BuiltInSubgroupLocalInvocationId].caps.push_back(CapabilityKernel); 1603 1604 DimensionalityParams[Dim1D].caps.push_back(CapabilitySampled1D); 1605 DimensionalityParams[DimCube].caps.push_back(CapabilityShader); 1606 DimensionalityParams[DimRect].caps.push_back(CapabilitySampledRect); 1607 DimensionalityParams[DimBuffer].caps.push_back(CapabilitySampledBuffer); 1608 DimensionalityParams[DimSubpassData].caps.push_back(CapabilityInputAttachment); 1609 1610 // Group Operations 1611 for (int i = 0; i < GroupOperationCeiling; ++i) { 1612 GroupOperationParams[i].caps.push_back(CapabilityKernel); 1613 } 1614 1615 // Enqueue flags 1616 for (int i = 0; i < KernelEnqueueFlagsCeiling; ++i) { 1617 KernelEnqueueFlagsParams[i].caps.push_back(CapabilityKernel); 1618 } 1619 1620 // Profiling info 1621 KernelProfilingInfoParams[0].caps.push_back(CapabilityKernel); 1622 1623 // set name of operator, an initial set of <id> style operands, and the description 1624 1625 InstructionDesc[OpSource].operands.push(OperandSource, ""); 1626 InstructionDesc[OpSource].operands.push(OperandLiteralNumber, "'Version'"); 1627 InstructionDesc[OpSource].operands.push(OperandId, "'File'", true); 1628 InstructionDesc[OpSource].operands.push(OperandLiteralString, "'Source'", true); 1629 1630 InstructionDesc[OpSourceContinued].operands.push(OperandLiteralString, "'Continued Source'"); 1631 1632 InstructionDesc[OpSourceExtension].operands.push(OperandLiteralString, "'Extension'"); 1633 1634 InstructionDesc[OpName].operands.push(OperandId, "'Target'"); 1635 InstructionDesc[OpName].operands.push(OperandLiteralString, "'Name'"); 1636 1637 InstructionDesc[OpMemberName].operands.push(OperandId, "'Type'"); 1638 InstructionDesc[OpMemberName].operands.push(OperandLiteralNumber, "'Member'"); 1639 InstructionDesc[OpMemberName].operands.push(OperandLiteralString, "'Name'"); 1640 1641 InstructionDesc[OpString].operands.push(OperandLiteralString, "'String'"); 1642 1643 InstructionDesc[OpLine].operands.push(OperandId, "'File'"); 1644 InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Line'"); 1645 InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Column'"); 1646 1647 InstructionDesc[OpExtension].operands.push(OperandLiteralString, "'Name'"); 1648 1649 InstructionDesc[OpExtInstImport].operands.push(OperandLiteralString, "'Name'"); 1650 1651 InstructionDesc[OpCapability].operands.push(OperandCapability, "'Capability'"); 1652 1653 InstructionDesc[OpMemoryModel].operands.push(OperandAddressing, ""); 1654 InstructionDesc[OpMemoryModel].operands.push(OperandMemory, ""); 1655 1656 InstructionDesc[OpEntryPoint].operands.push(OperandExecutionModel, ""); 1657 InstructionDesc[OpEntryPoint].operands.push(OperandId, "'Entry Point'"); 1658 InstructionDesc[OpEntryPoint].operands.push(OperandLiteralString, "'Name'"); 1659 InstructionDesc[OpEntryPoint].operands.push(OperandVariableIds, "'Interface'"); 1660 1661 InstructionDesc[OpExecutionMode].operands.push(OperandId, "'Entry Point'"); 1662 InstructionDesc[OpExecutionMode].operands.push(OperandExecutionMode, "'Mode'"); 1663 InstructionDesc[OpExecutionMode].operands.push(OperandOptionalLiteral, "See <<Execution_Mode,Execution Mode>>"); 1664 1665 InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Width'"); 1666 InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Signedness'"); 1667 1668 InstructionDesc[OpTypeFloat].operands.push(OperandLiteralNumber, "'Width'"); 1669 1670 InstructionDesc[OpTypeVector].operands.push(OperandId, "'Component Type'"); 1671 InstructionDesc[OpTypeVector].operands.push(OperandLiteralNumber, "'Component Count'"); 1672 1673 InstructionDesc[OpTypeMatrix].capabilities.push_back(CapabilityMatrix); 1674 InstructionDesc[OpTypeMatrix].operands.push(OperandId, "'Column Type'"); 1675 InstructionDesc[OpTypeMatrix].operands.push(OperandLiteralNumber, "'Column Count'"); 1676 1677 InstructionDesc[OpTypeImage].operands.push(OperandId, "'Sampled Type'"); 1678 InstructionDesc[OpTypeImage].operands.push(OperandDimensionality, ""); 1679 InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Depth'"); 1680 InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Arrayed'"); 1681 InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'MS'"); 1682 InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Sampled'"); 1683 InstructionDesc[OpTypeImage].operands.push(OperandSamplerImageFormat, ""); 1684 InstructionDesc[OpTypeImage].operands.push(OperandAccessQualifier, "", true); 1685 1686 InstructionDesc[OpTypeSampledImage].operands.push(OperandId, "'Image Type'"); 1687 1688 InstructionDesc[OpTypeArray].operands.push(OperandId, "'Element Type'"); 1689 InstructionDesc[OpTypeArray].operands.push(OperandId, "'Length'"); 1690 1691 InstructionDesc[OpTypeRuntimeArray].capabilities.push_back(CapabilityShader); 1692 InstructionDesc[OpTypeRuntimeArray].operands.push(OperandId, "'Element Type'"); 1693 1694 InstructionDesc[OpTypeStruct].operands.push(OperandVariableIds, "'Member 0 type', +\n'member 1 type', +\n..."); 1695 1696 InstructionDesc[OpTypeOpaque].capabilities.push_back(CapabilityKernel); 1697 InstructionDesc[OpTypeOpaque].operands.push(OperandLiteralString, "The name of the opaque type."); 1698 1699 InstructionDesc[OpTypePointer].operands.push(OperandStorage, ""); 1700 InstructionDesc[OpTypePointer].operands.push(OperandId, "'Type'"); 1701 1702 InstructionDesc[OpTypeForwardPointer].capabilities.push_back(CapabilityAddresses); 1703 InstructionDesc[OpTypeForwardPointer].operands.push(OperandId, "'Pointer Type'"); 1704 InstructionDesc[OpTypeForwardPointer].operands.push(OperandStorage, ""); 1705 1706 InstructionDesc[OpTypeEvent].capabilities.push_back(CapabilityKernel); 1707 1708 InstructionDesc[OpTypeDeviceEvent].capabilities.push_back(CapabilityDeviceEnqueue); 1709 1710 InstructionDesc[OpTypeReserveId].capabilities.push_back(CapabilityPipes); 1711 1712 InstructionDesc[OpTypeQueue].capabilities.push_back(CapabilityDeviceEnqueue); 1713 1714 InstructionDesc[OpTypePipe].operands.push(OperandAccessQualifier, "'Qualifier'"); 1715 InstructionDesc[OpTypePipe].capabilities.push_back(CapabilityPipes); 1716 1717 InstructionDesc[OpTypeFunction].operands.push(OperandId, "'Return Type'"); 1718 InstructionDesc[OpTypeFunction].operands.push(OperandVariableIds, "'Parameter 0 Type', +\n'Parameter 1 Type', +\n..."); 1719 1720 InstructionDesc[OpConstant].operands.push(OperandVariableLiterals, "'Value'"); 1721 1722 InstructionDesc[OpConstantComposite].operands.push(OperandVariableIds, "'Constituents'"); 1723 1724 InstructionDesc[OpConstantSampler].capabilities.push_back(CapabilityLiteralSampler); 1725 InstructionDesc[OpConstantSampler].operands.push(OperandSamplerAddressingMode, ""); 1726 InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber, "'Param'"); 1727 InstructionDesc[OpConstantSampler].operands.push(OperandSamplerFilterMode, ""); 1728 1729 InstructionDesc[OpSpecConstant].operands.push(OperandVariableLiterals, "'Value'"); 1730 1731 InstructionDesc[OpSpecConstantComposite].operands.push(OperandVariableIds, "'Constituents'"); 1732 1733 InstructionDesc[OpSpecConstantOp].operands.push(OperandLiteralNumber, "'Opcode'"); 1734 InstructionDesc[OpSpecConstantOp].operands.push(OperandVariableIds, "'Operands'"); 1735 1736 InstructionDesc[OpVariable].operands.push(OperandStorage, ""); 1737 InstructionDesc[OpVariable].operands.push(OperandId, "'Initializer'", true); 1738 1739 InstructionDesc[OpFunction].operands.push(OperandFunction, ""); 1740 InstructionDesc[OpFunction].operands.push(OperandId, "'Function Type'"); 1741 1742 InstructionDesc[OpFunctionCall].operands.push(OperandId, "'Function'"); 1743 InstructionDesc[OpFunctionCall].operands.push(OperandVariableIds, "'Argument 0', +\n'Argument 1', +\n..."); 1744 1745 InstructionDesc[OpExtInst].operands.push(OperandId, "'Set'"); 1746 InstructionDesc[OpExtInst].operands.push(OperandLiteralNumber, "'Instruction'"); 1747 InstructionDesc[OpExtInst].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n..."); 1748 1749 InstructionDesc[OpLoad].operands.push(OperandId, "'Pointer'"); 1750 InstructionDesc[OpLoad].operands.push(OperandMemoryAccess, "", true); 1751 1752 InstructionDesc[OpStore].operands.push(OperandId, "'Pointer'"); 1753 InstructionDesc[OpStore].operands.push(OperandId, "'Object'"); 1754 InstructionDesc[OpStore].operands.push(OperandMemoryAccess, "", true); 1755 1756 InstructionDesc[OpPhi].operands.push(OperandVariableIds, "'Variable, Parent, ...'"); 1757 1758 InstructionDesc[OpDecorate].operands.push(OperandId, "'Target'"); 1759 InstructionDesc[OpDecorate].operands.push(OperandDecoration, ""); 1760 InstructionDesc[OpDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>."); 1761 1762 InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'"); 1763 InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'"); 1764 InstructionDesc[OpMemberDecorate].operands.push(OperandDecoration, ""); 1765 InstructionDesc[OpMemberDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>."); 1766 1767 InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'"); 1768 InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'"); 1769 1770 InstructionDesc[OpGroupMemberDecorate].operands.push(OperandId, "'Decoration Group'"); 1771 InstructionDesc[OpGroupMemberDecorate].operands.push(OperandVariableIdLiteral, "'Targets'"); 1772 1773 InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Vector'"); 1774 InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Index'"); 1775 1776 InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Vector'"); 1777 InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Component'"); 1778 InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Index'"); 1779 1780 InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 1'"); 1781 InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 2'"); 1782 InstructionDesc[OpVectorShuffle].operands.push(OperandVariableLiterals, "'Components'"); 1783 1784 InstructionDesc[OpCompositeConstruct].operands.push(OperandVariableIds, "'Constituents'"); 1785 1786 InstructionDesc[OpCompositeExtract].operands.push(OperandId, "'Composite'"); 1787 InstructionDesc[OpCompositeExtract].operands.push(OperandVariableLiterals, "'Indexes'"); 1788 1789 InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Object'"); 1790 InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Composite'"); 1791 InstructionDesc[OpCompositeInsert].operands.push(OperandVariableLiterals, "'Indexes'"); 1792 1793 InstructionDesc[OpCopyObject].operands.push(OperandId, "'Operand'"); 1794 1795 InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Target'"); 1796 InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Source'"); 1797 InstructionDesc[OpCopyMemory].operands.push(OperandMemoryAccess, "", true); 1798 1799 InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Target'"); 1800 InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Source'"); 1801 InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Size'"); 1802 InstructionDesc[OpCopyMemorySized].operands.push(OperandMemoryAccess, "", true); 1803 1804 InstructionDesc[OpCopyMemorySized].capabilities.push_back(CapabilityAddresses); 1805 1806 InstructionDesc[OpSampledImage].operands.push(OperandId, "'Image'"); 1807 InstructionDesc[OpSampledImage].operands.push(OperandId, "'Sampler'"); 1808 1809 InstructionDesc[OpImage].operands.push(OperandId, "'Sampled Image'"); 1810 1811 InstructionDesc[OpImageRead].operands.push(OperandId, "'Image'"); 1812 InstructionDesc[OpImageRead].operands.push(OperandId, "'Coordinate'"); 1813 InstructionDesc[OpImageRead].operands.push(OperandImageOperands, "", true); 1814 InstructionDesc[OpImageRead].operands.push(OperandVariableIds, "", true); 1815 1816 InstructionDesc[OpImageWrite].operands.push(OperandId, "'Image'"); 1817 InstructionDesc[OpImageWrite].operands.push(OperandId, "'Coordinate'"); 1818 InstructionDesc[OpImageWrite].operands.push(OperandId, "'Texel'"); 1819 InstructionDesc[OpImageWrite].operands.push(OperandImageOperands, "", true); 1820 InstructionDesc[OpImageWrite].operands.push(OperandVariableIds, "", true); 1821 1822 InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Sampled Image'"); 1823 InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Coordinate'"); 1824 InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandImageOperands, "", true); 1825 InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandVariableIds, "", true); 1826 InstructionDesc[OpImageSampleImplicitLod].capabilities.push_back(CapabilityShader); 1827 1828 InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Sampled Image'"); 1829 InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Coordinate'"); 1830 InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandImageOperands, "", true); 1831 InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandVariableIds, "", true); 1832 1833 InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); 1834 InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); 1835 InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); 1836 InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true); 1837 InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true); 1838 InstructionDesc[OpImageSampleDrefImplicitLod].capabilities.push_back(CapabilityShader); 1839 1840 InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); 1841 InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); 1842 InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); 1843 InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true); 1844 InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true); 1845 InstructionDesc[OpImageSampleDrefExplicitLod].capabilities.push_back(CapabilityShader); 1846 1847 InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'"); 1848 InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'"); 1849 InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandImageOperands, "", true); 1850 InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandVariableIds, "", true); 1851 InstructionDesc[OpImageSampleProjImplicitLod].capabilities.push_back(CapabilityShader); 1852 1853 InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'"); 1854 InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'"); 1855 InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandImageOperands, "", true); 1856 InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandVariableIds, "", true); 1857 InstructionDesc[OpImageSampleProjExplicitLod].capabilities.push_back(CapabilityShader); 1858 1859 InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); 1860 InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); 1861 InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); 1862 InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true); 1863 InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true); 1864 InstructionDesc[OpImageSampleProjDrefImplicitLod].capabilities.push_back(CapabilityShader); 1865 1866 InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); 1867 InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); 1868 InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); 1869 InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true); 1870 InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true); 1871 InstructionDesc[OpImageSampleProjDrefExplicitLod].capabilities.push_back(CapabilityShader); 1872 1873 InstructionDesc[OpImageFetch].operands.push(OperandId, "'Image'"); 1874 InstructionDesc[OpImageFetch].operands.push(OperandId, "'Coordinate'"); 1875 InstructionDesc[OpImageFetch].operands.push(OperandImageOperands, "", true); 1876 InstructionDesc[OpImageFetch].operands.push(OperandVariableIds, "", true); 1877 1878 InstructionDesc[OpImageGather].operands.push(OperandId, "'Sampled Image'"); 1879 InstructionDesc[OpImageGather].operands.push(OperandId, "'Coordinate'"); 1880 InstructionDesc[OpImageGather].operands.push(OperandId, "'Component'"); 1881 InstructionDesc[OpImageGather].operands.push(OperandImageOperands, "", true); 1882 InstructionDesc[OpImageGather].operands.push(OperandVariableIds, "", true); 1883 InstructionDesc[OpImageGather].capabilities.push_back(CapabilityShader); 1884 1885 InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Sampled Image'"); 1886 InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Coordinate'"); 1887 InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'D~ref~'"); 1888 InstructionDesc[OpImageDrefGather].operands.push(OperandImageOperands, "", true); 1889 InstructionDesc[OpImageDrefGather].operands.push(OperandVariableIds, "", true); 1890 InstructionDesc[OpImageDrefGather].capabilities.push_back(CapabilityShader); 1891 1892 InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Sampled Image'"); 1893 InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Coordinate'"); 1894 InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandImageOperands, "", true); 1895 InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandVariableIds, "", true); 1896 InstructionDesc[OpImageSparseSampleImplicitLod].capabilities.push_back(CapabilitySparseResidency); 1897 1898 InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Sampled Image'"); 1899 InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Coordinate'"); 1900 InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandImageOperands, "", true); 1901 InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandVariableIds, "", true); 1902 InstructionDesc[OpImageSparseSampleExplicitLod].capabilities.push_back(CapabilitySparseResidency); 1903 1904 InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); 1905 InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); 1906 InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); 1907 InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true); 1908 InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true); 1909 InstructionDesc[OpImageSparseSampleDrefImplicitLod].capabilities.push_back(CapabilitySparseResidency); 1910 1911 InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); 1912 InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); 1913 InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); 1914 InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true); 1915 InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true); 1916 InstructionDesc[OpImageSparseSampleDrefExplicitLod].capabilities.push_back(CapabilitySparseResidency); 1917 1918 InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'"); 1919 InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'"); 1920 InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandImageOperands, "", true); 1921 InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandVariableIds, "", true); 1922 InstructionDesc[OpImageSparseSampleProjImplicitLod].capabilities.push_back(CapabilitySparseResidency); 1923 1924 InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'"); 1925 InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'"); 1926 InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandImageOperands, "", true); 1927 InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandVariableIds, "", true); 1928 InstructionDesc[OpImageSparseSampleProjExplicitLod].capabilities.push_back(CapabilitySparseResidency); 1929 1930 InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); 1931 InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); 1932 InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); 1933 InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true); 1934 InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true); 1935 InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].capabilities.push_back(CapabilitySparseResidency); 1936 1937 InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); 1938 InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); 1939 InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); 1940 InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true); 1941 InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true); 1942 InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].capabilities.push_back(CapabilitySparseResidency); 1943 1944 InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Image'"); 1945 InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Coordinate'"); 1946 InstructionDesc[OpImageSparseFetch].operands.push(OperandImageOperands, "", true); 1947 InstructionDesc[OpImageSparseFetch].operands.push(OperandVariableIds, "", true); 1948 InstructionDesc[OpImageSparseFetch].capabilities.push_back(CapabilitySparseResidency); 1949 1950 InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Sampled Image'"); 1951 InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Coordinate'"); 1952 InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Component'"); 1953 InstructionDesc[OpImageSparseGather].operands.push(OperandImageOperands, "", true); 1954 InstructionDesc[OpImageSparseGather].operands.push(OperandVariableIds, "", true); 1955 InstructionDesc[OpImageSparseGather].capabilities.push_back(CapabilitySparseResidency); 1956 1957 InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Sampled Image'"); 1958 InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Coordinate'"); 1959 InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'D~ref~'"); 1960 InstructionDesc[OpImageSparseDrefGather].operands.push(OperandImageOperands, "", true); 1961 InstructionDesc[OpImageSparseDrefGather].operands.push(OperandVariableIds, "", true); 1962 InstructionDesc[OpImageSparseDrefGather].capabilities.push_back(CapabilitySparseResidency); 1963 1964 InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Image'"); 1965 InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Coordinate'"); 1966 InstructionDesc[OpImageSparseRead].operands.push(OperandImageOperands, "", true); 1967 InstructionDesc[OpImageSparseRead].operands.push(OperandVariableIds, "", true); 1968 InstructionDesc[OpImageSparseRead].capabilities.push_back(CapabilitySparseResidency); 1969 1970 InstructionDesc[OpImageSparseTexelsResident].operands.push(OperandId, "'Resident Code'"); 1971 InstructionDesc[OpImageSparseTexelsResident].capabilities.push_back(CapabilitySparseResidency); 1972 1973 InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Image'"); 1974 InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Level of Detail'"); 1975 InstructionDesc[OpImageQuerySizeLod].capabilities.push_back(CapabilityKernel); 1976 InstructionDesc[OpImageQuerySizeLod].capabilities.push_back(CapabilityImageQuery); 1977 1978 InstructionDesc[OpImageQuerySize].operands.push(OperandId, "'Image'"); 1979 InstructionDesc[OpImageQuerySize].capabilities.push_back(CapabilityKernel); 1980 InstructionDesc[OpImageQuerySize].capabilities.push_back(CapabilityImageQuery); 1981 1982 InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Image'"); 1983 InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Coordinate'"); 1984 InstructionDesc[OpImageQueryLod].capabilities.push_back(CapabilityImageQuery); 1985 1986 InstructionDesc[OpImageQueryLevels].operands.push(OperandId, "'Image'"); 1987 InstructionDesc[OpImageQueryLevels].capabilities.push_back(CapabilityKernel); 1988 InstructionDesc[OpImageQueryLevels].capabilities.push_back(CapabilityImageQuery); 1989 1990 InstructionDesc[OpImageQuerySamples].operands.push(OperandId, "'Image'"); 1991 InstructionDesc[OpImageQuerySamples].capabilities.push_back(CapabilityKernel); 1992 InstructionDesc[OpImageQuerySamples].capabilities.push_back(CapabilityImageQuery); 1993 1994 InstructionDesc[OpImageQueryFormat].operands.push(OperandId, "'Image'"); 1995 InstructionDesc[OpImageQueryFormat].capabilities.push_back(CapabilityKernel); 1996 1997 InstructionDesc[OpImageQueryOrder].operands.push(OperandId, "'Image'"); 1998 InstructionDesc[OpImageQueryOrder].capabilities.push_back(CapabilityKernel); 1999 2000 InstructionDesc[OpAccessChain].operands.push(OperandId, "'Base'"); 2001 InstructionDesc[OpAccessChain].operands.push(OperandVariableIds, "'Indexes'"); 2002 2003 InstructionDesc[OpInBoundsAccessChain].operands.push(OperandId, "'Base'"); 2004 InstructionDesc[OpInBoundsAccessChain].operands.push(OperandVariableIds, "'Indexes'"); 2005 2006 InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Base'"); 2007 InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Element'"); 2008 InstructionDesc[OpPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'"); 2009 InstructionDesc[OpPtrAccessChain].capabilities.push_back(CapabilityAddresses); 2010 2011 InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Base'"); 2012 InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Element'"); 2013 InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'"); 2014 InstructionDesc[OpInBoundsPtrAccessChain].capabilities.push_back(CapabilityAddresses); 2015 2016 InstructionDesc[OpSNegate].operands.push(OperandId, "'Operand'"); 2017 2018 InstructionDesc[OpFNegate].operands.push(OperandId, "'Operand'"); 2019 2020 InstructionDesc[OpNot].operands.push(OperandId, "'Operand'"); 2021 2022 InstructionDesc[OpAny].operands.push(OperandId, "'Vector'"); 2023 2024 InstructionDesc[OpAll].operands.push(OperandId, "'Vector'"); 2025 2026 InstructionDesc[OpConvertFToU].operands.push(OperandId, "'Float Value'"); 2027 2028 InstructionDesc[OpConvertFToS].operands.push(OperandId, "'Float Value'"); 2029 2030 InstructionDesc[OpConvertSToF].operands.push(OperandId, "'Signed Value'"); 2031 2032 InstructionDesc[OpConvertUToF].operands.push(OperandId, "'Unsigned Value'"); 2033 2034 InstructionDesc[OpUConvert].operands.push(OperandId, "'Unsigned Value'"); 2035 2036 InstructionDesc[OpSConvert].operands.push(OperandId, "'Signed Value'"); 2037 2038 InstructionDesc[OpFConvert].operands.push(OperandId, "'Float Value'"); 2039 2040 InstructionDesc[OpSatConvertSToU].operands.push(OperandId, "'Signed Value'"); 2041 InstructionDesc[OpSatConvertSToU].capabilities.push_back(CapabilityKernel); 2042 2043 InstructionDesc[OpSatConvertUToS].operands.push(OperandId, "'Unsigned Value'"); 2044 InstructionDesc[OpSatConvertUToS].capabilities.push_back(CapabilityKernel); 2045 2046 InstructionDesc[OpConvertPtrToU].operands.push(OperandId, "'Pointer'"); 2047 InstructionDesc[OpConvertPtrToU].capabilities.push_back(CapabilityAddresses); 2048 2049 InstructionDesc[OpConvertUToPtr].operands.push(OperandId, "'Integer Value'"); 2050 InstructionDesc[OpConvertUToPtr].capabilities.push_back(CapabilityAddresses); 2051 2052 InstructionDesc[OpPtrCastToGeneric].operands.push(OperandId, "'Pointer'"); 2053 InstructionDesc[OpPtrCastToGeneric].capabilities.push_back(CapabilityKernel); 2054 2055 InstructionDesc[OpGenericCastToPtr].operands.push(OperandId, "'Pointer'"); 2056 InstructionDesc[OpGenericCastToPtr].capabilities.push_back(CapabilityKernel); 2057 2058 InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandId, "'Pointer'"); 2059 InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandStorage, "'Storage'"); 2060 InstructionDesc[OpGenericCastToPtrExplicit].capabilities.push_back(CapabilityKernel); 2061 2062 InstructionDesc[OpGenericPtrMemSemantics].operands.push(OperandId, "'Pointer'"); 2063 InstructionDesc[OpGenericPtrMemSemantics].capabilities.push_back(CapabilityKernel); 2064 2065 InstructionDesc[OpBitcast].operands.push(OperandId, "'Operand'"); 2066 2067 InstructionDesc[OpQuantizeToF16].operands.push(OperandId, "'Value'"); 2068 2069 InstructionDesc[OpTranspose].capabilities.push_back(CapabilityMatrix); 2070 InstructionDesc[OpTranspose].operands.push(OperandId, "'Matrix'"); 2071 2072 InstructionDesc[OpIsNan].operands.push(OperandId, "'x'"); 2073 2074 InstructionDesc[OpIsInf].operands.push(OperandId, "'x'"); 2075 2076 InstructionDesc[OpIsFinite].capabilities.push_back(CapabilityKernel); 2077 InstructionDesc[OpIsFinite].operands.push(OperandId, "'x'"); 2078 2079 InstructionDesc[OpIsNormal].capabilities.push_back(CapabilityKernel); 2080 InstructionDesc[OpIsNormal].operands.push(OperandId, "'x'"); 2081 2082 InstructionDesc[OpSignBitSet].capabilities.push_back(CapabilityKernel); 2083 InstructionDesc[OpSignBitSet].operands.push(OperandId, "'x'"); 2084 2085 InstructionDesc[OpLessOrGreater].capabilities.push_back(CapabilityKernel); 2086 InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'x'"); 2087 InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'y'"); 2088 2089 InstructionDesc[OpOrdered].capabilities.push_back(CapabilityKernel); 2090 InstructionDesc[OpOrdered].operands.push(OperandId, "'x'"); 2091 InstructionDesc[OpOrdered].operands.push(OperandId, "'y'"); 2092 2093 InstructionDesc[OpUnordered].capabilities.push_back(CapabilityKernel); 2094 InstructionDesc[OpUnordered].operands.push(OperandId, "'x'"); 2095 InstructionDesc[OpUnordered].operands.push(OperandId, "'y'"); 2096 2097 InstructionDesc[OpArrayLength].operands.push(OperandId, "'Structure'"); 2098 InstructionDesc[OpArrayLength].operands.push(OperandLiteralNumber, "'Array member'"); 2099 InstructionDesc[OpArrayLength].capabilities.push_back(CapabilityShader); 2100 2101 InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 1'"); 2102 InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 2'"); 2103 2104 InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 1'"); 2105 InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 2'"); 2106 2107 InstructionDesc[OpISub].operands.push(OperandId, "'Operand 1'"); 2108 InstructionDesc[OpISub].operands.push(OperandId, "'Operand 2'"); 2109 2110 InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 1'"); 2111 InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 2'"); 2112 2113 InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 1'"); 2114 InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 2'"); 2115 2116 InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 1'"); 2117 InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 2'"); 2118 2119 InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 1'"); 2120 InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 2'"); 2121 2122 InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 1'"); 2123 InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 2'"); 2124 2125 InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 1'"); 2126 InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 2'"); 2127 2128 InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 1'"); 2129 InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 2'"); 2130 2131 InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 1'"); 2132 InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 2'"); 2133 2134 InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 1'"); 2135 InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 2'"); 2136 2137 InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 1'"); 2138 InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 2'"); 2139 2140 InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 1'"); 2141 InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 2'"); 2142 2143 InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Vector'"); 2144 InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Scalar'"); 2145 2146 InstructionDesc[OpMatrixTimesScalar].capabilities.push_back(CapabilityMatrix); 2147 InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Matrix'"); 2148 InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Scalar'"); 2149 2150 InstructionDesc[OpVectorTimesMatrix].capabilities.push_back(CapabilityMatrix); 2151 InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Vector'"); 2152 InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Matrix'"); 2153 2154 InstructionDesc[OpMatrixTimesVector].capabilities.push_back(CapabilityMatrix); 2155 InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Matrix'"); 2156 InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Vector'"); 2157 2158 InstructionDesc[OpMatrixTimesMatrix].capabilities.push_back(CapabilityMatrix); 2159 InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'LeftMatrix'"); 2160 InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'RightMatrix'"); 2161 2162 InstructionDesc[OpOuterProduct].capabilities.push_back(CapabilityMatrix); 2163 InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 1'"); 2164 InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 2'"); 2165 2166 InstructionDesc[OpDot].operands.push(OperandId, "'Vector 1'"); 2167 InstructionDesc[OpDot].operands.push(OperandId, "'Vector 2'"); 2168 2169 InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 1'"); 2170 InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 2'"); 2171 2172 InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 1'"); 2173 InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 2'"); 2174 2175 InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 1'"); 2176 InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 2'"); 2177 2178 InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 1'"); 2179 InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 2'"); 2180 2181 InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Base'"); 2182 InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Shift'"); 2183 2184 InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Base'"); 2185 InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Shift'"); 2186 2187 InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Base'"); 2188 InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Shift'"); 2189 2190 InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 1'"); 2191 InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 2'"); 2192 2193 InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 1'"); 2194 InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 2'"); 2195 2196 InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 1'"); 2197 InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 2'"); 2198 2199 InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 1'"); 2200 InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 2'"); 2201 2202 InstructionDesc[OpLogicalNot].operands.push(OperandId, "'Operand'"); 2203 2204 InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 1'"); 2205 InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 2'"); 2206 2207 InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 1'"); 2208 InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 2'"); 2209 2210 InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 1'"); 2211 InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 2'"); 2212 2213 InstructionDesc[OpBitFieldInsert].capabilities.push_back(CapabilityShader); 2214 InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Base'"); 2215 InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Insert'"); 2216 InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Offset'"); 2217 InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Count'"); 2218 2219 InstructionDesc[OpBitFieldSExtract].capabilities.push_back(CapabilityShader); 2220 InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Base'"); 2221 InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Offset'"); 2222 InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Count'"); 2223 2224 InstructionDesc[OpBitFieldUExtract].capabilities.push_back(CapabilityShader); 2225 InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Base'"); 2226 InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Offset'"); 2227 InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Count'"); 2228 2229 InstructionDesc[OpBitReverse].capabilities.push_back(CapabilityShader); 2230 InstructionDesc[OpBitReverse].operands.push(OperandId, "'Base'"); 2231 2232 InstructionDesc[OpBitCount].operands.push(OperandId, "'Base'"); 2233 2234 InstructionDesc[OpSelect].operands.push(OperandId, "'Condition'"); 2235 InstructionDesc[OpSelect].operands.push(OperandId, "'Object 1'"); 2236 InstructionDesc[OpSelect].operands.push(OperandId, "'Object 2'"); 2237 2238 InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 1'"); 2239 InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 2'"); 2240 2241 InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 1'"); 2242 InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 2'"); 2243 2244 InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 1'"); 2245 InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 2'"); 2246 2247 InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 1'"); 2248 InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 2'"); 2249 2250 InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 1'"); 2251 InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 2'"); 2252 2253 InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 1'"); 2254 InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 2'"); 2255 2256 InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 1'"); 2257 InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 2'"); 2258 2259 InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 1'"); 2260 InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 2'"); 2261 2262 InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 1'"); 2263 InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 2'"); 2264 2265 InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 1'"); 2266 InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 2'"); 2267 2268 InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 1'"); 2269 InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 2'"); 2270 2271 InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 1'"); 2272 InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 2'"); 2273 2274 InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 1'"); 2275 InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 2'"); 2276 2277 InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 1'"); 2278 InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 2'"); 2279 2280 InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 1'"); 2281 InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 2'"); 2282 2283 InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 1'"); 2284 InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 2'"); 2285 2286 InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 1'"); 2287 InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 2'"); 2288 2289 InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 1'"); 2290 InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 2'"); 2291 2292 InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); 2293 InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); 2294 2295 InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); 2296 InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); 2297 2298 InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); 2299 InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); 2300 2301 InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); 2302 InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); 2303 2304 InstructionDesc[OpDPdx].capabilities.push_back(CapabilityShader); 2305 InstructionDesc[OpDPdx].operands.push(OperandId, "'P'"); 2306 2307 InstructionDesc[OpDPdy].capabilities.push_back(CapabilityShader); 2308 InstructionDesc[OpDPdy].operands.push(OperandId, "'P'"); 2309 2310 InstructionDesc[OpFwidth].capabilities.push_back(CapabilityShader); 2311 InstructionDesc[OpFwidth].operands.push(OperandId, "'P'"); 2312 2313 InstructionDesc[OpDPdxFine].capabilities.push_back(CapabilityDerivativeControl); 2314 InstructionDesc[OpDPdxFine].operands.push(OperandId, "'P'"); 2315 2316 InstructionDesc[OpDPdyFine].capabilities.push_back(CapabilityDerivativeControl); 2317 InstructionDesc[OpDPdyFine].operands.push(OperandId, "'P'"); 2318 2319 InstructionDesc[OpFwidthFine].capabilities.push_back(CapabilityDerivativeControl); 2320 InstructionDesc[OpFwidthFine].operands.push(OperandId, "'P'"); 2321 2322 InstructionDesc[OpDPdxCoarse].capabilities.push_back(CapabilityDerivativeControl); 2323 InstructionDesc[OpDPdxCoarse].operands.push(OperandId, "'P'"); 2324 2325 InstructionDesc[OpDPdyCoarse].capabilities.push_back(CapabilityDerivativeControl); 2326 InstructionDesc[OpDPdyCoarse].operands.push(OperandId, "'P'"); 2327 2328 InstructionDesc[OpFwidthCoarse].capabilities.push_back(CapabilityDerivativeControl); 2329 InstructionDesc[OpFwidthCoarse].operands.push(OperandId, "'P'"); 2330 2331 InstructionDesc[OpEmitVertex].capabilities.push_back(CapabilityGeometry); 2332 2333 InstructionDesc[OpEndPrimitive].capabilities.push_back(CapabilityGeometry); 2334 2335 InstructionDesc[OpEmitStreamVertex].operands.push(OperandId, "'Stream'"); 2336 InstructionDesc[OpEmitStreamVertex].capabilities.push_back(CapabilityGeometryStreams); 2337 2338 InstructionDesc[OpEndStreamPrimitive].operands.push(OperandId, "'Stream'"); 2339 InstructionDesc[OpEndStreamPrimitive].capabilities.push_back(CapabilityGeometryStreams); 2340 2341 InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Execution'"); 2342 InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Memory'"); 2343 InstructionDesc[OpControlBarrier].operands.push(OperandMemorySemantics, "'Semantics'"); 2344 2345 InstructionDesc[OpMemoryBarrier].operands.push(OperandScope, "'Memory'"); 2346 InstructionDesc[OpMemoryBarrier].operands.push(OperandMemorySemantics, "'Semantics'"); 2347 2348 InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Image'"); 2349 InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Coordinate'"); 2350 InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Sample'"); 2351 2352 InstructionDesc[OpAtomicLoad].operands.push(OperandId, "'Pointer'"); 2353 InstructionDesc[OpAtomicLoad].operands.push(OperandScope, "'Scope'"); 2354 InstructionDesc[OpAtomicLoad].operands.push(OperandMemorySemantics, "'Semantics'"); 2355 2356 InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Pointer'"); 2357 InstructionDesc[OpAtomicStore].operands.push(OperandScope, "'Scope'"); 2358 InstructionDesc[OpAtomicStore].operands.push(OperandMemorySemantics, "'Semantics'"); 2359 InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Value'"); 2360 2361 InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Pointer'"); 2362 InstructionDesc[OpAtomicExchange].operands.push(OperandScope, "'Scope'"); 2363 InstructionDesc[OpAtomicExchange].operands.push(OperandMemorySemantics, "'Semantics'"); 2364 InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Value'"); 2365 2366 InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Pointer'"); 2367 InstructionDesc[OpAtomicCompareExchange].operands.push(OperandScope, "'Scope'"); 2368 InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Equal'"); 2369 InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Unequal'"); 2370 InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Value'"); 2371 InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Comparator'"); 2372 2373 InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Pointer'"); 2374 InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandScope, "'Scope'"); 2375 InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Equal'"); 2376 InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Unequal'"); 2377 InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Value'"); 2378 InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Comparator'"); 2379 InstructionDesc[OpAtomicCompareExchangeWeak].capabilities.push_back(CapabilityKernel); 2380 2381 InstructionDesc[OpAtomicIIncrement].operands.push(OperandId, "'Pointer'"); 2382 InstructionDesc[OpAtomicIIncrement].operands.push(OperandScope, "'Scope'"); 2383 InstructionDesc[OpAtomicIIncrement].operands.push(OperandMemorySemantics, "'Semantics'"); 2384 2385 InstructionDesc[OpAtomicIDecrement].operands.push(OperandId, "'Pointer'"); 2386 InstructionDesc[OpAtomicIDecrement].operands.push(OperandScope, "'Scope'"); 2387 InstructionDesc[OpAtomicIDecrement].operands.push(OperandMemorySemantics, "'Semantics'"); 2388 2389 InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Pointer'"); 2390 InstructionDesc[OpAtomicIAdd].operands.push(OperandScope, "'Scope'"); 2391 InstructionDesc[OpAtomicIAdd].operands.push(OperandMemorySemantics, "'Semantics'"); 2392 InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Value'"); 2393 2394 InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Pointer'"); 2395 InstructionDesc[OpAtomicISub].operands.push(OperandScope, "'Scope'"); 2396 InstructionDesc[OpAtomicISub].operands.push(OperandMemorySemantics, "'Semantics'"); 2397 InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Value'"); 2398 2399 InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Pointer'"); 2400 InstructionDesc[OpAtomicUMin].operands.push(OperandScope, "'Scope'"); 2401 InstructionDesc[OpAtomicUMin].operands.push(OperandMemorySemantics, "'Semantics'"); 2402 InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Value'"); 2403 2404 InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Pointer'"); 2405 InstructionDesc[OpAtomicUMax].operands.push(OperandScope, "'Scope'"); 2406 InstructionDesc[OpAtomicUMax].operands.push(OperandMemorySemantics, "'Semantics'"); 2407 InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Value'"); 2408 2409 InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Pointer'"); 2410 InstructionDesc[OpAtomicSMin].operands.push(OperandScope, "'Scope'"); 2411 InstructionDesc[OpAtomicSMin].operands.push(OperandMemorySemantics, "'Semantics'"); 2412 InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Value'"); 2413 2414 InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Pointer'"); 2415 InstructionDesc[OpAtomicSMax].operands.push(OperandScope, "'Scope'"); 2416 InstructionDesc[OpAtomicSMax].operands.push(OperandMemorySemantics, "'Semantics'"); 2417 InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Value'"); 2418 2419 InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Pointer'"); 2420 InstructionDesc[OpAtomicAnd].operands.push(OperandScope, "'Scope'"); 2421 InstructionDesc[OpAtomicAnd].operands.push(OperandMemorySemantics, "'Semantics'"); 2422 InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Value'"); 2423 2424 InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Pointer'"); 2425 InstructionDesc[OpAtomicOr].operands.push(OperandScope, "'Scope'"); 2426 InstructionDesc[OpAtomicOr].operands.push(OperandMemorySemantics, "'Semantics'"); 2427 InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Value'"); 2428 2429 InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Pointer'"); 2430 InstructionDesc[OpAtomicXor].operands.push(OperandScope, "'Scope'"); 2431 InstructionDesc[OpAtomicXor].operands.push(OperandMemorySemantics, "'Semantics'"); 2432 InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Value'"); 2433 2434 InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandId, "'Pointer'"); 2435 InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandScope, "'Scope'"); 2436 InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandMemorySemantics, "'Semantics'"); 2437 InstructionDesc[OpAtomicFlagTestAndSet].capabilities.push_back(CapabilityKernel); 2438 2439 InstructionDesc[OpAtomicFlagClear].operands.push(OperandId, "'Pointer'"); 2440 InstructionDesc[OpAtomicFlagClear].operands.push(OperandScope, "'Scope'"); 2441 InstructionDesc[OpAtomicFlagClear].operands.push(OperandMemorySemantics, "'Semantics'"); 2442 InstructionDesc[OpAtomicFlagClear].capabilities.push_back(CapabilityKernel); 2443 2444 InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Merge Block'"); 2445 InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Continue Target'"); 2446 InstructionDesc[OpLoopMerge].operands.push(OperandLoop, ""); 2447 2448 InstructionDesc[OpSelectionMerge].operands.push(OperandId, "'Merge Block'"); 2449 InstructionDesc[OpSelectionMerge].operands.push(OperandSelect, ""); 2450 2451 InstructionDesc[OpBranch].operands.push(OperandId, "'Target Label'"); 2452 2453 InstructionDesc[OpBranchConditional].operands.push(OperandId, "'Condition'"); 2454 InstructionDesc[OpBranchConditional].operands.push(OperandId, "'True Label'"); 2455 InstructionDesc[OpBranchConditional].operands.push(OperandId, "'False Label'"); 2456 InstructionDesc[OpBranchConditional].operands.push(OperandVariableLiterals, "'Branch weights'"); 2457 2458 InstructionDesc[OpSwitch].operands.push(OperandId, "'Selector'"); 2459 InstructionDesc[OpSwitch].operands.push(OperandId, "'Default'"); 2460 InstructionDesc[OpSwitch].operands.push(OperandVariableLiteralId, "'Target'"); 2461 2462 InstructionDesc[OpKill].capabilities.push_back(CapabilityShader); 2463 2464 InstructionDesc[OpReturnValue].operands.push(OperandId, "'Value'"); 2465 2466 InstructionDesc[OpLifetimeStart].operands.push(OperandId, "'Pointer'"); 2467 InstructionDesc[OpLifetimeStart].operands.push(OperandLiteralNumber, "'Size'"); 2468 InstructionDesc[OpLifetimeStart].capabilities.push_back(CapabilityKernel); 2469 2470 InstructionDesc[OpLifetimeStop].operands.push(OperandId, "'Pointer'"); 2471 InstructionDesc[OpLifetimeStop].operands.push(OperandLiteralNumber, "'Size'"); 2472 InstructionDesc[OpLifetimeStop].capabilities.push_back(CapabilityKernel); 2473 2474 InstructionDesc[OpGroupAsyncCopy].capabilities.push_back(CapabilityKernel); 2475 InstructionDesc[OpGroupAsyncCopy].operands.push(OperandScope, "'Execution'"); 2476 InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Destination'"); 2477 InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Source'"); 2478 InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Num Elements'"); 2479 InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Stride'"); 2480 InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Event'"); 2481 2482 InstructionDesc[OpGroupWaitEvents].capabilities.push_back(CapabilityKernel); 2483 InstructionDesc[OpGroupWaitEvents].operands.push(OperandScope, "'Execution'"); 2484 InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Num Events'"); 2485 InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Events List'"); 2486 2487 InstructionDesc[OpGroupAll].capabilities.push_back(CapabilityGroups); 2488 InstructionDesc[OpGroupAll].operands.push(OperandScope, "'Execution'"); 2489 InstructionDesc[OpGroupAll].operands.push(OperandId, "'Predicate'"); 2490 2491 InstructionDesc[OpGroupAny].capabilities.push_back(CapabilityGroups); 2492 InstructionDesc[OpGroupAny].operands.push(OperandScope, "'Execution'"); 2493 InstructionDesc[OpGroupAny].operands.push(OperandId, "'Predicate'"); 2494 2495 InstructionDesc[OpGroupBroadcast].capabilities.push_back(CapabilityGroups); 2496 InstructionDesc[OpGroupBroadcast].operands.push(OperandScope, "'Execution'"); 2497 InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'Value'"); 2498 InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'LocalId'"); 2499 2500 InstructionDesc[OpGroupIAdd].capabilities.push_back(CapabilityGroups); 2501 InstructionDesc[OpGroupIAdd].operands.push(OperandScope, "'Execution'"); 2502 InstructionDesc[OpGroupIAdd].operands.push(OperandGroupOperation, "'Operation'"); 2503 InstructionDesc[OpGroupIAdd].operands.push(OperandId, "'X'"); 2504 2505 InstructionDesc[OpGroupFAdd].capabilities.push_back(CapabilityGroups); 2506 InstructionDesc[OpGroupFAdd].operands.push(OperandScope, "'Execution'"); 2507 InstructionDesc[OpGroupFAdd].operands.push(OperandGroupOperation, "'Operation'"); 2508 InstructionDesc[OpGroupFAdd].operands.push(OperandId, "'X'"); 2509 2510 InstructionDesc[OpGroupUMin].capabilities.push_back(CapabilityGroups); 2511 InstructionDesc[OpGroupUMin].operands.push(OperandScope, "'Execution'"); 2512 InstructionDesc[OpGroupUMin].operands.push(OperandGroupOperation, "'Operation'"); 2513 InstructionDesc[OpGroupUMin].operands.push(OperandId, "'X'"); 2514 2515 InstructionDesc[OpGroupSMin].capabilities.push_back(CapabilityGroups); 2516 InstructionDesc[OpGroupSMin].operands.push(OperandScope, "'Execution'"); 2517 InstructionDesc[OpGroupSMin].operands.push(OperandGroupOperation, "'Operation'"); 2518 InstructionDesc[OpGroupSMin].operands.push(OperandId, "X"); 2519 2520 InstructionDesc[OpGroupFMin].capabilities.push_back(CapabilityGroups); 2521 InstructionDesc[OpGroupFMin].operands.push(OperandScope, "'Execution'"); 2522 InstructionDesc[OpGroupFMin].operands.push(OperandGroupOperation, "'Operation'"); 2523 InstructionDesc[OpGroupFMin].operands.push(OperandId, "X"); 2524 2525 InstructionDesc[OpGroupUMax].capabilities.push_back(CapabilityGroups); 2526 InstructionDesc[OpGroupUMax].operands.push(OperandScope, "'Execution'"); 2527 InstructionDesc[OpGroupUMax].operands.push(OperandGroupOperation, "'Operation'"); 2528 InstructionDesc[OpGroupUMax].operands.push(OperandId, "X"); 2529 2530 InstructionDesc[OpGroupSMax].capabilities.push_back(CapabilityGroups); 2531 InstructionDesc[OpGroupSMax].operands.push(OperandScope, "'Execution'"); 2532 InstructionDesc[OpGroupSMax].operands.push(OperandGroupOperation, "'Operation'"); 2533 InstructionDesc[OpGroupSMax].operands.push(OperandId, "X"); 2534 2535 InstructionDesc[OpGroupFMax].capabilities.push_back(CapabilityGroups); 2536 InstructionDesc[OpGroupFMax].operands.push(OperandScope, "'Execution'"); 2537 InstructionDesc[OpGroupFMax].operands.push(OperandGroupOperation, "'Operation'"); 2538 InstructionDesc[OpGroupFMax].operands.push(OperandId, "X"); 2539 2540 InstructionDesc[OpReadPipe].capabilities.push_back(CapabilityPipes); 2541 InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pipe'"); 2542 InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pointer'"); 2543 InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Size'"); 2544 InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Alignment'"); 2545 2546 InstructionDesc[OpWritePipe].capabilities.push_back(CapabilityPipes); 2547 InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pipe'"); 2548 InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pointer'"); 2549 InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Size'"); 2550 InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Alignment'"); 2551 2552 InstructionDesc[OpReservedReadPipe].capabilities.push_back(CapabilityPipes); 2553 InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pipe'"); 2554 InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Reserve Id'"); 2555 InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Index'"); 2556 InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pointer'"); 2557 InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Size'"); 2558 InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Alignment'"); 2559 2560 InstructionDesc[OpReservedWritePipe].capabilities.push_back(CapabilityPipes); 2561 InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pipe'"); 2562 InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Reserve Id'"); 2563 InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Index'"); 2564 InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pointer'"); 2565 InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Size'"); 2566 InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Alignment'"); 2567 2568 InstructionDesc[OpReserveReadPipePackets].capabilities.push_back(CapabilityPipes); 2569 InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Pipe'"); 2570 InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Num Packets'"); 2571 InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Size'"); 2572 InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'"); 2573 2574 InstructionDesc[OpReserveWritePipePackets].capabilities.push_back(CapabilityPipes); 2575 InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Pipe'"); 2576 InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Num Packets'"); 2577 InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Size'"); 2578 InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'"); 2579 2580 InstructionDesc[OpCommitReadPipe].capabilities.push_back(CapabilityPipes); 2581 InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Pipe'"); 2582 InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Reserve Id'"); 2583 InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Size'"); 2584 InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Alignment'"); 2585 2586 InstructionDesc[OpCommitWritePipe].capabilities.push_back(CapabilityPipes); 2587 InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Pipe'"); 2588 InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Reserve Id'"); 2589 InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Size'"); 2590 InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Alignment'"); 2591 2592 InstructionDesc[OpIsValidReserveId].capabilities.push_back(CapabilityPipes); 2593 InstructionDesc[OpIsValidReserveId].operands.push(OperandId, "'Reserve Id'"); 2594 2595 InstructionDesc[OpGetNumPipePackets].capabilities.push_back(CapabilityPipes); 2596 InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Pipe'"); 2597 InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Size'"); 2598 InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Alignment'"); 2599 2600 InstructionDesc[OpGetMaxPipePackets].capabilities.push_back(CapabilityPipes); 2601 InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Pipe'"); 2602 InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Size'"); 2603 InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Alignment'"); 2604 2605 InstructionDesc[OpGroupReserveReadPipePackets].capabilities.push_back(CapabilityPipes); 2606 InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandScope, "'Execution'"); 2607 InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Pipe'"); 2608 InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Num Packets'"); 2609 InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Size'"); 2610 InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'"); 2611 2612 InstructionDesc[OpGroupReserveWritePipePackets].capabilities.push_back(CapabilityPipes); 2613 InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandScope, "'Execution'"); 2614 InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Pipe'"); 2615 InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Num Packets'"); 2616 InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Size'"); 2617 InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'"); 2618 2619 InstructionDesc[OpGroupCommitReadPipe].capabilities.push_back(CapabilityPipes); 2620 InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandScope, "'Execution'"); 2621 InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Pipe'"); 2622 InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Reserve Id'"); 2623 InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Size'"); 2624 InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Alignment'"); 2625 2626 InstructionDesc[OpGroupCommitWritePipe].capabilities.push_back(CapabilityPipes); 2627 InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandScope, "'Execution'"); 2628 InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Pipe'"); 2629 InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Reserve Id'"); 2630 InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Size'"); 2631 InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Alignment'"); 2632 2633 InstructionDesc[OpBuildNDRange].capabilities.push_back(CapabilityDeviceEnqueue); 2634 InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkSize'"); 2635 InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'LocalWorkSize'"); 2636 InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkOffset'"); 2637 2638 InstructionDesc[OpGetDefaultQueue].capabilities.push_back(CapabilityDeviceEnqueue); 2639 2640 InstructionDesc[OpCaptureEventProfilingInfo].capabilities.push_back(CapabilityDeviceEnqueue); 2641 2642 InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Event'"); 2643 InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Profiling Info'"); 2644 InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Value'"); 2645 2646 InstructionDesc[OpSetUserEventStatus].capabilities.push_back(CapabilityDeviceEnqueue); 2647 2648 InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Event'"); 2649 InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Status'"); 2650 2651 InstructionDesc[OpIsValidEvent].capabilities.push_back(CapabilityDeviceEnqueue); 2652 InstructionDesc[OpIsValidEvent].operands.push(OperandId, "'Event'"); 2653 2654 InstructionDesc[OpCreateUserEvent].capabilities.push_back(CapabilityDeviceEnqueue); 2655 2656 InstructionDesc[OpRetainEvent].capabilities.push_back(CapabilityDeviceEnqueue); 2657 InstructionDesc[OpRetainEvent].operands.push(OperandId, "'Event'"); 2658 2659 InstructionDesc[OpReleaseEvent].capabilities.push_back(CapabilityDeviceEnqueue); 2660 InstructionDesc[OpReleaseEvent].operands.push(OperandId, "'Event'"); 2661 2662 InstructionDesc[OpGetKernelWorkGroupSize].capabilities.push_back(CapabilityDeviceEnqueue); 2663 InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Invoke'"); 2664 InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param'"); 2665 InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Size'"); 2666 InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Align'"); 2667 2668 InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].capabilities.push_back(CapabilityDeviceEnqueue); 2669 InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Invoke'"); 2670 InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param'"); 2671 InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Size'"); 2672 InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Align'"); 2673 2674 InstructionDesc[OpGetKernelNDrangeSubGroupCount].capabilities.push_back(CapabilityDeviceEnqueue); 2675 InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'ND Range'"); 2676 InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Invoke'"); 2677 InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param'"); 2678 InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Size'"); 2679 InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Align'"); 2680 2681 InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].capabilities.push_back(CapabilityDeviceEnqueue); 2682 InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'ND Range'"); 2683 InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Invoke'"); 2684 InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param'"); 2685 InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Size'"); 2686 InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Align'"); 2687 2688 InstructionDesc[OpEnqueueKernel].capabilities.push_back(CapabilityDeviceEnqueue); 2689 InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Queue'"); 2690 InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Flags'"); 2691 InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'ND Range'"); 2692 InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Num Events'"); 2693 InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Wait Events'"); 2694 InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Ret Event'"); 2695 InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Invoke'"); 2696 InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param'"); 2697 InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Size'"); 2698 InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Align'"); 2699 InstructionDesc[OpEnqueueKernel].operands.push(OperandVariableIds, "'Local Size'"); 2700 2701 InstructionDesc[OpEnqueueMarker].capabilities.push_back(CapabilityDeviceEnqueue); 2702 InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Queue'"); 2703 InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Num Events'"); 2704 InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'"); 2705 InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'"); 2706 } 2707 2708 }; // end spv namespace 2709