[llvm] [ObjectYAML] Avoid comparison of compressed data (PR #202413)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 8 12:02:44 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-directx
Author: Michael Jones (michaelrj-google)
<details>
<summary>Changes</summary>
The result of zlib compression isn't consistent across versions.
Downstream this test was failing due to our version giving slightly
different results. This version passes both upstream and downstream.
Assisted-by: Automated tooling, human reviewed.
---
Full diff: https://github.com/llvm/llvm-project/pull/202413.diff
1 Files Affected:
- (modified) llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp (+44-24)
``````````diff
diff --git a/llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp b/llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp
index 79037cb9fb05a..448eb82c33830 100644
--- a/llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp
+++ b/llvm/unittests/ObjectYAML/DXContainerYAMLTest.cpp
@@ -34,7 +34,7 @@ TEST(DXCFile, ParseEmptyParts) {
// First read a fully explicit yaml with all sizes and offsets provided
ASSERT_TRUE(convert(Storage, R"(--- !dxcontainer
Header:
- Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ]
Version:
Major: 1
@@ -83,7 +83,7 @@ TEST(DXCFile, ParseEmptyParts) {
// should result in the same final output.
ASSERT_TRUE(convert(Storage, R"(--- !dxcontainer
Header:
- Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ]
Version:
Major: 1
@@ -117,7 +117,7 @@ TEST(RootSignature, ParseRootFlags) {
// First read a fully explicit yaml with all sizes and offsets provided
ASSERT_TRUE(convert(Storage, R"(--- !dxcontainer
Header:
- Hash: [ 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, 0x5,
+ Hash: [ 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, 0x5,
0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1 ]
Version:
Major: 1
@@ -157,7 +157,7 @@ TEST(RootSignature, HeaderData) {
// First read a fully explicit yaml with all sizes and offsets provided
ASSERT_TRUE(convert(Storage, R"(--- !dxcontainer
Header:
- Hash: [ 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, 0x5,
+ Hash: [ 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, 0x5,
0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1 ]
Version:
Major: 1
@@ -209,7 +209,7 @@ TEST(RootSignature, ParseRootConstants) {
// First read a fully explicit yaml with all sizes and offsets provided
ASSERT_TRUE(convert(Storage, R"(--- !dxcontainer
Header:
- Hash: [ 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, 0x5,
+ Hash: [ 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, 0x5,
0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1 ]
Version:
Major: 1
@@ -261,7 +261,7 @@ TEST(RootSignature, ParseRootDescriptorsV10) {
// First read a fully explicit yaml with all sizes and offsets provided
ASSERT_TRUE(convert(Storage, R"(--- !dxcontainer
Header:
- Hash: [ 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, 0x5,
+ Hash: [ 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, 0x5,
0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1 ]
Version:
Major: 1
@@ -278,9 +278,9 @@ TEST(RootSignature, ParseRootDescriptorsV10) {
RootParametersOffset: 24
NumStaticSamplers: 0
StaticSamplersOffset: 44
- Parameters:
- - ParameterType: CBV
- ShaderVisibility: Domain
+ Parameters:
+ - ParameterType: CBV
+ ShaderVisibility: Domain
Descriptor:
ShaderRegister: 31
RegisterSpace: 32
@@ -312,7 +312,7 @@ TEST(RootSignature, ParseRootDescriptorsV11) {
// First read a fully explicit yaml with all sizes and offsets provided
ASSERT_TRUE(convert(Storage, R"(--- !dxcontainer
Header:
- Hash: [ 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, 0x5,
+ Hash: [ 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, 0x5,
0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1 ]
Version:
Major: 1
@@ -329,7 +329,7 @@ TEST(RootSignature, ParseRootDescriptorsV11) {
RootParametersOffset: 24
NumStaticSamplers: 0
StaticSamplersOffset: 48
- Parameters:
+ Parameters:
- ParameterType: CBV
ShaderVisibility: Domain
Descriptor:
@@ -364,7 +364,7 @@ TEST(RootSignature, ParseDescriptorTableV10) {
// First read a fully explicit yaml with all sizes and offsets provided
ASSERT_TRUE(convert(Storage, R"(--- !dxcontainer
Header:
- Hash: [ 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, 0x5,
+ Hash: [ 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, 0x5,
0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1 ]
Version:
Major: 1
@@ -381,7 +381,7 @@ TEST(RootSignature, ParseDescriptorTableV10) {
RootParametersOffset: 24
NumStaticSamplers: 0
StaticSamplersOffset: 64
- Parameters:
+ Parameters:
- ParameterType: DescriptorTable
ShaderVisibility: Domain
Table:
@@ -420,7 +420,7 @@ TEST(RootSignature, ParseDescriptorTableV11) {
// First read a fully explicit yaml with all sizes and offsets provided
ASSERT_TRUE(convert(Storage, R"(--- !dxcontainer
Header:
- Hash: [ 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, 0x5,
+ Hash: [ 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F, 0x5,
0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1 ]
Version:
Major: 1
@@ -437,7 +437,7 @@ TEST(RootSignature, ParseDescriptorTableV11) {
RootParametersOffset: 24
NumStaticSamplers: 0
StaticSamplersOffset: 68
- Parameters:
+ Parameters:
- ParameterType: DescriptorTable
ShaderVisibility: Domain
Table:
@@ -477,7 +477,7 @@ TEST(RootSignature, ParseStaticSamplers) {
// First read a fully explicit yaml with all sizes and offsets provided
ASSERT_TRUE(convert(Storage, R"(--- !dxcontainer
Header:
- Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ]
Version:
Major: 1
@@ -494,8 +494,8 @@ TEST(RootSignature, ParseStaticSamplers) {
NumStaticSamplers: 1
StaticSamplersOffset: 24
Parameters: []
- Samplers:
- - Filter: MinLinearMagMipPoint
+ Samplers:
+ - Filter: MinLinearMagMipPoint
AddressU: Wrap
AddressV: Mirror
AddressW: MirrorOnce
@@ -505,7 +505,7 @@ TEST(RootSignature, ParseStaticSamplers) {
BorderColor: TransparentBlack
MinLOD: 4.56
MaxLOD: 8.90
- ShaderRegister: 31
+ ShaderRegister: 31
RegisterSpace: 32
ShaderVisibility: Mesh
AllowInputAssemblerInputLayout: true
@@ -536,7 +536,7 @@ TEST(RootSignature, ParseStaticSamplersV13) {
// First read a fully explicit yaml with all sizes and offsets provided
ASSERT_TRUE(convert(Storage, R"(--- !dxcontainer
Header:
- Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ Hash: [ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ]
Version:
Major: 1
@@ -553,8 +553,8 @@ TEST(RootSignature, ParseStaticSamplersV13) {
NumStaticSamplers: 1
StaticSamplersOffset: 24
Parameters: []
- Samplers:
- - ShaderRegister: 31
+ Samplers:
+ - ShaderRegister: 31
RegisterSpace: 32
ShaderVisibility: All
SAMPLER_FLAG_UINT_BORDER_COLOR: true
@@ -821,6 +821,26 @@ TEST(DXCFile, ParseSRCIPart) {
0x00, 0x66, 0x64, 0x5F, 0x7A, 0x73, 0x2E, 0x74, 0x65, 0x73, 0x74, 0x2E,
0x74, 0x6D, 0x70, 0x2E, 0x64, 0x78, 0x6F, 0x5F, 0x66, 0x64, 0x00, 0x00};
- EXPECT_EQ(Storage.size(), 324u);
- EXPECT_TRUE(memcmp(Buffer, Storage.data(), 324u) == 0);
+ constexpr size_t BufferSize = 324;
+ constexpr size_t ZlibPayloadStart = 192;
+ constexpr size_t ZlibPayloadEnd = 236;
+
+ ASSERT_EQ(Storage.size(), BufferSize);
+ // Compare everything before the zlib-compressed payload
+ EXPECT_EQ(memcmp(Buffer, Storage.data(), ZlibPayloadStart), 0);
+ // Compare everything after the zlib-compressed payload (Args section, etc.)
+ EXPECT_EQ(memcmp(Buffer + ZlibPayloadEnd, Storage.data() + ZlibPayloadEnd,
+ BufferSize - ZlibPayloadEnd),
+ 0);
+
+ // Verify that the zlib-compressed payload successfully decompresses to the
+ // expected content
+ DXContainer C =
+ llvm::cantFail(DXContainer::create(MemoryBufferRef(Storage, "")));
+ const std::optional<mcdxbc::SourceInfo> &SRCI = C.getSourceInfo();
+ ASSERT_TRUE(SRCI.has_value());
+ EXPECT_EQ(SRCI->Contents.Entries.size(), 3u);
+ EXPECT_EQ(SRCI->Contents.Entries[0].FileContent, "smoke_source");
+ EXPECT_EQ(SRCI->Contents.Entries[1].FileContent, "inc2_source");
+ EXPECT_EQ(SRCI->Contents.Entries[2].FileContent, "inc1_source");
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/202413
More information about the llvm-commits
mailing list