summaryrefslogtreecommitdiffstats
path: root/Tests/TestApp/src/TestApp.cpp
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2018-07-05 22:27:39 +0000
committerEgor Yusov <egor.yusov@gmail.com>2018-07-05 22:27:39 +0000
commit9a8b1ce5926ba32be80cc3a2a308b9e054c1f781 (patch)
tree9c254c01d925e5121d5663f04f7de327f996922f /Tests/TestApp/src/TestApp.cpp
parentUpdated broken shader & comput shader tests (diff)
downloadDiligentEngine-9a8b1ce5926ba32be80cc3a2a308b9e054c1f781.tar.gz
DiligentEngine-9a8b1ce5926ba32be80cc3a2a308b9e054c1f781.zip
Updated test app
Diffstat (limited to 'Tests/TestApp/src/TestApp.cpp')
-rw-r--r--Tests/TestApp/src/TestApp.cpp89
1 files changed, 62 insertions, 27 deletions
diff --git a/Tests/TestApp/src/TestApp.cpp b/Tests/TestApp/src/TestApp.cpp
index a6dd0bc..8c5062a 100644
--- a/Tests/TestApp/src/TestApp.cpp
+++ b/Tests/TestApp/src/TestApp.cpp
@@ -209,12 +209,32 @@ void TestApp::InitializeDiligentEngine(
LoadGraphicsEngineVk(GetEngineFactoryVk);
#endif
EngineVkAttribs EngVkAttribs;
-#ifdef _DEBUG
+
EngVkAttribs.EnableValidation = true;
EngVkAttribs.MainDescriptorPoolSize = EngineVkAttribs::DescriptorPoolSize{ 64, 64, 256, 256, 64, 32, 32, 32, 32 };
EngVkAttribs.DynamicDescriptorPoolSize = EngineVkAttribs::DescriptorPoolSize{ 64, 64, 256, 256, 64, 32, 32, 32, 32 };
-#endif
-
+ EngVkAttribs.ImmediateCtxUploadHeapPageSize = 32*1024;
+ EngVkAttribs.ImmediateCtxUploadHeapReserveSize = 64*1024;
+ EngVkAttribs.DeferredCtxUploadHeapPageSize = 8*1024;
+ EngVkAttribs.DeferredCtxUploadHeapReserveSize = 16*1024;
+ //EngVkAttribs.DeviceLocalMemoryReserveSize = 32 << 20;
+ //EngVkAttribs.HostVisibleMemoryReserveSize = 48 << 20;
+
+ auto& Features = EngVkAttribs.EnabledFeatures;
+ Features.depthBiasClamp = true;
+ Features.fillModeNonSolid = true;
+ Features.depthClamp = true;
+ Features.independentBlend = true;
+ Features.samplerAnisotropy = true;
+ Features.geometryShader = true;
+ Features.tessellationShader = true;
+ Features.dualSrcBlend = true;
+ Features.multiViewport = true;
+ Features.imageCubeArray = true;
+ Features.textureCompressionBC = true;
+ Features.vertexPipelineStoresAndAtomics = true;
+ Features.fragmentStoresAndAtomics = true;
+
ppContexts.resize(1 + NumDeferredCtx);
auto *pFactoryVk = GetEngineFactoryVk();
pFactoryVk->CreateDeviceAndContextsVk(EngVkAttribs, &m_pDevice, ppContexts.data(), NumDeferredCtx);
@@ -262,30 +282,35 @@ void TestApp::InitializeRenderers()
TestPSOCompatibility TestPSOCompat(m_pDevice);
TestBrokenShader TestBrknShdr(m_pDevice);
- m_TestGS.Init(m_pDevice, m_pImmediateContext);
- m_TestTessellation.Init(m_pDevice, m_pImmediateContext);
- m_pTestShaderResArrays.reset(new TestShaderResArrays(m_pDevice, m_pImmediateContext, 0.4f, -0.9f, 0.5f, 0.5f));
+ m_TestGS.Init(m_pDevice, m_pImmediateContext, m_pSwapChain);
+ m_TestTessellation.Init(m_pDevice, m_pImmediateContext, m_pSwapChain);
+ m_pTestShaderResArrays.reset(new TestShaderResArrays(m_pDevice, m_pImmediateContext, m_pSwapChain, 0.4f, -0.9f, 0.5f, 0.5f));
m_pMTResCreationTest.reset(new MTResourceCreationTest(m_pDevice, m_pImmediateContext, 7));
+
TestShaderResourceLayout TestShaderResLayout(m_pDevice, m_pImmediateContext);
-
+
#if GL_SUPPORTED || GLES_SUPPORTED || VULKAN_SUPPORTED
ShaderConverterTest ConverterTest(m_pDevice, m_pImmediateContext);
#endif
-
+
TestSamplerCreation TestSamplers(m_pDevice);
-
+
RenderScriptTest LuaTest(m_pDevice, m_pImmediateContext);
-
- m_pRenderScript = CreateRenderScriptFromFile("TestRenderScripts.lua", m_pDevice, m_pImmediateContext, [](ScriptParser *pScriptParser)
+
+ const auto* BackBufferFmt = m_pDevice->GetTextureFormatInfo(m_pSwapChain->GetDesc().ColorBufferFormat).Name;
+ const auto* DepthBufferFmt = m_pDevice->GetTextureFormatInfo(m_pSwapChain->GetDesc().DepthBufferFormat).Name;
+ m_pRenderScript = CreateRenderScriptFromFile("TestRenderScripts.lua", m_pDevice, m_pImmediateContext, [BackBufferFmt, DepthBufferFmt](ScriptParser *pScriptParser)
{
+ pScriptParser->SetGlobalVariable( "extBackBufferFormat", BackBufferFmt );
+ pScriptParser->SetGlobalVariable( "extDepthBufferFormat", DepthBufferFmt );
});
m_pTestDrawCommands.reset(new TestDrawCommands);
- m_pTestDrawCommands->Init(m_pDevice, m_pImmediateContext, 0, 0, 1, 1);
+ m_pTestDrawCommands->Init(m_pDevice, m_pImmediateContext, m_pSwapChain, 0, 0, 1, 1);
m_pTestBufferAccess.reset(new TestBufferAccess);
- m_pTestBufferAccess->Init(m_pDevice, m_pImmediateContext, -1, 0, 0.5, 0.5);
-
+ m_pTestBufferAccess->Init(m_pDevice, m_pImmediateContext, m_pSwapChain, -1, 0, 0.5, 0.5);
+
TEXTURE_FORMAT TestFormats[16] =
{
@@ -300,25 +325,23 @@ void TestApp::InitializeRenderers()
{
auto Ind = i + j * 4;
m_pTestTexturing[Ind].reset(new TestTexturing);
- m_pTestTexturing[Ind]->Init(m_pDevice, m_pImmediateContext, TestFormats[Ind], -1 + (float)i*1.f / 4.f, -1 + (float)j*1.f / 4.f, 0.9f / 4.f, 0.9f / 4.f);
+ m_pTestTexturing[Ind]->Init(m_pDevice, m_pImmediateContext, m_pSwapChain, TestFormats[Ind], -1 + (float)i*1.f / 4.f, -1 + (float)j*1.f / 4.f, 0.9f / 4.f, 0.9f / 4.f);
}
-#if 0
TestCopyTexData TestCopyData(m_pDevice, m_pImmediateContext);
-#endif
TestVPAndSR TestVPAndSR(m_pDevice, m_pImmediateContext);
m_pTestCS.reset(new TestComputeShaders);
- m_pTestCS->Init(m_pDevice, m_pImmediateContext);
+ m_pTestCS->Init(m_pDevice, m_pImmediateContext, m_pSwapChain);
m_pTestRT.reset(new TestRenderTarget);
- m_pTestRT->Init(m_pDevice, m_pImmediateContext, -0.4f, 0.55f, 0.4f, 0.4f);
+ m_pTestRT->Init(m_pDevice, m_pImmediateContext, m_pSwapChain, -0.4f, 0.55f, 0.4f, 0.4f);
m_pMTResCreationTest->StartThreads();
float instance_offsets[] = { -0.3f, 0.0f, 0.0f, 0.0f, +0.3f, -0.3f };
-
+
{
m_pRenderScript->GetBufferByName("InstanceBuffer", &m_pInstBuff);
}
@@ -333,7 +356,7 @@ void TestApp::InitializeRenderers()
//BuffData.DataSize = sizeof(instance_offsets);
m_pDevice->CreateBuffer(BuffDesc, Diligent::BufferData(), &m_pInstBuff2);
}
-
+
{
m_pRenderScript->GetBufferByName("UnfiformBuffer1", &m_pUniformBuff);
@@ -410,7 +433,7 @@ void TestApp::InitializeRenderers()
TexDesc.Type = RESOURCE_DIM_TEX_2D;
TexDesc.Width = 512;
TexDesc.Height = 512;
- TexDesc.Format = TEX_FORMAT_RGBA8_UNORM_SRGB;
+ TexDesc.Format = m_pSwapChain->GetDesc().ColorBufferFormat;
TexDesc.Usage = USAGE_DEFAULT;
TexDesc.BindFlags = BIND_SHADER_RESOURCE | BIND_RENDER_TARGET;
TexDesc.Name = "UniqueTexture";
@@ -418,6 +441,12 @@ void TestApp::InitializeRenderers()
m_pDevice->CreateTexture(TexDesc, TextureData(), &pTex);
ITextureView *pRTVs[] = { pTex->GetDefaultView(TEXTURE_VIEW_RENDER_TARGET) };
+ TexDesc.Format = m_pSwapChain->GetDesc().DepthBufferFormat;
+ RefCntAutoPtr<ITexture> pDepthTex;
+ TexDesc.BindFlags = BIND_DEPTH_STENCIL;
+ m_pDevice->CreateTexture(TexDesc, TextureData(), &pDepthTex);
+ auto* pDSV = pDepthTex->GetDefaultView(TEXTURE_VIEW_DEPTH_STENCIL);
+
{
MapHelper<float> UniformData(m_pImmediateContext, m_pUniformBuff, MAP_WRITE, MAP_FLAG_DISCARD);
UniformData[0] = UniformData[1] = UniformData[2] = UniformData[3] = 0;
@@ -431,12 +460,17 @@ void TestApp::InitializeRenderers()
UniformData[3] = 0;
}
+ m_pImmediateContext->SetRenderTargets(0, nullptr, nullptr);
+ float ClearColor[] = {0.1f, 0.2f, 0.4f, 1.0f};
+ m_pImmediateContext->ClearRenderTarget(nullptr, ClearColor);
Diligent::DrawAttribs DrawAttrs;
DrawAttrs.NumVertices = 3;
m_pRenderScript->Run(m_pImmediateContext, "DrawTris", DrawAttrs);
// This adds transition barrier for pTex1
- m_pImmediateContext->SetRenderTargets(1, pRTVs, nullptr);
+ m_pImmediateContext->SetRenderTargets(1, pRTVs, pDSV);
+ m_pImmediateContext->ClearRenderTarget(pRTVs[0], ClearColor);
+ m_pImmediateContext->ClearDepthStencil(pDSV, CLEAR_DEPTH_FLAG);
// Generate draw command to the bound render target
m_pImmediateContext->Draw(DrawAttrs);
m_pImmediateContext->SetRenderTargets(0, nullptr, nullptr);
@@ -514,7 +548,7 @@ void TestApp::WindowResize(int width, int height)
m_pSwapChain->Resize(width, height);
//auto SCWidth = m_pSwapChain->GetDesc().Width;
//auto SCHeight = m_pSwapChain->GetDesc().Height;
-
+
}
}
@@ -530,13 +564,14 @@ void TestApp::Render()
m_pImmediateContext->SetRenderTargets(0, nullptr, nullptr);
float ClearColor[] = {0.1f, 0.2f, 0.4f, 1.0f};
m_pImmediateContext->ClearRenderTarget(nullptr, ClearColor);
+ m_pImmediateContext->ClearDepthStencil(nullptr, CLEAR_DEPTH_FLAG, 1.f);
double dCurrTime = m_CurrTime;
-
+
float instance_offsets[] = { -0.3f, (float)sin(dCurrTime + 0.5)*0.1f, 0.0f, (float)sin(dCurrTime)*0.1f, +0.3f, -0.3f + (float)cos(dCurrTime)*0.1f };
m_pInstBuff2->UpdateData(m_pImmediateContext, sizeof(float) * 1, sizeof(float) * 5, &instance_offsets[1]);
m_pInstBuff->CopyData(m_pImmediateContext, m_pInstBuff2, sizeof(float) * 2, sizeof(float) * 2, sizeof(float) * 4);
-
+
{
MapHelper<float> UniformData(m_pImmediateContext, m_pUniformBuff, MAP_WRITE, MAP_FLAG_DISCARD);
UniformData[0] = UniformData[1] = UniformData[2] = UniformData[3] = (float)fabs(sin(dCurrTime));
@@ -571,7 +606,7 @@ void TestApp::Render()
m_pTestShaderResArrays->Draw();
m_TestGS.Draw();
m_TestTessellation.Draw();
-
+
m_pImmediateContext->Flush();
m_pImmediateContext->InvalidateState();
}