From a2ce9b46db1eb4ee73024ad2aade559f4fead8c4 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 6 Oct 2025 17:14:57 +0100 Subject: [PATCH] Add some array-based tests to shader linkage zoo demos --- .../demos/d3d11/d3d11_shader_linkage_zoo.cpp | 40 +++++++++++++-- .../demos/d3d12/d3d12_shader_linkage_zoo.cpp | 50 +++++++++++++++++-- 2 files changed, 84 insertions(+), 6 deletions(-) diff --git a/util/test/demos/d3d11/d3d11_shader_linkage_zoo.cpp b/util/test/demos/d3d11/d3d11_shader_linkage_zoo.cpp index 8532fcaa3..9f07ade39 100644 --- a/util/test/demos/d3d11/d3d11_shader_linkage_zoo.cpp +++ b/util/test/demos/d3d11/d3d11_shader_linkage_zoo.cpp @@ -95,8 +95,8 @@ v2f main(vertin IN, uint vid : SV_VertexID) OUT.pos = float4(IN.pos, 1.0f); )EOSHADER"; - float counterFloat = 0.0f; - uint32_t counterUInt = 0; + float counterFloat = 1.5f; + uint32_t counterUInt = 1; for(size_t i = 0; i < outputs.size(); ++i) { uint32_t count = std::max(1U, outputs[i].arraySize); @@ -113,7 +113,8 @@ v2f main(vertin IN, uint vid : SV_VertexID) { if(k != 0) vs += ", "; - vs += std::to_string(outputs[i].type == VarType::Float ? counterFloat++ : counterUInt++); + vs += outputs[i].type == VarType::Float ? std::to_string(counterFloat++) + : std::to_string(counterUInt++); } vs += ");\n"; } @@ -241,6 +242,39 @@ float4 main(v2f IN) : SV_Target0 tests.push_back(BuildTestCase({{false, VarType::UInt, 1, 2, "TEXCOORD0", true}})); tests.push_back(BuildTestCase({{false, VarType::UInt, 1, 5, "TEXCOORD0", true}})); + // One array with 2 or 3 components + tests.push_back(BuildTestCase({{false, VarType::Float, 2, 5, "TEXCOORD0", true}})); + tests.push_back(BuildTestCase({{false, VarType::Float, 3, 5, "TEXCOORD0", true}})); + tests.push_back(BuildTestCase({{false, VarType::Float, 4, 5, "TEXCOORD0", true}})); + tests.push_back(BuildTestCase({{false, VarType::UInt, 2, 5, "TEXCOORD0", true}})); + tests.push_back(BuildTestCase({{false, VarType::UInt, 3, 5, "TEXCOORD0", true}})); + tests.push_back(BuildTestCase({{false, VarType::UInt, 4, 5, "TEXCOORD0", true}})); + + // degenerate array with 2 or 3 components + tests.push_back(BuildTestCase({{false, VarType::Float, 2, 1, "TEXCOORD0", true}})); + tests.push_back(BuildTestCase({{false, VarType::Float, 3, 1, "TEXCOORD0", true}})); + tests.push_back(BuildTestCase({{false, VarType::Float, 4, 1, "TEXCOORD0", true}})); + tests.push_back(BuildTestCase({{false, VarType::UInt, 2, 1, "TEXCOORD0", true}})); + tests.push_back(BuildTestCase({{false, VarType::UInt, 3, 1, "TEXCOORD0", true}})); + tests.push_back(BuildTestCase({{false, VarType::UInt, 4, 1, "TEXCOORD0", true}})); + + // float2 array with an extra float2 + tests.push_back(BuildTestCase({{false, VarType::Float, 2, 5, "TEXCOORD0", true}, + {false, VarType::Float, 2, 0, "OTHER", true}})); + tests.push_back(BuildTestCase({{false, VarType::UInt, 2, 5, "TEXCOORD0", true}, + {false, VarType::UInt, 2, 0, "OTHER", true}})); + + // float2 degenerate array with an extra float2 + tests.push_back(BuildTestCase({{false, VarType::Float, 2, 1, "TEXCOORD0", true}, + {false, VarType::Float, 2, 0, "OTHER", true}})); + tests.push_back(BuildTestCase({{false, VarType::UInt, 2, 1, "TEXCOORD0", true}, + {false, VarType::UInt, 2, 0, "OTHER", true}})); + + tests.push_back(BuildTestCase({{false, VarType::Float, 2, 1, "A", true}, + {false, VarType::Float, 2, 0, "B", true}, + {false, VarType::Float, 3, 1, "C", true}, + {false, VarType::Float, 1, 0, "D", true}})); + // Multiple semantics that pack together tests.push_back(BuildTestCase({{false, VarType::Float, 2, 0, "TEXCOORD0", true}, {false, VarType::Float, 2, 0, "TEXCOORD1", true}})); diff --git a/util/test/demos/d3d12/d3d12_shader_linkage_zoo.cpp b/util/test/demos/d3d12/d3d12_shader_linkage_zoo.cpp index a40249d62..77b9cca36 100644 --- a/util/test/demos/d3d12/d3d12_shader_linkage_zoo.cpp +++ b/util/test/demos/d3d12/d3d12_shader_linkage_zoo.cpp @@ -95,8 +95,8 @@ v2f main(vertin IN, uint vid : SV_VertexID) OUT.pos = float4(IN.pos, 1.0f); )EOSHADER"; - float counterFloat = 0.0f; - uint32_t counterUInt = 0; + float counterFloat = 1.5f; + uint32_t counterUInt = 3; for(size_t i = 0; i < outputs.size(); ++i) { uint32_t count = std::max(1U, outputs[i].arraySize); @@ -113,7 +113,8 @@ v2f main(vertin IN, uint vid : SV_VertexID) { if(k != 0) vs += ", "; - vs += std::to_string(outputs[i].type == VarType::Float ? counterFloat++ : counterUInt++); + vs += outputs[i].type == VarType::Float ? std::to_string(counterFloat++) + : std::to_string(counterUInt++); } vs += ");\n"; } @@ -230,6 +231,49 @@ float4 main(v2f IN) : SV_Target0 psos.push_back(BuildPSO(sig, {{false, VarType::UInt, 1, 2, "TEXCOORD0", true}}, sm6)); psos.push_back(BuildPSO(sig, {{false, VarType::UInt, 1, 5, "TEXCOORD0", true}}, sm6)); + // One array with 2 or 3 components + psos.push_back(BuildPSO(sig, {{false, VarType::Float, 2, 5, "TEXCOORD0", true}}, sm6)); + psos.push_back(BuildPSO(sig, {{false, VarType::Float, 3, 5, "TEXCOORD0", true}}, sm6)); + psos.push_back(BuildPSO(sig, {{false, VarType::Float, 4, 5, "TEXCOORD0", true}}, sm6)); + psos.push_back(BuildPSO(sig, {{false, VarType::UInt, 2, 5, "TEXCOORD0", true}}, sm6)); + psos.push_back(BuildPSO(sig, {{false, VarType::UInt, 3, 5, "TEXCOORD0", true}}, sm6)); + psos.push_back(BuildPSO(sig, {{false, VarType::UInt, 4, 5, "TEXCOORD0", true}}, sm6)); + + // One array with 2 or 3 components + psos.push_back(BuildPSO(sig, {{false, VarType::Float, 2, 1, "TEXCOORD0", true}}, sm6)); + psos.push_back(BuildPSO(sig, {{false, VarType::Float, 3, 1, "TEXCOORD0", true}}, sm6)); + psos.push_back(BuildPSO(sig, {{false, VarType::Float, 4, 1, "TEXCOORD0", true}}, sm6)); + psos.push_back(BuildPSO(sig, {{false, VarType::UInt, 2, 1, "TEXCOORD0", true}}, sm6)); + psos.push_back(BuildPSO(sig, {{false, VarType::UInt, 3, 1, "TEXCOORD0", true}}, sm6)); + psos.push_back(BuildPSO(sig, {{false, VarType::UInt, 4, 1, "TEXCOORD0", true}}, sm6)); + + psos.push_back(BuildPSO(sig, + {{false, VarType::Float, 2, 5, "TEXCOORD0", true}, + {false, VarType::Float, 2, 0, "OTHER", true}}, + sm6)); + psos.push_back(BuildPSO(sig, + {{false, VarType::UInt, 2, 5, "TEXCOORD0", true}, + {false, VarType::UInt, 2, 0, "OTHER", true}}, + sm6)); + + psos.push_back(BuildPSO(sig, + {{false, VarType::Float, 2, 1, "TEXCOORD0", true}, + {false, VarType::Float, 2, 0, "OTHER", true}}, + sm6)); + psos.push_back(BuildPSO(sig, + {{false, VarType::UInt, 2, 1, "TEXCOORD0", true}, + {false, VarType::UInt, 2, 0, "OTHER", true}}, + sm6)); + + psos.push_back(BuildPSO(sig, + {{false, VarType::Float, 2, 1, "A", true}, + {false, VarType::Float, 2, 0, "B", true}, + {false, VarType::Float, 3, 1, "C", true}, + {false, VarType::Float, 1, 0, "D", true}}, + sm6)); + + psos.back()->SetName(L"foo"); + // Multiple semantics that pack together psos.push_back(BuildPSO(sig, {{false, VarType::Float, 2, 0, "TEXCOORD0", true},