summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorassiduous <assiduous@diligentgraphics.com>2021-03-02 06:21:47 +0000
committerassiduous <assiduous@diligentgraphics.com>2021-03-19 00:38:13 +0000
commit294d42f8e7beeeb4b7b5a27d4c2d3c854e24f7d7 (patch)
tree790b7b92a58c9dd4c6fbc9a139225fccc87e19cc
parentRunTimeResourceArray test: added formatted and structured buffers (diff)
downloadDiligentCore-294d42f8e7beeeb4b7b5a27d4c2d3c854e24f7d7.tar.gz
DiligentCore-294d42f8e7beeeb4b7b5a27d4c2d3c854e24f7d7.zip
RunTimeResourceArray test: added samplers
-rw-r--r--Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.glsl5
-rw-r--r--Tests/DiligentCoreAPITest/assets/shaders/PipelineResourceSignature/RunTimeResourceArray.hlsl5
-rw-r--r--Tests/DiligentCoreAPITest/src/PipelineResourceSignatureTest.cpp28
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<ISampler> 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);