summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorassiduous <assiduous@diligentgraphics.com>2021-03-02 06:04:31 +0000
committerassiduous <assiduous@diligentgraphics.com>2021-03-19 00:38:13 +0000
commit7a23e17aedbb0213ee788d3450fb1c01d0a845cd (patch)
treebbeaba0bad8d07aa0c56d236e52d48d99bf3c0e2
parentRunTimeResourceArray: added constant buffers (diff)
downloadDiligentCore-7a23e17aedbb0213ee788d3450fb1c01d0a845cd.tar.gz
DiligentCore-7a23e17aedbb0213ee788d3450fb1c01d0a845cd.zip
RunTimeResourceArray test: added formatted and structured buffers
-rw-r--r--Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.glsl27
-rw-r--r--Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.hlsl30
-rw-r--r--Tests/DiligentCoreAPITest/src/PipelineResourceSignatureTest.cpp28
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<CBData> g_ConstantBuffers[] : register(b10, space5);
+Buffer g_FormattedBuffers[]: register(t15, space7);
+
+struct StructBuffData
+{
+ float4 Data;
+};
+StructuredBuffer<StructBuffData> 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<IPipelineResourceSignature> 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<IShader> 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);