summaryrefslogtreecommitdiffstats
path: root/Tests/TestApp/src/TestShaderResourceLayout.cpp
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2018-08-03 09:48:36 +0000
committerEgor Yusov <egor.yusov@gmail.com>2018-08-03 09:48:36 +0000
commit977c2ee0106b34301f09a063b78f2a8a56f4ca4c (patch)
tree3b4c18f126bd0ab14ece00fe2f846bb9dd786ecf /Tests/TestApp/src/TestShaderResourceLayout.cpp
parentUpdated asteroids demo to call FinishFrame on deferred contexts; updated core... (diff)
downloadDiligentEngine-977c2ee0106b34301f09a063b78f2a8a56f4ca4c.tar.gz
DiligentEngine-977c2ee0106b34301f09a063b78f2a8a56f4ca4c.zip
Updated core submodule; added shader variable access tests
Diffstat (limited to 'Tests/TestApp/src/TestShaderResourceLayout.cpp')
-rw-r--r--Tests/TestApp/src/TestShaderResourceLayout.cpp132
1 files changed, 91 insertions, 41 deletions
diff --git a/Tests/TestApp/src/TestShaderResourceLayout.cpp b/Tests/TestApp/src/TestShaderResourceLayout.cpp
index c4aa901..2dc1cc6 100644
--- a/Tests/TestApp/src/TestShaderResourceLayout.cpp
+++ b/Tests/TestApp/src/TestShaderResourceLayout.cpp
@@ -172,53 +172,55 @@ TestShaderResourceLayout::TestShaderResourceLayout( IRenderDevice *pDevice, IDev
RefCntAutoPtr<IResourceMapping> pResMapping;
pDevice->CreateResourceMapping(ResMappingDesc, &pResMapping);
+ ShaderVariableDesc VarDesc[] =
+ {
+ { "g_tex2D_Static", SHADER_VARIABLE_TYPE_STATIC },
+ { "g_tex2D_Mut", SHADER_VARIABLE_TYPE_MUTABLE },
+ { "g_tex2D_Dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
+ { "g_tex2DArr_Static", SHADER_VARIABLE_TYPE_STATIC },
+ { "g_tex2DArr_Mut", SHADER_VARIABLE_TYPE_MUTABLE },
+ { "g_tex2DArr_Dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
+ { "g_sepTex2DArr_static", SHADER_VARIABLE_TYPE_STATIC },
+ { "g_sepTex2D_mut", SHADER_VARIABLE_TYPE_MUTABLE },
+ { "g_sepTex2DArr_mut", SHADER_VARIABLE_TYPE_MUTABLE },
+ { "g_sepTex2D_dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
+ { "g_sepTex2DArr_dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
+ { "g_SamArr_static", SHADER_VARIABLE_TYPE_STATIC},
+ { "g_Sam_mut", SHADER_VARIABLE_TYPE_MUTABLE },
+ { "g_SamArr_mut", SHADER_VARIABLE_TYPE_MUTABLE },
+ { "g_Sam_dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
+ { "g_SamArr_dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
+ { "UniformBuff_Mut", SHADER_VARIABLE_TYPE_MUTABLE },
+ { "UniformBuff_Dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
+ { "UniformBuffArr_Mut", SHADER_VARIABLE_TYPE_MUTABLE },
+ { "UniformBuffArr_Dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
+ { "storageBuff_Mut", SHADER_VARIABLE_TYPE_MUTABLE },
+ { "storageBuff_Dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
+ { "storageBuffArr_Mut", SHADER_VARIABLE_TYPE_MUTABLE },
+ { "storageBuffArr_Dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
+ { "g_tex2DStorageImgArr_Mut", SHADER_VARIABLE_TYPE_MUTABLE },
+ { "g_tex2DStorageImgArr_Dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
+ { "g_tex2DNoResourceTest", SHADER_VARIABLE_TYPE_DYNAMIC },
+ { "g_UniformTexelBuff_mut", SHADER_VARIABLE_TYPE_DYNAMIC },
+ { "g_StorageTexelBuff_mut", SHADER_VARIABLE_TYPE_DYNAMIC }
+ };
+ StaticSamplerDesc StaticSamplers[] =
+ {
+ {"g_tex2D_Static", SamplerDesc{}},
+ {"g_tex2DArr_Mut", SamplerDesc{}},
+ {"g_Sam_static", SamplerDesc{}},
+ {"g_SamArr_mut", SamplerDesc{} },
+ {"g_Sam_dyn", SamplerDesc{} },
+ {"g_tex2DNoStaticSamplerTest", SamplerDesc{} }
+ };
+
RefCntAutoPtr<IShader> pVS;
{
CreationAttrs.Desc.Name = "Shader resource layout test VS";
CreationAttrs.Desc.ShaderType = SHADER_TYPE_VERTEX;
CreationAttrs.SourceLanguage = SHADER_SOURCE_LANGUAGE_GLSL;
CreationAttrs.FilePath = "Shaders\\ShaderResLayoutTestGL.vsh";
- ShaderVariableDesc VarDesc[] =
- {
- { "g_tex2D_Static", SHADER_VARIABLE_TYPE_STATIC },
- { "g_tex2D_Mut", SHADER_VARIABLE_TYPE_MUTABLE },
- { "g_tex2D_Dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
- { "g_tex2DArr_Static", SHADER_VARIABLE_TYPE_STATIC },
- { "g_tex2DArr_Mut", SHADER_VARIABLE_TYPE_MUTABLE },
- { "g_tex2DArr_Dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
- { "g_sepTex2DArr_static", SHADER_VARIABLE_TYPE_STATIC },
- { "g_sepTex2D_mut", SHADER_VARIABLE_TYPE_MUTABLE },
- { "g_sepTex2DArr_mut", SHADER_VARIABLE_TYPE_MUTABLE },
- { "g_sepTex2D_dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
- { "g_sepTex2DArr_dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
- { "g_SamArr_static", SHADER_VARIABLE_TYPE_STATIC},
- { "g_Sam_mut", SHADER_VARIABLE_TYPE_MUTABLE },
- { "g_SamArr_mut", SHADER_VARIABLE_TYPE_MUTABLE },
- { "g_Sam_dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
- { "g_SamArr_dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
- { "UniformBuff_Mut", SHADER_VARIABLE_TYPE_MUTABLE },
- { "UniformBuff_Dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
- { "UniformBuffArr_Mut", SHADER_VARIABLE_TYPE_MUTABLE },
- { "UniformBuffArr_Dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
- { "storageBuff_Mut", SHADER_VARIABLE_TYPE_MUTABLE },
- { "storageBuff_Dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
- { "storageBuffArr_Mut", SHADER_VARIABLE_TYPE_MUTABLE },
- { "storageBuffArr_Dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
- { "g_tex2DStorageImgArr_Mut", SHADER_VARIABLE_TYPE_MUTABLE },
- { "g_tex2DStorageImgArr_Dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
- { "g_tex2DNoResourceTest", SHADER_VARIABLE_TYPE_DYNAMIC },
- { "g_UniformTexelBuff_mut", SHADER_VARIABLE_TYPE_DYNAMIC },
- { "g_StorageTexelBuff_mut", SHADER_VARIABLE_TYPE_DYNAMIC }
- };
- StaticSamplerDesc StaticSamplers[] =
- {
- {"g_tex2D_Static", SamplerDesc{}},
- {"g_tex2DArr_Mut", SamplerDesc{}},
- {"g_Sam_static", SamplerDesc{}},
- {"g_SamArr_mut", SamplerDesc{} },
- {"g_Sam_dyn", SamplerDesc{} },
- {"g_tex2DNoStaticSamplerTest", SamplerDesc{} }
- };
+
CreationAttrs.Desc.VariableDesc = VarDesc;
CreationAttrs.Desc.NumVariables = _countof(VarDesc);
CreationAttrs.Desc.NumStaticSamplers = _countof(StaticSamplers);
@@ -244,6 +246,18 @@ TestShaderResourceLayout::TestShaderResourceLayout( IRenderDevice *pDevice, IDev
pVS->BindResources(pResMapping, BIND_SHADER_RESOURCES_UPDATE_UNRESOLVED | BIND_SHADER_RESOURCES_ALL_RESOLVED);
}
+ {
+ auto NumVSVars = pVS->GetVariableCount();
+ for(Uint32 v=0; v < NumVSVars; ++v)
+ {
+ auto pVar = pVS->GetShaderVariable(v);
+ VERIFY_EXPR(pVar->GetIndex() == v);
+ VERIFY_EXPR(pVar->GetType() == SHADER_VARIABLE_TYPE_STATIC);
+ auto pVar2 = pVS->GetShaderVariable(pVar->GetName());
+ VERIFY_EXPR(pVar == pVar2);
+ }
+ }
+
RefCntAutoPtr<IShader> pPS;
{
CreationAttrs.Desc.Name = "Shader resource layout test FS";
@@ -271,6 +285,18 @@ TestShaderResourceLayout::TestShaderResourceLayout( IRenderDevice *pDevice, IDev
pPS->BindResources(pResMapping, BIND_SHADER_RESOURCES_UPDATE_UNRESOLVED | BIND_SHADER_RESOURCES_ALL_RESOLVED);
}
+ {
+ auto NumPSVars = pPS->GetVariableCount();
+ for(Uint32 v=0; v < NumPSVars; ++v)
+ {
+ auto pVar = pPS->GetShaderVariable(v);
+ VERIFY_EXPR(pVar->GetIndex() == v);
+ VERIFY_EXPR(pVar->GetType() == SHADER_VARIABLE_TYPE_STATIC);
+ auto pVar2 = pPS->GetShaderVariable(pVar->GetName());
+ VERIFY_EXPR(pVar == pVar2);
+ }
+ }
+
PipelineStateDesc PSODesc;
PSODesc.Name = "Shader resource layout test";
PSODesc.GraphicsPipeline.pVS = pVS;
@@ -370,5 +396,29 @@ TestShaderResourceLayout::TestShaderResourceLayout( IRenderDevice *pDevice, IDev
pContext->CommitShaderResources(pSRB, COMMIT_SHADER_RESOURCES_FLAG_TRANSITION_RESOURCES);
pContext->Draw(DrawAttrs);
+ {
+ auto NumVSVars = pSRB->GetVariableCount(SHADER_TYPE_VERTEX);
+ for(Uint32 v=0; v < NumVSVars; ++v)
+ {
+ auto pVar = pSRB->GetVariable(SHADER_TYPE_VERTEX, v);
+ VERIFY_EXPR(pVar->GetIndex() == v);
+ VERIFY_EXPR(pVar->GetType() == SHADER_VARIABLE_TYPE_MUTABLE || pVar->GetType() == SHADER_VARIABLE_TYPE_DYNAMIC);
+ auto pVar2 = pSRB->GetVariable(SHADER_TYPE_VERTEX, pVar->GetName());
+ VERIFY_EXPR(pVar == pVar2);
+ }
+ }
+
+ {
+ auto NumPSVars = pSRB->GetVariableCount(SHADER_TYPE_PIXEL);
+ for(Uint32 v=0; v < NumPSVars; ++v)
+ {
+ auto pVar = pSRB->GetVariable(SHADER_TYPE_PIXEL, v);
+ VERIFY_EXPR(pVar->GetIndex() == v);
+ VERIFY_EXPR(pVar->GetType() == SHADER_VARIABLE_TYPE_MUTABLE || pVar->GetType() == SHADER_VARIABLE_TYPE_DYNAMIC);
+ auto pVar2 = pSRB->GetVariable(SHADER_TYPE_PIXEL, pVar->GetName());
+ VERIFY_EXPR(pVar == pVar2);
+ }
+ }
+
SetStatus(TestResult::Succeeded);
}