@@ -82,13 +82,47 @@ void dxil::createShaderModelMD(Module &M) {
82
82
}
83
83
84
84
void dxil::createDXILVersionMD (Module &M) {
85
- Triple TT (M.getTargetTriple ());
86
- VersionTuple Ver = TT.getOSVersion ();
85
+ Triple TT (Triple::normalize (M.getTargetTriple ()));
86
+ VersionTuple Ver = VersionTuple (1 , 0 );
87
+ switch (TT.getSubArch ()) {
88
+ case Triple::DXILSubArch_v1_0:
89
+ Ver = VersionTuple (1 , 0 );
90
+ break ;
91
+ case Triple::DXILSubArch_v1_1:
92
+ Ver = VersionTuple (1 , 1 );
93
+ break ;
94
+ case Triple::DXILSubArch_v1_2:
95
+ Ver = VersionTuple (1 , 2 );
96
+ break ;
97
+ case Triple::DXILSubArch_v1_3:
98
+ Ver = VersionTuple (1 , 3 );
99
+ break ;
100
+ case Triple::DXILSubArch_v1_4:
101
+ Ver = VersionTuple (1 , 4 );
102
+ break ;
103
+ case Triple::DXILSubArch_v1_5:
104
+ Ver = VersionTuple (1 , 5 );
105
+ break ;
106
+ case Triple::DXILSubArch_v1_6:
107
+ Ver = VersionTuple (1 , 6 );
108
+ break ;
109
+ case Triple::DXILSubArch_v1_7:
110
+ Ver = VersionTuple (1 , 7 );
111
+ break ;
112
+ case Triple::DXILSubArch_v1_8:
113
+ Ver = VersionTuple (1 , 8 );
114
+ break ;
115
+ case Triple::NoSubArch:
116
+ break ;
117
+ default :
118
+ llvm_unreachable (" Unsupported subarch for DXIL generation." );
119
+ break ;
120
+ }
87
121
LLVMContext &Ctx = M.getContext ();
88
122
IRBuilder<> B (Ctx);
89
123
NamedMDNode *Entry = M.getOrInsertNamedMetadata (" dx.version" );
90
124
Metadata *Vals[2 ];
91
- Vals[0 ] = ConstantAsMetadata::get (B.getInt32 (1 ));
125
+ Vals[0 ] = ConstantAsMetadata::get (B.getInt32 (Ver. getMajor () ));
92
126
Vals[1 ] = ConstantAsMetadata::get (B.getInt32 (Ver.getMinor ().value_or (0 )));
93
127
Entry->addOperand (MDNode::get (Ctx, Vals));
94
128
}
0 commit comments