@@ -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 ,
@@ -283,8 +328,8 @@ TEST(DXCFile, PSVResourceIterators) {
283
328
MinorVersion: 0
284
329
ShaderKind: 14
285
330
Size: 6
286
- DXILMajorVersion: 0
287
- DXILMinorVersion: 1
331
+ DXILMajorVersion: 1
332
+ DXILMinorVersion: 0
288
333
DXILSize: 0
289
334
...
290
335
)" ;
@@ -404,8 +449,8 @@ TEST(DXCFile, PSVResourceIterators) {
404
449
// MinorVersion: 0
405
450
// ShaderKind: 14
406
451
// Size: 6
407
- // DXILMajorVersion: 0
408
- // DXILMinorVersion: 1
452
+ // DXILMajorVersion: 1
453
+ // DXILMinorVersion: 0
409
454
// DXILSize: 0
410
455
// - Name: PSV0
411
456
// Size: 36
@@ -520,7 +565,7 @@ TEST(DXCFile, MaliciousFiles) {
520
565
//
521
566
// --- !dxcontainer
522
567
// Header:
523
- // Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
568
+ // Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
524
569
// 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ]
525
570
// Version:
526
571
// Major: 1
@@ -534,8 +579,8 @@ TEST(DXCFile, MaliciousFiles) {
534
579
// MinorVersion: 0
535
580
// ShaderKind: 14
536
581
// Size: 6
537
- // DXILMajorVersion: 0
538
- // DXILMinorVersion: 1
582
+ // DXILMajorVersion: 1
583
+ // DXILMinorVersion: 0
539
584
// DXILSize: 0
540
585
// - Name: PSV0
541
586
// Size: 100
0 commit comments