summaryrefslogtreecommitdiffstats
path: root/Tests/TestApp/src/TestShaderResourceLayout.cpp
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2018-05-12 22:39:05 +0000
committerEgor Yusov <egor.yusov@gmail.com>2018-05-12 22:39:05 +0000
commitb6d80b428752c99a913691022117248e08ed15a3 (patch)
tree086836332cf9b718a5d2ce546c97410340eb9133 /Tests/TestApp/src/TestShaderResourceLayout.cpp
parentTest app: added shader resource layout initialization test; updated gl shaders (diff)
downloadDiligentEngine-b6d80b428752c99a913691022117248e08ed15a3.tar.gz
DiligentEngine-b6d80b428752c99a913691022117248e08ed15a3.zip
Added shader resource layout test
Diffstat (limited to 'Tests/TestApp/src/TestShaderResourceLayout.cpp')
-rw-r--r--Tests/TestApp/src/TestShaderResourceLayout.cpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/Tests/TestApp/src/TestShaderResourceLayout.cpp b/Tests/TestApp/src/TestShaderResourceLayout.cpp
index d5b7954..ea86989 100644
--- a/Tests/TestApp/src/TestShaderResourceLayout.cpp
+++ b/Tests/TestApp/src/TestShaderResourceLayout.cpp
@@ -39,6 +39,51 @@ TestShaderResourceLayout::TestShaderResourceLayout( IRenderDevice *pDevice, IDev
CreationAttrs.pShaderSourceStreamFactory = &BasicSSSFactory;
CreationAttrs.EntryPoint = "main";
+ RefCntAutoPtr<ITexture> pTex[4];
+ TextureDesc TexDesc;
+ TexDesc.Type = RESOURCE_DIM_TEX_2D;
+ TexDesc.Width = 1024;
+ TexDesc.Height = 1024;
+ TexDesc.Format = TEX_FORMAT_RGBA8_UNORM_SRGB;
+ TexDesc.BindFlags = BIND_SHADER_RESOURCE;
+ IDeviceObject *pSRVs[4];
+ for(int i=0; i < 4; ++i)
+ {
+ pDevice->CreateTexture(TexDesc, TextureData{}, &(pTex[i]));
+ pSRVs[i] = pTex[i]->GetDefaultView(TEXTURE_VIEW_SHADER_RESOURCE);
+ }
+
+
+ TexDesc.BindFlags = BIND_SHADER_RESOURCE | BIND_UNORDERED_ACCESS;
+ RefCntAutoPtr<ITexture> pStorageTex[4];
+ IDeviceObject *pUAVs[4];
+ for (int i = 0; i < 4; ++i)
+ {
+ pDevice->CreateTexture(TexDesc, TextureData{}, &(pStorageTex[i]));
+ pUAVs[i] = pStorageTex[i]->GetDefaultView(TEXTURE_VIEW_UNORDERED_ACCESS);
+ }
+
+
+ BufferDesc BuffDesc;
+ BuffDesc.uiSizeInBytes = 1024;
+ BuffDesc.BindFlags = BIND_UNIFORM_BUFFER;
+ RefCntAutoPtr<IBuffer> pUniformBuffs[4];
+ IDeviceObject *pUBs[4];
+ for (int i = 0; i < 4; ++i)
+ {
+ pDevice->CreateBuffer(BuffDesc, BufferData{}, &(pUniformBuffs[i]));
+ pUBs[i] = pUniformBuffs[i];
+ }
+
+ BuffDesc.BindFlags = BIND_UNORDERED_ACCESS;
+ RefCntAutoPtr<IBuffer> pStorgeBuffs[4];
+ IDeviceObject *pSBs[4];
+ for (int i = 0; i < 4; ++i)
+ {
+ pDevice->CreateBuffer(BuffDesc, BufferData{}, &(pStorgeBuffs[i]));
+ pSBs[i] = pStorgeBuffs[i];
+ }
+
RefCntAutoPtr<IShader> pVS;
if(pDevice->GetDeviceCaps().DevType == DeviceType::Vulkan)
{
@@ -66,11 +111,27 @@ TestShaderResourceLayout::TestShaderResourceLayout( IRenderDevice *pDevice, IDev
{ "g_tex2DStorageImgArr_Dyn", SHADER_VARIABLE_TYPE_DYNAMIC },
{ "g_tex2DNoResourceTest", SHADER_VARIABLE_TYPE_DYNAMIC }
};
+ StaticSamplerDesc StaticSamplers[] =
+ {
+ {"g_tex2D_Static", SamplerDesc{}},
+ {"g_tex2DArr_Mut", SamplerDesc{}},
+ {"g_tex2DNoStaticSamplerTest", SamplerDesc{} }
+ };
CreationAttrs.Desc.VariableDesc = VarDesc;
CreationAttrs.Desc.NumVariables = _countof(VarDesc);
+ CreationAttrs.Desc.NumStaticSamplers = _countof(StaticSamplers);
+ CreationAttrs.Desc.StaticSamplers = StaticSamplers;
pDevice->CreateShader(CreationAttrs, &pVS);
VERIFY_EXPR(pVS);
+
+ pVS->GetShaderVariable("g_tex2D_Static")->Set(pSRVs[0]);
+ pVS->GetShaderVariable("g_tex2DArr_Static")->SetArray(pSRVs, 0, 2);
+ pVS->GetShaderVariable("UniformBuff_Stat")->Set(pUBs[0]);
+ pVS->GetShaderVariable("UniformBuffArr_Stat")->SetArray(pUBs, 0, 2);
+ pVS->GetShaderVariable("storageBuff_Static")->Set(pSBs[0]);
+ pVS->GetShaderVariable("storageBuffArr_Static")->SetArray(pSBs, 0, 2);
+ pVS->GetShaderVariable("g_tex2DStorageImg_Stat")->Set(pUAVs[0]);
}
RefCntAutoPtr<IShader> pPS;
@@ -82,6 +143,13 @@ TestShaderResourceLayout::TestShaderResourceLayout( IRenderDevice *pDevice, IDev
CreationAttrs.FilePath = "Shaders\\ShaderResLayoutTestGL.psh";
pDevice->CreateShader(CreationAttrs, &pPS);
VERIFY_EXPR(pPS);
+
+ pPS->GetShaderVariable("g_tex2D_Static")->Set(pSRVs[0]);
+ pPS->GetShaderVariable("g_tex2DArr_Static")->SetArray(pSRVs, 0, 2);
+ pPS->GetShaderVariable("UniformBuff_Stat")->Set(pUBs[0]);
+ pPS->GetShaderVariable("UniformBuffArr_Stat")->SetArray(pUBs, 0, 2);
+ pPS->GetShaderVariable("storageBuff_Static")->Set(pSBs[0]);
+ pPS->GetShaderVariable("storageBuffArr_Static")->SetArray(pSBs, 0, 2);
}
PipelineStateDesc PSODesc;
@@ -97,5 +165,45 @@ TestShaderResourceLayout::TestShaderResourceLayout( IRenderDevice *pDevice, IDev
pDevice->CreatePipelineState(PSODesc, &pTestPSO);
VERIFY_EXPR(pTestPSO);
+ RefCntAutoPtr<IShaderResourceBinding> pSRB;
+ pTestPSO->CreateShaderResourceBinding(&pSRB);
+
+ pSRB->GetVariable(SHADER_TYPE_VERTEX, "g_tex2D_Mut")->Set(pSRVs[0]);
+ pSRB->GetVariable(SHADER_TYPE_VERTEX, "g_tex2DArr_Mut")->SetArray(pSRVs, 0, 3);
+ pSRB->GetVariable(SHADER_TYPE_VERTEX, "g_tex2D_Dyn")->Set(pSRVs[0]);
+ pSRB->GetVariable(SHADER_TYPE_VERTEX, "g_tex2DArr_Dyn")->SetArray(pSRVs, 0, 4);
+
+ pSRB->GetVariable(SHADER_TYPE_VERTEX, "UniformBuff_Mut")->Set(pUBs[0]);
+ pSRB->GetVariable(SHADER_TYPE_VERTEX, "UniformBuffArr_Mut")->SetArray(pUBs, 0, 3);
+ pSRB->GetVariable(SHADER_TYPE_VERTEX, "UniformBuff_Dyn")->Set(pUBs[0]);
+ pSRB->GetVariable(SHADER_TYPE_VERTEX, "UniformBuffArr_Dyn")->SetArray(pUBs, 0, 4);
+
+ pSRB->GetVariable(SHADER_TYPE_VERTEX, "storageBuff_Mut")->Set(pSBs[0]);
+ pSRB->GetVariable(SHADER_TYPE_VERTEX, "storageBuffArr_Mut")->SetArray(pSBs, 0, 3);
+ pSRB->GetVariable(SHADER_TYPE_VERTEX, "storageBuff_Dyn")->Set(pSBs[0]);
+ pSRB->GetVariable(SHADER_TYPE_VERTEX, "storageBuffArr_Dyn")->SetArray(pSBs, 0, 4);
+
+ pSRB->GetVariable(SHADER_TYPE_VERTEX, "g_tex2DStorageImgArr_Mut")->SetArray(pUAVs, 0, 2);
+ pSRB->GetVariable(SHADER_TYPE_VERTEX, "g_tex2DStorageImgArr_Dyn")->SetArray(pUAVs, 0, 2);
+
+ pSRB->GetVariable(SHADER_TYPE_PIXEL, "g_tex2D_Mut")->Set(pSRVs[0]);
+ pSRB->GetVariable(SHADER_TYPE_PIXEL, "g_tex2DArr_Mut")->SetArray(pSRVs, 0, 3);
+ pSRB->GetVariable(SHADER_TYPE_PIXEL, "g_tex2D_Dyn")->Set(pSRVs[0]);
+ pSRB->GetVariable(SHADER_TYPE_PIXEL, "g_tex2DArr_Dyn")->SetArray(pSRVs, 0, 4);
+
+ pSRB->GetVariable(SHADER_TYPE_PIXEL, "UniformBuff_Mut")->Set(pUBs[0]);
+ pSRB->GetVariable(SHADER_TYPE_PIXEL, "UniformBuffArr_Mut")->SetArray(pUBs, 0, 3);
+ pSRB->GetVariable(SHADER_TYPE_PIXEL, "UniformBuff_Dyn")->Set(pUBs[0]);
+ pSRB->GetVariable(SHADER_TYPE_PIXEL, "UniformBuffArr_Dyn")->SetArray(pUBs, 0, 4);
+
+ pSRB->GetVariable(SHADER_TYPE_PIXEL, "storageBuff_Mut")->Set(pSBs[0]);
+ pSRB->GetVariable(SHADER_TYPE_PIXEL, "storageBuffArr_Mut")->SetArray(pSBs, 0, 3);
+ pSRB->GetVariable(SHADER_TYPE_PIXEL, "storageBuff_Dyn")->Set(pSBs[0]);
+ pSRB->GetVariable(SHADER_TYPE_PIXEL, "storageBuffArr_Dyn")->SetArray(pSBs, 0, 4);
+
+ pSRB->GetVariable(SHADER_TYPE_PIXEL, "g_tex2DStorageImgArr_Mut")->SetArray(pUAVs, 0, 2);
+ pSRB->GetVariable(SHADER_TYPE_PIXEL, "g_tex2DStorageImgArr_Dyn")->SetArray(pUAVs, 0, 2);
+
+
SetStatus(TestResult::Succeeded);
}