From 41e5a5404dd18c748a8355c0796d5e53f793c3b9 Mon Sep 17 00:00:00 2001 From: Egor Yusov Date: Wed, 21 Nov 2018 10:01:10 -0800 Subject: Implemented explicit resource state transitions --- unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_D3D11.cpp | 4 ++-- unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_D3D12.cpp | 4 ++-- .../GhostCubePlugin/PluginSource/src/RenderAPI_OpenGLCoreES.cpp | 4 ++-- unityplugin/GhostCubePlugin/PluginSource/src/SamplePlugin.cpp | 1 + unityplugin/GhostCubeScene/src/GhostCubeScene.cpp | 2 +- unityplugin/UnityEmulator/src/DiligentGraphicsAdapterD3D11.cpp | 4 ++-- unityplugin/UnityEmulator/src/DiligentGraphicsAdapterD3D12.cpp | 4 ++-- 7 files changed, 12 insertions(+), 11 deletions(-) (limited to 'unityplugin') diff --git a/unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_D3D11.cpp b/unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_D3D11.cpp index 85c81ba..46d3ac8 100644 --- a/unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_D3D11.cpp +++ b/unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_D3D11.cpp @@ -80,11 +80,11 @@ void RenderAPI_D3D11::AttachToNativeRenderTexture(void *nativeRenderTargetHandle auto *pd3d11RenderTarget = reinterpret_cast(nativeRenderTargetHandle); RefCntAutoPtr pRenderTarget; - pDeviceD3D11->CreateTextureFromD3DResource(pd3d11RenderTarget, &pRenderTarget); + pDeviceD3D11->CreateTextureFromD3DResource(pd3d11RenderTarget, RESOURCE_STATE_UNDEFINED, &pRenderTarget); auto *pd3d11DepthBuffer = reinterpret_cast(nativeDepthTextureHandle); RefCntAutoPtr pDepthBuffer; - pDeviceD3D11->CreateTextureFromD3DResource(pd3d11DepthBuffer, &pDepthBuffer); + pDeviceD3D11->CreateTextureFromD3DResource(pd3d11DepthBuffer, RESOURCE_STATE_UNDEFINED, &pDepthBuffer); CreateTextureViews(pRenderTarget, pDepthBuffer); } diff --git a/unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_D3D12.cpp b/unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_D3D12.cpp index 8befeb0..3f4f9ea 100644 --- a/unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_D3D12.cpp +++ b/unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_D3D12.cpp @@ -189,14 +189,14 @@ void RenderAPI_D3D12::AttachToNativeRenderTexture(void *nativeRenderTargetHandle { auto *pd3d12RenderTarget = reinterpret_cast(nativeRenderTargetHandle); RefCntAutoPtr pRenderTarget; - pDeviceD3D12->CreateTextureFromD3DResource(pd3d12RenderTarget, &pRenderTarget); + pDeviceD3D12->CreateTextureFromD3DResource(pd3d12RenderTarget, RESOURCE_STATE_UNDEFINED, &pRenderTarget); pRenderTarget->QueryInterface(IID_TextureD3D12, reinterpret_cast(static_cast(&m_RenderTarget))); } { auto *pd3d12DepthBuffer = reinterpret_cast(nativeDepthTextureHandle); RefCntAutoPtr pDepthBuffer; - pDeviceD3D12->CreateTextureFromD3DResource(pd3d12DepthBuffer, &pDepthBuffer); + pDeviceD3D12->CreateTextureFromD3DResource(pd3d12DepthBuffer, RESOURCE_STATE_UNDEFINED, &pDepthBuffer); pDepthBuffer->QueryInterface(IID_TextureD3D12, reinterpret_cast(static_cast(&m_DepthBuffer))); } CreateTextureViews(m_RenderTarget, m_DepthBuffer); diff --git a/unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_OpenGLCoreES.cpp b/unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_OpenGLCoreES.cpp index 4e9b345..cac774d 100644 --- a/unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_OpenGLCoreES.cpp +++ b/unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_OpenGLCoreES.cpp @@ -83,7 +83,7 @@ void RenderAPI_OpenGLCoreES::CreateRenderTargetAndDepthBuffer() RenderTargetDesc.Height = 1024; RenderTargetDesc.Format = TEX_FORMAT_RGBA8_UNORM_SRGB; #endif - pDeviceGL->CreateTextureFromGLHandle(m_GLRenderTargetHandle, RenderTargetDesc, &pRenderTarget); + pDeviceGL->CreateTextureFromGLHandle(m_GLRenderTargetHandle, RenderTargetDesc, RESOURCE_STATE_UNKNOWN, &pRenderTarget); RefCntAutoPtr pDepthBuffer; TextureDesc DepthBufferDesc; @@ -98,7 +98,7 @@ void RenderAPI_OpenGLCoreES::CreateRenderTargetAndDepthBuffer() DepthBufferDesc.Height = 1024; DepthBufferDesc.Format = TEX_FORMAT_D32_FLOAT; #endif - pDeviceGL->CreateTextureFromGLHandle(m_GLDepthTextureHandle, DepthBufferDesc, &pDepthBuffer); + pDeviceGL->CreateTextureFromGLHandle(m_GLDepthTextureHandle, DepthBufferDesc, RESOURCE_STATE_UNKNOWN, &pDepthBuffer); CreateTextureViews(pRenderTarget, pDepthBuffer); } diff --git a/unityplugin/GhostCubePlugin/PluginSource/src/SamplePlugin.cpp b/unityplugin/GhostCubePlugin/PluginSource/src/SamplePlugin.cpp index b54e84a..aee52b2 100644 --- a/unityplugin/GhostCubePlugin/PluginSource/src/SamplePlugin.cpp +++ b/unityplugin/GhostCubePlugin/PluginSource/src/SamplePlugin.cpp @@ -169,5 +169,6 @@ void SamplePlugin::Render(Diligent::IDeviceContext *pContext, const float4x4 &Vi DrawAttrs.IsIndexed = true; DrawAttrs.IndexType = VT_UINT32; DrawAttrs.NumIndices = 36; + DrawAttrs.Flags = DRAW_FLAG_TRANSITION_INDEX_BUFFER | DRAW_FLAG_TRANSITION_VERTEX_BUFFERS; pContext->Draw(DrawAttrs); } diff --git a/unityplugin/GhostCubeScene/src/GhostCubeScene.cpp b/unityplugin/GhostCubeScene/src/GhostCubeScene.cpp index 87ef39e..62fa900 100644 --- a/unityplugin/GhostCubeScene/src/GhostCubeScene.cpp +++ b/unityplugin/GhostCubeScene/src/GhostCubeScene.cpp @@ -189,7 +189,7 @@ void GhostCubeScene::Render(UnityRenderingEvent RenderEventFunc) // Call the plugin RenderEventFunc(0); } - + // We need to invalidate the context state since the plugin has used d3d11 context pCtx->InvalidateState(); pCtx->SetRenderTargets(0, nullptr, nullptr); diff --git a/unityplugin/UnityEmulator/src/DiligentGraphicsAdapterD3D11.cpp b/unityplugin/UnityEmulator/src/DiligentGraphicsAdapterD3D11.cpp index f804e90..13d91da 100644 --- a/unityplugin/UnityEmulator/src/DiligentGraphicsAdapterD3D11.cpp +++ b/unityplugin/UnityEmulator/src/DiligentGraphicsAdapterD3D11.cpp @@ -66,7 +66,7 @@ public: RefCntAutoPtr pRenderDeviceD3D11(m_pRenderDevice, IID_RenderDeviceD3D11); RefCntAutoPtr pBackBuffer; - pRenderDeviceD3D11->CreateTextureFromD3DResource(pd3dTex2DBackBuffer, &pBackBuffer); + pRenderDeviceD3D11->CreateTextureFromD3DResource(pd3dTex2DBackBuffer, RESOURCE_STATE_UNDEFINED, &pBackBuffer); TextureViewDesc RTVDesc; RTVDesc.ViewType = TEXTURE_VIEW_RENDER_TARGET; RTVDesc.Format = m_SwapChainDesc.ColorBufferFormat; @@ -75,7 +75,7 @@ public: m_pRTV = RefCntAutoPtr(pRTV, IID_TextureViewD3D11); RefCntAutoPtr pDepthBuffer; - pRenderDeviceD3D11->CreateTextureFromD3DResource(pd3dTex2DDepthBuffer, &pDepthBuffer); + pRenderDeviceD3D11->CreateTextureFromD3DResource(pd3dTex2DDepthBuffer, RESOURCE_STATE_UNDEFINED, &pDepthBuffer); m_pDSV = RefCntAutoPtr(pDepthBuffer->GetDefaultView(TEXTURE_VIEW_DEPTH_STENCIL), IID_TextureViewD3D11); } diff --git a/unityplugin/UnityEmulator/src/DiligentGraphicsAdapterD3D12.cpp b/unityplugin/UnityEmulator/src/DiligentGraphicsAdapterD3D12.cpp index 1ef8671..1ce1442 100644 --- a/unityplugin/UnityEmulator/src/DiligentGraphicsAdapterD3D12.cpp +++ b/unityplugin/UnityEmulator/src/DiligentGraphicsAdapterD3D12.cpp @@ -163,7 +163,7 @@ public: if(FAILED(hr)) LOG_ERROR_AND_THROW("Failed to get back buffer ", backbuff," from the swap chain"); RefCntAutoPtr pBackBuffer; - pRenderDeviceD3D12->CreateTextureFromD3DResource(pd3d12BackBuffer, &pBackBuffer); + pRenderDeviceD3D12->CreateTextureFromD3DResource(pd3d12BackBuffer, RESOURCE_STATE_UNDEFINED, &pBackBuffer); m_BackBuffers.emplace_back( RefCntAutoPtr(pBackBuffer, IID_TextureD3D12) ); TextureViewDesc TexViewDesc; TexViewDesc.ViewType = TEXTURE_VIEW_RENDER_TARGET; @@ -174,7 +174,7 @@ public: } RefCntAutoPtr pDepthBuffer; - pRenderDeviceD3D12->CreateTextureFromD3DResource(pd3d12DepthBuffer, &pDepthBuffer); + pRenderDeviceD3D12->CreateTextureFromD3DResource(pd3d12DepthBuffer, RESOURCE_STATE_UNDEFINED, &pDepthBuffer); m_DepthBuffer = RefCntAutoPtr(pDepthBuffer, IID_TextureD3D12); auto *pDSV = m_DepthBuffer->GetDefaultView(TEXTURE_VIEW_DEPTH_STENCIL); m_DSV = RefCntAutoPtr(pDSV, IID_TextureViewD3D12); -- cgit v1.2.3