@@ -521,23 +521,24 @@ class SPIRVAnnotationGeneric : public SPIRVEntryNoIdGeneric {
521
521
SPIRVId Target;
522
522
};
523
523
524
- template <Op OC> class SPIRVAnnotation : public SPIRVAnnotationGeneric {
524
+ class SPIRVAnnotation : public SPIRVAnnotationGeneric {
525
525
public:
526
526
// Complete constructor
527
- SPIRVAnnotation (const SPIRVEntry *TheTarget, unsigned TheWordCount)
527
+ SPIRVAnnotation (Op OC, const SPIRVEntry *TheTarget, unsigned TheWordCount)
528
528
: SPIRVAnnotationGeneric(TheTarget->getModule (), TheWordCount, OC,
529
529
TheTarget->getId()) {}
530
- // Incomplete constructor
531
- SPIRVAnnotation () : SPIRVAnnotationGeneric(OC) {}
530
+ // Incomplete constructors
531
+ SPIRVAnnotation (Op OC) : SPIRVAnnotationGeneric(OC) {}
532
+ SPIRVAnnotation () : SPIRVAnnotationGeneric(OpNop) {}
532
533
};
533
534
534
- class SPIRVEntryPoint : public SPIRVAnnotation <OpEntryPoint> {
535
+ class SPIRVEntryPoint : public SPIRVAnnotation {
535
536
public:
536
537
static const SPIRVWord FixedWC = 4 ;
537
538
SPIRVEntryPoint (SPIRVModule *TheModule, SPIRVExecutionModelKind,
538
539
SPIRVId TheId, const std::string &TheName,
539
540
std::vector<SPIRVId> Variables);
540
- SPIRVEntryPoint () {}
541
+ SPIRVEntryPoint () : SPIRVAnnotation(OpEntryPoint) {}
541
542
542
543
_SPIRV_DCL_ENCDEC
543
544
protected:
@@ -548,12 +549,12 @@ class SPIRVEntryPoint : public SPIRVAnnotation<OpEntryPoint> {
548
549
std::vector<SPIRVId> Variables;
549
550
};
550
551
551
- class SPIRVName : public SPIRVAnnotation <OpName> {
552
+ class SPIRVName : public SPIRVAnnotation {
552
553
public:
553
554
// Complete constructor
554
555
SPIRVName (const SPIRVEntry *TheTarget, const std::string &TheStr);
555
556
// Incomplete constructor
556
- SPIRVName () {}
557
+ SPIRVName () : SPIRVAnnotation(OpName) {}
557
558
558
559
protected:
559
560
_SPIRV_DCL_ENCDEC
@@ -562,18 +563,18 @@ class SPIRVName : public SPIRVAnnotation<OpName> {
562
563
std::string Str;
563
564
};
564
565
565
- class SPIRVMemberName : public SPIRVAnnotation <OpName> {
566
+ class SPIRVMemberName : public SPIRVAnnotation {
566
567
public:
567
568
static const SPIRVWord FixedWC = 3 ;
568
569
// Complete constructor
569
570
SPIRVMemberName (const SPIRVEntry *TheTarget, SPIRVWord TheMemberNumber,
570
571
const std::string &TheStr)
571
- : SPIRVAnnotation(TheTarget, FixedWC + getSizeInWords(TheStr)),
572
+ : SPIRVAnnotation(OpName, TheTarget, FixedWC + getSizeInWords(TheStr)),
572
573
MemberNumber (TheMemberNumber), Str(TheStr) {
573
574
validate ();
574
575
}
575
576
// Incomplete constructor
576
- SPIRVMemberName () : MemberNumber(SPIRVWORD_MAX) {}
577
+ SPIRVMemberName () : SPIRVAnnotation(OpName), MemberNumber(SPIRVWORD_MAX) {}
577
578
578
579
protected:
579
580
_SPIRV_DCL_ENCDEC
@@ -649,31 +650,33 @@ class SPIRVLine : public SPIRVEntry {
649
650
SPIRVWord Column;
650
651
};
651
652
652
- class SPIRVExecutionMode : public SPIRVAnnotation <OpExecutionMode> {
653
+ class SPIRVExecutionMode : public SPIRVAnnotation {
653
654
public:
654
655
// Complete constructor for LocalSize, LocalSizeHint
655
- SPIRVExecutionMode (SPIRVEntry *TheTarget, SPIRVExecutionModeKind TheExecMode,
656
- SPIRVWord X, SPIRVWord Y, SPIRVWord Z)
657
- : SPIRVAnnotation(TheTarget, 6 ), ExecMode(TheExecMode) {
656
+ SPIRVExecutionMode (Op OC, SPIRVEntry *TheTarget,
657
+ SPIRVExecutionModeKind TheExecMode, SPIRVWord X,
658
+ SPIRVWord Y, SPIRVWord Z)
659
+ : SPIRVAnnotation(OC, TheTarget, 6 ), ExecMode(TheExecMode) {
658
660
WordLiterals.push_back (X);
659
661
WordLiterals.push_back (Y);
660
662
WordLiterals.push_back (Z);
661
663
updateModuleVersion ();
662
664
}
663
665
// Complete constructor for VecTypeHint, SubgroupSize, SubgroupsPerWorkgroup
664
- SPIRVExecutionMode (SPIRVEntry *TheTarget, SPIRVExecutionModeKind TheExecMode ,
665
- SPIRVWord Code)
666
- : SPIRVAnnotation(TheTarget, 4 ), ExecMode(TheExecMode) {
666
+ SPIRVExecutionMode (Op OC, SPIRVEntry *TheTarget ,
667
+ SPIRVExecutionModeKind TheExecMode, SPIRVWord Code)
668
+ : SPIRVAnnotation(OC, TheTarget, 4 ), ExecMode(TheExecMode) {
667
669
WordLiterals.push_back (Code);
668
- updateModuleVersion ();
669
670
}
670
671
// Complete constructor for ContractionOff
671
- SPIRVExecutionMode (SPIRVEntry *TheTarget, SPIRVExecutionModeKind TheExecMode)
672
- : SPIRVAnnotation(TheTarget, 3 ), ExecMode(TheExecMode) {
672
+ SPIRVExecutionMode (Op OC, SPIRVEntry *TheTarget,
673
+ SPIRVExecutionModeKind TheExecMode)
674
+ : SPIRVAnnotation(OC, TheTarget, 3 ), ExecMode(TheExecMode) {
673
675
updateModuleVersion ();
674
676
}
675
677
// Incomplete constructor
676
- SPIRVExecutionMode () : ExecMode(ExecutionModeInvocations) {}
678
+ SPIRVExecutionMode ()
679
+ : SPIRVAnnotation(OpExecutionMode), ExecMode(ExecutionModeInvocations) {}
677
680
SPIRVExecutionModeKind getExecutionMode () const { return ExecMode; }
678
681
const std::vector<SPIRVWord> &getLiterals () const { return WordLiterals; }
679
682
SPIRVCapVec getRequiredCapability () const override {
@@ -699,6 +702,28 @@ class SPIRVExecutionMode : public SPIRVAnnotation<OpExecutionMode> {
699
702
std::vector<SPIRVWord> WordLiterals;
700
703
};
701
704
705
+ class SPIRVExecutionModeId : public SPIRVExecutionMode {
706
+ public:
707
+ // Complete constructor for LocalSizeId, LocalSizeHintId
708
+ SPIRVExecutionModeId (SPIRVEntry *TheTarget,
709
+ SPIRVExecutionModeKind TheExecMode, SPIRVWord X,
710
+ SPIRVWord Y, SPIRVWord Z)
711
+ : SPIRVExecutionMode(OpExecutionModeId, TheTarget, TheExecMode, X, Y, Z) {
712
+ updateModuleVersion ();
713
+ }
714
+ // Complete constructor for SubgroupsPerWorkgroupId
715
+ SPIRVExecutionModeId (SPIRVEntry *TheTarget,
716
+ SPIRVExecutionModeKind TheExecMode, SPIRVWord Code)
717
+ : SPIRVExecutionMode(OpExecutionModeId, TheTarget, TheExecMode, Code) {
718
+ updateModuleVersion ();
719
+ }
720
+ // Incomplete constructor
721
+ SPIRVExecutionModeId () : SPIRVExecutionMode() {}
722
+ SPIRVWord getRequiredSPIRVVersion () const override {
723
+ return static_cast <SPIRVWord>(VersionNumber::SPIRV_1_2);
724
+ }
725
+ };
726
+
702
727
class SPIRVComponentExecutionModes {
703
728
typedef std::multimap<SPIRVExecutionModeKind, SPIRVExecutionMode *>
704
729
SPIRVExecutionModeMap;
0 commit comments