@@ -126,6 +126,51 @@ TEST(DXCFile, ParseOverlappingParts) {
126
126
" Part offset for part 1 begins before the previous part ends" ));
127
127
}
128
128
129
+ // This test verify DXILMajorVersion and DXILMinorVersion are correctly parsed.
130
+ // This test is based on the binary output constructed from this yaml.
131
+ // --- !dxcontainer
132
+ // Header:
133
+ // Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
134
+ // 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ]
135
+ // Version:
136
+ // Major: 1
137
+ // Minor: 0
138
+ // PartCount: 1
139
+ // Parts:
140
+ // - Name: DXIL
141
+ // Size: 28
142
+ // Program:
143
+ // MajorVersion: 6
144
+ // MinorVersion: 5
145
+ // ShaderKind: 5
146
+ // Size: 8
147
+ // DXILMajorVersion: 1
148
+ // DXILMinorVersion: 5
149
+ // DXILSize: 4
150
+ // DXIL: [ 0x42, 0x43, 0xC0, 0xDE, ]
151
+ // ...
152
+ TEST (DXCFile, ParseDXILPart) {
153
+ uint8_t Buffer[] = {
154
+ 0x44 , 0x58 , 0x42 , 0x43 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
155
+ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x00 , 0x00 , 0x00 ,
156
+ 0x48 , 0x00 , 0x00 , 0x00 , 0x01 , 0x00 , 0x00 , 0x00 , 0x24 , 0x00 , 0x00 , 0x00 ,
157
+ 0x44 , 0x58 , 0x49 , 0x4c , 0x1c , 0x00 , 0x00 , 0x00 , 0x65 , 0x00 , 0x05 , 0x00 ,
158
+ 0x08 , 0x00 , 0x00 , 0x00 , 0x44 , 0x58 , 0x49 , 0x4c , 0x05 , 0x01 , 0x00 , 0x00 ,
159
+ 0x10 , 0x00 , 0x00 , 0x00 , 0x04 , 0x00 , 0x00 , 0x00 , 0x42 , 0x43 , 0xc0 , 0xde };
160
+ DXContainer C =
161
+ llvm::cantFail (DXContainer::create (getMemoryBuffer<116 >(Buffer)));
162
+ EXPECT_EQ (C.getHeader ().PartCount , 1u );
163
+ const std::optional<object::DXContainer::DXILData> &DXIL = C.getDXIL ();
164
+ EXPECT_TRUE (DXIL.has_value ());
165
+ dxbc::ProgramHeader Header = DXIL->first ;
166
+ EXPECT_EQ (Header.MajorVersion , 6u );
167
+ EXPECT_EQ (Header.MinorVersion , 5u );
168
+ EXPECT_EQ (Header.ShaderKind , 5u );
169
+ EXPECT_EQ (Header.Size , 8u );
170
+ EXPECT_EQ (Header.Bitcode .MajorVersion , 1u );
171
+ EXPECT_EQ (Header.Bitcode .MinorVersion , 5u );
172
+ }
173
+
129
174
TEST (DXCFile, ParseEmptyParts) {
130
175
uint8_t Buffer[] = {
131
176
0x44 , 0x58 , 0x42 , 0x43 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
@@ -240,8 +285,8 @@ TEST(DXCFile, PSVResourceIterators) {
240
285
MinorVersion: 0
241
286
ShaderKind: 14
242
287
Size: 6
243
- DXILMajorVersion: 0
244
- DXILMinorVersion: 1
288
+ DXILMajorVersion: 1
289
+ DXILMinorVersion: 0
245
290
DXILSize: 0
246
291
...
247
292
)" ;
@@ -361,8 +406,8 @@ TEST(DXCFile, PSVResourceIterators) {
361
406
// MinorVersion: 0
362
407
// ShaderKind: 14
363
408
// Size: 6
364
- // DXILMajorVersion: 0
365
- // DXILMinorVersion: 1
409
+ // DXILMajorVersion: 1
410
+ // DXILMinorVersion: 0
366
411
// DXILSize: 0
367
412
// - Name: PSV0
368
413
// Size: 36
@@ -477,7 +522,7 @@ TEST(DXCFile, MaliciousFiles) {
477
522
//
478
523
// --- !dxcontainer
479
524
// Header:
480
- // Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
525
+ // Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
481
526
// 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ]
482
527
// Version:
483
528
// Major: 1
@@ -491,8 +536,8 @@ TEST(DXCFile, MaliciousFiles) {
491
536
// MinorVersion: 0
492
537
// ShaderKind: 14
493
538
// Size: 6
494
- // DXILMajorVersion: 0
495
- // DXILMinorVersion: 1
539
+ // DXILMajorVersion: 1
540
+ // DXILMinorVersion: 0
496
541
// DXILSize: 0
497
542
// - Name: PSV0
498
543
// Size: 100
0 commit comments