From 294d42f8e7beeeb4b7b5a27d4c2d3c854e24f7d7 Mon Sep 17 00:00:00 2001 From: assiduous Date: Mon, 1 Mar 2021 22:21:47 -0800 Subject: RunTimeResourceArray test: added samplers --- .../RunTimeResourceArray.glsl | 5 ++-- .../RunTimeResourceArray.hlsl | 5 ++-- .../src/PipelineResourceSignatureTest.cpp | 28 +++++++++++++--------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.glsl b/Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.glsl index d59beca5..38c2d7ae 100644 --- a/Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.glsl +++ b/Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.glsl @@ -3,7 +3,7 @@ #extension GL_EXT_nonuniform_qualifier : require uniform texture2D g_Textures[]; -uniform sampler g_Sampler; +uniform sampler g_Samplers[]; uniform g_ConstantBuffers { @@ -60,12 +60,13 @@ vec4 VerifyResources(uint index, vec2 coord) StructBuffRefValues[2] = StructBuff_Ref2; uint TexIdx = index % NUM_TEXTURES; + uint SamIdx = index % NUM_SAMPLERS; uint BuffIdx = index % NUM_CONST_BUFFERS; uint FmtBuffIdx = index % NUM_FMT_BUFFERS; uint StructBuffIdx = index % NUM_STRUCT_BUFFERS; vec4 AllCorrect = vec4(1.0, 1.0, 1.0, 1.0); - AllCorrect *= CheckValue(textureLod(sampler2D(g_Textures[nonuniformEXT(TexIdx)], g_Sampler), coord, 0.0), TexRefValues[TexIdx]); + AllCorrect *= CheckValue(textureLod(sampler2D(g_Textures[nonuniformEXT(TexIdx)], g_Samplers[nonuniformEXT(SamIdx)]), coord, 0.0), TexRefValues[TexIdx]); AllCorrect *= CheckValue(g_ConstantBufferInst[nonuniformEXT(BuffIdx)].Data, ConstBuffRefValues[BuffIdx]); AllCorrect *= CheckValue(texelFetch(g_FormattedBuffers[nonuniformEXT(FmtBuffIdx)], 0), FmtBuffRefValues[FmtBuffIdx]); AllCorrect *= CheckValue(g_ConstantBufferInst[nonuniformEXT(StructBuffIdx)].Data, StructBuffRefValues[StructBuffIdx]); diff --git a/Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.hlsl b/Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.hlsl index 36df15a2..5a3d0a39 100644 --- a/Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.hlsl +++ b/Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.hlsl @@ -1,5 +1,5 @@ Texture2D g_Textures[] : register(t0, space1); -SamplerState g_Sampler; +SamplerState g_Samplers[] : register(s4, space27); struct CBData { @@ -58,12 +58,13 @@ float4 VerifyResources(uint index, float2 coord) StructBuffRefValues[2] = StructBuff_Ref2; uint TexIdx = index % NUM_TEXTURES; + uint SamIdx = index % NUM_SAMPLERS; uint ConstBuffIdx = index % NUM_CONST_BUFFERS; uint FmtBuffIdx = index % NUM_FMT_BUFFERS; uint StructBuffIdx = index % NUM_STRUCT_BUFFERS; float4 AllCorrect = float4(1.0, 1.0, 1.0, 1.0); - AllCorrect *= CheckValue(g_Textures[NonUniformResourceIndex(TexIdx)].SampleLevel(g_Sampler, coord, 0.0), TexRefValues[TexIdx]); + AllCorrect *= CheckValue(g_Textures[NonUniformResourceIndex(TexIdx)].SampleLevel(g_Samplers[NonUniformResourceIndex(SamIdx)], coord, 0.0), TexRefValues[TexIdx]); AllCorrect *= CheckValue(g_ConstantBuffers[NonUniformResourceIndex(ConstBuffIdx)].Data, ConstBuffRefValues[ConstBuffIdx]); AllCorrect *= CheckValue(g_FormattedBuffers[NonUniformResourceIndex(FmtBuffIdx)].Load(0), FmtBuffRefValues[FmtBuffIdx]); AllCorrect *= CheckValue(g_StructuredBuffers[NonUniformResourceIndex(StructBuffIdx)][0].Data, StructBuffRefValues[StructBuffIdx]); diff --git a/Tests/DiligentCoreAPITest/src/PipelineResourceSignatureTest.cpp b/Tests/DiligentCoreAPITest/src/PipelineResourceSignatureTest.cpp index b9d13260..65e10c93 100644 --- a/Tests/DiligentCoreAPITest/src/PipelineResourceSignatureTest.cpp +++ b/Tests/DiligentCoreAPITest/src/PipelineResourceSignatureTest.cpp @@ -1580,6 +1580,8 @@ static void TestRunTimeResourceArray(bool IsGLSL, IShaderSourceInputStreamFactor TEXTURE_VIEW_SHADER_RESOURCE // }; + constexpr Uint32 SamArraySize = 3; + constexpr Uint32 ConstBuffArraySize = 7; ReferenceBuffers RefConstBuffers{ ConstBuffArraySize, @@ -1611,29 +1613,31 @@ static void TestRunTimeResourceArray(bool IsGLSL, IShaderSourceInputStreamFactor const PipelineResourceDesc Resources[] = { {SHADER_TYPE_COMPUTE, "g_Textures", TexArraySize, SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE, PIPELINE_RESOURCE_FLAG_RUNTIME_ARRAY}, - {SHADER_TYPE_COMPUTE, "g_Sampler", 1, SHADER_RESOURCE_TYPE_SAMPLER, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE}, + {SHADER_TYPE_COMPUTE, "g_Samplers", SamArraySize, SHADER_RESOURCE_TYPE_SAMPLER, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE, PIPELINE_RESOURCE_FLAG_RUNTIME_ARRAY}, {SHADER_TYPE_COMPUTE, "g_ConstantBuffers", ConstBuffArraySize, SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE, PIPELINE_RESOURCE_FLAG_RUNTIME_ARRAY}, {SHADER_TYPE_COMPUTE, "g_FormattedBuffers", FmtBuffArraySize, SHADER_RESOURCE_TYPE_BUFFER_SRV, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE, PIPELINE_RESOURCE_FLAG_FORMATTED_BUFFER | PIPELINE_RESOURCE_FLAG_RUNTIME_ARRAY}, {SHADER_TYPE_COMPUTE, "g_StructuredBuffers", StructBuffArraySize, SHADER_RESOURCE_TYPE_BUFFER_SRV, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE, PIPELINE_RESOURCE_FLAG_RUNTIME_ARRAY}, {SHADER_TYPE_COMPUTE, "g_OutImage", 1, SHADER_RESOURCE_TYPE_TEXTURE_UAV, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE} // }; - SamplerDesc SamLinearWrapDesc{ - FILTER_TYPE_LINEAR, FILTER_TYPE_LINEAR, FILTER_TYPE_LINEAR, - TEXTURE_ADDRESS_WRAP, TEXTURE_ADDRESS_WRAP, TEXTURE_ADDRESS_WRAP}; - ImmutableSamplerDesc ImmutableSamplers[] = {{SHADER_TYPE_COMPUTE, "g_Sampler", SamLinearWrapDesc}}; - PipelineResourceSignatureDesc Desc; - Desc.Resources = Resources; - Desc.NumResources = _countof(Resources); - Desc.ImmutableSamplers = ImmutableSamplers; - Desc.NumImmutableSamplers = _countof(ImmutableSamplers); - Desc.BindingIndex = 0; + Desc.Resources = Resources; + Desc.NumResources = _countof(Resources); + Desc.BindingIndex = 0; pDevice->CreatePipelineResourceSignature(Desc, &pSignature); ASSERT_NE(pSignature, nullptr); } + SamplerDesc SamLinearWrapDesc{ + FILTER_TYPE_LINEAR, FILTER_TYPE_LINEAR, FILTER_TYPE_LINEAR, + TEXTURE_ADDRESS_WRAP, TEXTURE_ADDRESS_WRAP, TEXTURE_ADDRESS_WRAP}; + RefCntAutoPtr pSampler; + pDevice->CreateSampler(SamLinearWrapDesc, &pSampler); + ASSERT_NE(pSampler, nullptr); + IDeviceObject* ppSamplers[] = {pSampler, pSampler, pSampler}; + static_assert(_countof(ppSamplers) == SamArraySize, "Invalid sampler array size"); + ComputePipelineStateCreateInfo PSOCreateInfo; auto& PSODesc = PSOCreateInfo.PSODesc; @@ -1644,6 +1648,7 @@ static void TestRunTimeResourceArray(bool IsGLSL, IShaderSourceInputStreamFactor ShaderMacroHelper Macros; Macros.AddShaderMacro("NUM_TEXTURES", TexArraySize); + Macros.AddShaderMacro("NUM_SAMPLERS", SamArraySize); Macros.AddShaderMacro("NUM_CONST_BUFFERS", ConstBuffArraySize); Macros.AddShaderMacro("NUM_FMT_BUFFERS", FmtBuffArraySize); Macros.AddShaderMacro("NUM_STRUCT_BUFFERS", StructBuffArraySize); @@ -1697,6 +1702,7 @@ static void TestRunTimeResourceArray(bool IsGLSL, IShaderSourceInputStreamFactor ASSERT_TRUE(pTestingSwapChain); pSRB->GetVariableByName(SHADER_TYPE_COMPUTE, "g_OutImage")->Set(pTestingSwapChain->GetCurrentBackBufferUAV()); pSRB->GetVariableByName(SHADER_TYPE_COMPUTE, "g_Textures")->SetArray(RefTextures.GetViewObjects(0), 0, TexArraySize); + pSRB->GetVariableByName(SHADER_TYPE_COMPUTE, "g_Samplers")->SetArray(ppSamplers, 0, SamArraySize); pSRB->GetVariableByName(SHADER_TYPE_COMPUTE, "g_ConstantBuffers")->SetArray(RefConstBuffers.GetBuffObjects(0), 0, ConstBuffArraySize); pSRB->GetVariableByName(SHADER_TYPE_COMPUTE, "g_FormattedBuffers")->SetArray(RefFmtBuffers.GetViewObjects(0), 0, FmtBuffArraySize); pSRB->GetVariableByName(SHADER_TYPE_COMPUTE, "g_StructuredBuffers")->SetArray(RefStructBuffers.GetViewObjects(0), 0, StructBuffArraySize); -- cgit v1.2.3