From 7a23e17aedbb0213ee788d3450fb1c01d0a845cd Mon Sep 17 00:00:00 2001 From: assiduous Date: Mon, 1 Mar 2021 22:04:31 -0800 Subject: RunTimeResourceArray test: added formatted and structured buffers --- .../RunTimeResourceArray.glsl | 27 +++++++++++++++++-- .../RunTimeResourceArray.hlsl | 30 +++++++++++++++++++--- .../src/PipelineResourceSignatureTest.cpp | 28 ++++++++++++++++++++ 3 files changed, 80 insertions(+), 5 deletions(-) diff --git a/Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.glsl b/Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.glsl index 8270cee1..d59beca5 100644 --- a/Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.glsl +++ b/Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.glsl @@ -10,6 +10,13 @@ uniform g_ConstantBuffers vec4 Data; }g_ConstantBufferInst[]; +uniform samplerBuffer g_FormattedBuffers[]; + +layout(std140) readonly buffer g_StructuredBuffers +{ + vec4 Data; +}g_StructuredBufferInst[]; + vec4 CheckValue(vec4 Val, vec4 Expected) { return vec4(Val.x == Expected.x ? 1.0 : 0.0, @@ -40,12 +47,28 @@ vec4 VerifyResources(uint index, vec2 coord) ConstBuffRefValues[5] = ConstBuff_Ref5; ConstBuffRefValues[6] = ConstBuff_Ref6; - uint TexIdx = index % NUM_TEXTURES; - uint BuffIdx = index % NUM_CONST_BUFFERS; + float4 FmtBuffRefValues[NUM_FMT_BUFFERS]; + FmtBuffRefValues[0] = FmtBuff_Ref0; + FmtBuffRefValues[1] = FmtBuff_Ref1; + FmtBuffRefValues[2] = FmtBuff_Ref2; + FmtBuffRefValues[3] = FmtBuff_Ref3; + FmtBuffRefValues[4] = FmtBuff_Ref4; + + float4 StructBuffRefValues[NUM_STRUCT_BUFFERS]; + StructBuffRefValues[0] = StructBuff_Ref0; + StructBuffRefValues[1] = StructBuff_Ref1; + StructBuffRefValues[2] = StructBuff_Ref2; + + uint TexIdx = index % NUM_TEXTURES; + 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(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]); return AllCorrect; } diff --git a/Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.hlsl b/Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.hlsl index f23fdfbe..36df15a2 100644 --- a/Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.hlsl +++ b/Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.hlsl @@ -7,6 +7,14 @@ struct CBData }; ConstantBuffer g_ConstantBuffers[] : register(b10, space5); +Buffer g_FormattedBuffers[]: register(t15, space7); + +struct StructBuffData +{ + float4 Data; +}; +StructuredBuffer g_StructuredBuffers[]; + float4 CheckValue(float4 Val, float4 Expected) { return float4(Val.x == Expected.x ? 1.0 : 0.0, @@ -37,12 +45,28 @@ float4 VerifyResources(uint index, float2 coord) ConstBuffRefValues[5] = ConstBuff_Ref5; ConstBuffRefValues[6] = ConstBuff_Ref6; - uint TexIdx = index % NUM_TEXTURES; - uint BuffIdx = index % NUM_CONST_BUFFERS; + float4 FmtBuffRefValues[NUM_FMT_BUFFERS]; + FmtBuffRefValues[0] = FmtBuff_Ref0; + FmtBuffRefValues[1] = FmtBuff_Ref1; + FmtBuffRefValues[2] = FmtBuff_Ref2; + FmtBuffRefValues[3] = FmtBuff_Ref3; + FmtBuffRefValues[4] = FmtBuff_Ref4; + + float4 StructBuffRefValues[NUM_STRUCT_BUFFERS]; + StructBuffRefValues[0] = StructBuff_Ref0; + StructBuffRefValues[1] = StructBuff_Ref1; + StructBuffRefValues[2] = StructBuff_Ref2; + + uint TexIdx = index % NUM_TEXTURES; + 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_ConstantBuffers[NonUniformResourceIndex(BuffIdx)].Data, ConstBuffRefValues[BuffIdx]); + 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]); return AllCorrect; } diff --git a/Tests/DiligentCoreAPITest/src/PipelineResourceSignatureTest.cpp b/Tests/DiligentCoreAPITest/src/PipelineResourceSignatureTest.cpp index 6043faf8..b9d13260 100644 --- a/Tests/DiligentCoreAPITest/src/PipelineResourceSignatureTest.cpp +++ b/Tests/DiligentCoreAPITest/src/PipelineResourceSignatureTest.cpp @@ -1587,6 +1587,24 @@ static void TestRunTimeResourceArray(bool IsGLSL, IShaderSourceInputStreamFactor BIND_UNIFORM_BUFFER // }; + constexpr Uint32 FmtBuffArraySize = 5; + ReferenceBuffers RefFmtBuffers{ + FmtBuffArraySize, + USAGE_DEFAULT, + BIND_SHADER_RESOURCE, + BUFFER_VIEW_SHADER_RESOURCE, + BUFFER_MODE_FORMATTED // + }; + + constexpr Uint32 StructBuffArraySize = 3; + ReferenceBuffers RefStructBuffers{ + StructBuffArraySize, + USAGE_DEFAULT, + BIND_SHADER_RESOURCE, + BUFFER_VIEW_SHADER_RESOURCE, + BUFFER_MODE_STRUCTURED // + }; + RefCntAutoPtr pSignature; { @@ -1595,6 +1613,8 @@ static void TestRunTimeResourceArray(bool IsGLSL, IShaderSourceInputStreamFactor {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_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} // }; @@ -1625,12 +1645,18 @@ static void TestRunTimeResourceArray(bool IsGLSL, IShaderSourceInputStreamFactor Macros.AddShaderMacro("NUM_TEXTURES", TexArraySize); Macros.AddShaderMacro("NUM_CONST_BUFFERS", ConstBuffArraySize); + Macros.AddShaderMacro("NUM_FMT_BUFFERS", FmtBuffArraySize); + Macros.AddShaderMacro("NUM_STRUCT_BUFFERS", StructBuffArraySize); if (IsGLSL) Macros.AddShaderMacro("float4", "vec4"); for (Uint32 i = 0; i < TexArraySize; ++i) Macros.AddShaderMacro((String{"Tex2D_Ref"} + std::to_string(i)).c_str(), RefTextures.GetColor(i)); for (Uint32 i = 0; i < ConstBuffArraySize; ++i) Macros.AddShaderMacro((String{"ConstBuff_Ref"} + std::to_string(i)).c_str(), RefConstBuffers.GetValue(i)); + for (Uint32 i = 0; i < FmtBuffArraySize; ++i) + Macros.AddShaderMacro((String{"FmtBuff_Ref"} + std::to_string(i)).c_str(), RefFmtBuffers.GetValue(i)); + for (Uint32 i = 0; i < StructBuffArraySize; ++i) + Macros.AddShaderMacro((String{"StructBuff_Ref"} + std::to_string(i)).c_str(), RefStructBuffers.GetValue(i)); RefCntAutoPtr pCS; { @@ -1672,6 +1698,8 @@ static void TestRunTimeResourceArray(bool IsGLSL, IShaderSourceInputStreamFactor 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_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); pContext->CommitShaderResources(pSRB, RESOURCE_STATE_TRANSITION_MODE_TRANSITION); pContext->SetPipelineState(pPSO); -- cgit v1.2.3