@@ -126,6 +126,51 @@ TEST(DXCFile, ParseOverlappingParts) {
126126 " Part offset for part 1 begins before the previous part ends" ));
127127}
128128
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+
129174TEST (DXCFile, ParseEmptyParts) {
130175 uint8_t Buffer[] = {
131176 0x44 , 0x58 , 0x42 , 0x43 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
@@ -283,8 +328,8 @@ TEST(DXCFile, PSVResourceIterators) {
283328 MinorVersion: 0
284329 ShaderKind: 14
285330 Size: 6
286- DXILMajorVersion: 0
287- DXILMinorVersion: 1
331+ DXILMajorVersion: 1
332+ DXILMinorVersion: 0
288333 DXILSize: 0
289334...
290335)" ;
@@ -404,8 +449,8 @@ TEST(DXCFile, PSVResourceIterators) {
404449// MinorVersion: 0
405450// ShaderKind: 14
406451// Size: 6
407- // DXILMajorVersion: 0
408- // DXILMinorVersion: 1
452+ // DXILMajorVersion: 1
453+ // DXILMinorVersion: 0
409454// DXILSize: 0
410455// - Name: PSV0
411456// Size: 36
@@ -520,7 +565,7 @@ TEST(DXCFile, MaliciousFiles) {
520565//
521566// --- !dxcontainer
522567// 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,
524569// 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ]
525570// Version:
526571// Major: 1
@@ -534,8 +579,8 @@ TEST(DXCFile, MaliciousFiles) {
534579// MinorVersion: 0
535580// ShaderKind: 14
536581// Size: 6
537- // DXILMajorVersion: 0
538- // DXILMinorVersion: 1
582+ // DXILMajorVersion: 1
583+ // DXILMinorVersion: 0
539584// DXILSize: 0
540585// - Name: PSV0
541586// Size: 100
0 commit comments