@@ -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 ,
@@ -240,8 +285,8 @@ TEST(DXCFile, PSVResourceIterators) {
240285 MinorVersion: 0
241286 ShaderKind: 14
242287 Size: 6
243- DXILMajorVersion: 0
244- DXILMinorVersion: 1
288+ DXILMajorVersion: 1
289+ DXILMinorVersion: 0
245290 DXILSize: 0
246291...
247292)" ;
@@ -361,8 +406,8 @@ TEST(DXCFile, PSVResourceIterators) {
361406// MinorVersion: 0
362407// ShaderKind: 14
363408// Size: 6
364- // DXILMajorVersion: 0
365- // DXILMinorVersion: 1
409+ // DXILMajorVersion: 1
410+ // DXILMinorVersion: 0
366411// DXILSize: 0
367412// - Name: PSV0
368413// Size: 36
@@ -477,7 +522,7 @@ TEST(DXCFile, MaliciousFiles) {
477522//
478523// --- !dxcontainer
479524// 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,
481526// 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ]
482527// Version:
483528// Major: 1
@@ -491,8 +536,8 @@ TEST(DXCFile, MaliciousFiles) {
491536// MinorVersion: 0
492537// ShaderKind: 14
493538// Size: 6
494- // DXILMajorVersion: 0
495- // DXILMinorVersion: 1
539+ // DXILMajorVersion: 1
540+ // DXILMinorVersion: 0
496541// DXILSize: 0
497542// - Name: PSV0
498543// Size: 100
0 commit comments