summaryrefslogtreecommitdiffstats
path: root/unityplugin/GhostCubePlugin/PluginSource
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2018-10-07 02:19:50 +0000
committerEgor Yusov <egor.yusov@gmail.com>2018-10-07 02:19:50 +0000
commitef733fdbac35b6180964766b107f219eb41b1d75 (patch)
treeecd061c4bd7c25648496d5dce96894794530c851 /unityplugin/GhostCubePlugin/PluginSource
parentFixed compiler warnings (diff)
downloadDiligentEngine-ef733fdbac35b6180964766b107f219eb41b1d75.tar.gz
DiligentEngine-ef733fdbac35b6180964766b107f219eb41b1d75.zip
Updated submodules (main change: refactored release queues in D3D12 and Vulkan backends)
Diffstat (limited to 'unityplugin/GhostCubePlugin/PluginSource')
-rw-r--r--unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_D3D12.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_D3D12.cpp b/unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_D3D12.cpp
index 4f57a93..8befeb0 100644
--- a/unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_D3D12.cpp
+++ b/unityplugin/GhostCubePlugin/PluginSource/src/RenderAPI_D3D12.cpp
@@ -1,4 +1,5 @@
#include <vector>
+#include <array>
#include "PlatformBase.h"
@@ -42,13 +43,13 @@ public:
IMPLEMENT_QUERY_INTERFACE_IN_PLACE( IID_CommandQueueD3D12, TBase )
// Returns the fence value that will be signaled next time
- virtual UINT64 GetNextFenceValue()override final
+ virtual Uint64 GetNextFenceValue()override final
{
return m_pUnityGraphicsD3D12->GetNextFrameFenceValue();
}
// Executes a given command list
- virtual UINT64 ExecuteCommandList(ID3D12GraphicsCommandList* commandList)override final
+ virtual Uint64 Submit(ID3D12GraphicsCommandList* commandList)override final
{
auto NextFenceValue = m_pUnityGraphicsD3D12->GetNextFrameFenceValue();
m_CurrentFenceValue = m_pUnityGraphicsD3D12->ExecuteCommandList(commandList, static_cast<int>(m_ResourcesToTransition.size()), m_ResourcesToTransition.empty() ? nullptr : m_ResourcesToTransition.data());
@@ -70,7 +71,7 @@ public:
}
// Blocks execution until all pending GPU commands are complete
- virtual void IdleGPU()
+ virtual Uint64 WaitForIdle()
{
if (m_CurrentFenceValue < GetCompletedFenceValue())
{
@@ -79,6 +80,7 @@ public:
WaitForSingleObject(m_WaitForGPUEventHandle, INFINITE);
VERIFY(GetCompletedFenceValue() >= m_CurrentFenceValue, "Unexpected signaled fence value");
}
+ return GetCompletedFenceValue();
}
void TransitionResource(const UnityGraphicsD3D12ResourceState &ResourceState)
@@ -143,7 +145,8 @@ void RenderAPI_D3D12::ProcessDeviceEvent(UnityGfxDeviceEventType type, IUnityInt
m_CmdQueue = NEW_RC_OBJ(DefaultAllocator, "UnityCommandQueueImpl instance", UnityCommandQueueImpl)(m_UnityGraphicsD3D12);
auto *pFactoryD3D12 = GetEngineFactoryD3D12();
EngineD3D12Attribs Attribs;
- pFactoryD3D12->AttachToD3D12Device(d3d12Device, m_CmdQueue, Attribs, &m_Device, &m_Context, 0);
+ std::array<ICommandQueueD3D12*, 1> CmdQueues = {m_CmdQueue};
+ pFactoryD3D12->AttachToD3D12Device(d3d12Device, CmdQueues.size(), CmdQueues.data(), Attribs, &m_Device, &m_Context, 0);
m_Device->QueryInterface(IID_RenderDeviceD3D12, reinterpret_cast<IObject**>(static_cast<IRenderDeviceD3D12**>(&m_RenderDeviceD3D12)));
}
break;
@@ -169,8 +172,9 @@ void RenderAPI_D3D12::BeginRendering()
void RenderAPI_D3D12::EndRendering()
{
m_Context->Flush();
+ m_Context->FinishFrame();
m_Context->InvalidateState();
- m_RenderDeviceD3D12->FinishFrame();
+ m_RenderDeviceD3D12->ReleaseStaleResources();
}
void RenderAPI_D3D12::AttachToNativeRenderTexture(void *nativeRenderTargetHandle, void *nativeDepthTextureHandle)