From 36d040c0e6b5a390a261b7f232c2fdd2171db8cd Mon Sep 17 00:00:00 2001 From: assiduous Date: Sun, 7 Mar 2021 11:21:39 -0800 Subject: Fixed ShaderResourceLayoutTest for non-separable programs --- .../src/ShaderResourceLayoutTest.cpp | 118 ++++++++++++--------- 1 file changed, 70 insertions(+), 48 deletions(-) diff --git a/Tests/DiligentCoreAPITest/src/ShaderResourceLayoutTest.cpp b/Tests/DiligentCoreAPITest/src/ShaderResourceLayoutTest.cpp index 8e0cb995..3004f7d2 100644 --- a/Tests/DiligentCoreAPITest/src/ShaderResourceLayoutTest.cpp +++ b/Tests/DiligentCoreAPITest/src/ShaderResourceLayoutTest.cpp @@ -369,23 +369,31 @@ void ShaderResourceLayoutTest::TestTexturesAndImtblSamplers(bool TestImtblSample ASSERT_NE(pPS, nullptr); - // clang-format off - ShaderResourceVariableDesc Vars[] = + std::vector Vars; + + auto AddVar = [&](const char* Name, SHADER_RESOURCE_VARIABLE_TYPE VarType) // { - {SHADER_TYPE_VERTEX, "g_Tex2D_Static", SHADER_RESOURCE_VARIABLE_TYPE_STATIC}, - {SHADER_TYPE_PIXEL, "g_Tex2D_Static", SHADER_RESOURCE_VARIABLE_TYPE_STATIC}, - {SHADER_TYPE_VERTEX, "g_Tex2D_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE}, - {SHADER_TYPE_PIXEL, "g_Tex2D_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE}, - {SHADER_TYPE_VERTEX, "g_Tex2D_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC}, - {SHADER_TYPE_PIXEL, "g_Tex2D_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC}, - - {SHADER_TYPE_VERTEX, "g_Tex2DArr_Static", SHADER_RESOURCE_VARIABLE_TYPE_STATIC}, - {SHADER_TYPE_PIXEL, "g_Tex2DArr_Static", SHADER_RESOURCE_VARIABLE_TYPE_STATIC}, - {SHADER_TYPE_VERTEX, "g_Tex2DArr_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE}, - {SHADER_TYPE_PIXEL, "g_Tex2DArr_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE}, - {SHADER_TYPE_VERTEX, "g_Tex2DArr_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC}, - {SHADER_TYPE_PIXEL, "g_Tex2DArr_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC} + if (deviceCaps.Features.SeparablePrograms) + { + // Use separate variables for each stage + Vars.emplace_back(SHADER_TYPE_VERTEX, Name, VarType); + Vars.emplace_back(SHADER_TYPE_PIXEL, Name, VarType); + } + else + { + // Use one shared variable + Vars.emplace_back(SHADER_TYPE_VERTEX | SHADER_TYPE_PIXEL, Name, VarType); + } }; + // clang-format off + AddVar("g_Tex2D_Static", SHADER_RESOURCE_VARIABLE_TYPE_STATIC); + AddVar("g_Tex2D_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE); + AddVar("g_Tex2D_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC); + + AddVar("g_Tex2DArr_Static", SHADER_RESOURCE_VARIABLE_TYPE_STATIC); + AddVar("g_Tex2DArr_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE); + AddVar("g_Tex2DArr_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC); + std::vector ImtblSamplers; if (TestImtblSamplers) { @@ -403,8 +411,8 @@ void ShaderResourceLayoutTest::TestTexturesAndImtblSamplers(bool TestImtblSample // clang-format on PipelineResourceLayoutDesc ResourceLayout; - ResourceLayout.Variables = Vars; - ResourceLayout.NumVariables = _countof(Vars); + ResourceLayout.Variables = Vars.data(); + ResourceLayout.NumVariables = static_cast(Vars.size()); ResourceLayout.ImmutableSamplers = ImtblSamplers.data(); ResourceLayout.NumImmutableSamplers = static_cast(ImtblSamplers.size()); @@ -607,28 +615,35 @@ void ShaderResourceLayoutTest::TestStructuredOrFormattedBuffer(bool IsFormatted) ASSERT_NE(pPS, nullptr); - // clang-format off - ShaderResourceVariableDesc Vars[] = + std::vector Vars; + + auto AddVar = [&](const char* Name, SHADER_RESOURCE_VARIABLE_TYPE VarType) // { - {SHADER_TYPE_VERTEX, "g_Buff_Static", SHADER_RESOURCE_VARIABLE_TYPE_STATIC}, - {SHADER_TYPE_PIXEL, "g_Buff_Static", SHADER_RESOURCE_VARIABLE_TYPE_STATIC}, - {SHADER_TYPE_VERTEX, "g_Buff_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE}, - {SHADER_TYPE_PIXEL, "g_Buff_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE}, - {SHADER_TYPE_VERTEX, "g_Buff_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC}, - {SHADER_TYPE_PIXEL, "g_Buff_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC}, - - {SHADER_TYPE_VERTEX, "g_BuffArr_Static", SHADER_RESOURCE_VARIABLE_TYPE_STATIC}, - {SHADER_TYPE_PIXEL, "g_BuffArr_Static", SHADER_RESOURCE_VARIABLE_TYPE_STATIC}, - {SHADER_TYPE_VERTEX, "g_BuffArr_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE}, - {SHADER_TYPE_PIXEL, "g_BuffArr_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE}, - {SHADER_TYPE_VERTEX, "g_BuffArr_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC}, - {SHADER_TYPE_PIXEL, "g_BuffArr_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC} + if (deviceCaps.Features.SeparablePrograms) + { + // Use separate variables for each stage + Vars.emplace_back(SHADER_TYPE_VERTEX, Name, VarType); + Vars.emplace_back(SHADER_TYPE_PIXEL, Name, VarType); + } + else + { + // Use one shared variable + Vars.emplace_back(SHADER_TYPE_VERTEX | SHADER_TYPE_PIXEL, Name, VarType); + } }; + // clang-format off + AddVar("g_Buff_Static", SHADER_RESOURCE_VARIABLE_TYPE_STATIC); + AddVar("g_Buff_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE); + AddVar("g_Buff_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC); + + AddVar("g_BuffArr_Static", SHADER_RESOURCE_VARIABLE_TYPE_STATIC); + AddVar("g_BuffArr_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE); + AddVar("g_BuffArr_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC); // clang-format on PipelineResourceLayoutDesc ResourceLayout; - ResourceLayout.Variables = Vars; - ResourceLayout.NumVariables = _countof(Vars); + ResourceLayout.Variables = Vars.data(); + ResourceLayout.NumVariables = static_cast(Vars.size()); RefCntAutoPtr pPSO; RefCntAutoPtr pSRB; @@ -1139,26 +1154,33 @@ TEST_F(ShaderResourceLayoutTest, ConstantBuffers) ASSERT_NE(pVS, nullptr); ASSERT_NE(pPS, nullptr); + std::vector Vars; - // clang-format off - std::vector Vars = + auto AddVar = [&](const char* Name, SHADER_RESOURCE_VARIABLE_TYPE VarType) // { - {SHADER_TYPE_VERTEX, "UniformBuff_Stat", SHADER_RESOURCE_VARIABLE_TYPE_STATIC}, - {SHADER_TYPE_PIXEL, "UniformBuff_Stat", SHADER_RESOURCE_VARIABLE_TYPE_STATIC}, - {SHADER_TYPE_VERTEX, "UniformBuff_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE}, - {SHADER_TYPE_PIXEL, "UniformBuff_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE}, - {SHADER_TYPE_VERTEX, "UniformBuff_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC}, - {SHADER_TYPE_PIXEL, "UniformBuff_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC} + if (deviceCaps.Features.SeparablePrograms) + { + // Use separate variables for each stage + Vars.emplace_back(SHADER_TYPE_VERTEX, Name, VarType); + Vars.emplace_back(SHADER_TYPE_PIXEL, Name, VarType); + } + else + { + // Use one shared variable + Vars.emplace_back(SHADER_TYPE_VERTEX | SHADER_TYPE_PIXEL, Name, VarType); + } }; + // clang-format off + AddVar("UniformBuff_Stat", SHADER_RESOURCE_VARIABLE_TYPE_STATIC); + AddVar("UniformBuff_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE); + AddVar("UniformBuff_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC); + if (CBArraysSupported) { - Vars.emplace_back(SHADER_TYPE_VERTEX, "UniformBuffArr_Stat", SHADER_RESOURCE_VARIABLE_TYPE_STATIC); - Vars.emplace_back(SHADER_TYPE_PIXEL, "UniformBuffArr_Stat", SHADER_RESOURCE_VARIABLE_TYPE_STATIC); - Vars.emplace_back(SHADER_TYPE_VERTEX, "UniformBuffArr_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE); - Vars.emplace_back(SHADER_TYPE_PIXEL, "UniformBuffArr_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE); - Vars.emplace_back(SHADER_TYPE_VERTEX, "UniformBuffArr_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC); - Vars.emplace_back(SHADER_TYPE_PIXEL, "UniformBuffArr_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC); + AddVar("UniformBuffArr_Stat", SHADER_RESOURCE_VARIABLE_TYPE_STATIC); + AddVar("UniformBuffArr_Mut", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE); + AddVar("UniformBuffArr_Dyn", SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC); }; // clang-format on -- cgit v1.2.3