diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2018-05-12 22:39:05 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2018-05-12 22:39:05 +0000 |
| commit | b6d80b428752c99a913691022117248e08ed15a3 (patch) | |
| tree | 086836332cf9b718a5d2ce546c97410340eb9133 /Tests/TestApp/src/TestShaderResourceLayout.cpp | |
| parent | Test app: added shader resource layout initialization test; updated gl shaders (diff) | |
| download | DiligentEngine-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.cpp | 108 |
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); } |
