diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2018-10-07 02:19:50 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2018-10-07 02:19:50 +0000 |
| commit | ef733fdbac35b6180964766b107f219eb41b1d75 (patch) | |
| tree | ecd061c4bd7c25648496d5dce96894794530c851 /unityplugin/GhostCubePlugin/PluginSource | |
| parent | Fixed compiler warnings (diff) | |
| download | DiligentEngine-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.cpp | 14 |
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) |
