diff options
| author | Louis Bavoil <[email protected]> | 2018-03-30 21:31:25 +0200 |
|---|---|---|
| committer | Louis Bavoil <[email protected]> | 2018-03-30 21:31:25 +0200 |
| commit | 7dfdbb54a778d4d9184037fdc74c85debd68011b (patch) | |
| tree | 15c8800522d8bd5a5153d21a36989aba0b4d4565 /samples/dual_layer | |
| parent | HBAO+ 4.0.0.23740451 (diff) | |
| download | hbaoplus-7dfdbb54a778d4d9184037fdc74c85debd68011b.tar.xz hbaoplus-7dfdbb54a778d4d9184037fdc74c85debd68011b.zip | |
HBAO+ 4.0.0.23827312
Diffstat (limited to 'samples/dual_layer')
| -rw-r--r-- | samples/dual_layer/D3D12/src/DeviceManager12.cpp | 28 | ||||
| -rw-r--r-- | samples/dual_layer/D3D12/src/DeviceManager12.h | 55 | ||||
| -rw-r--r-- | samples/dual_layer/D3D12/src/HBAOSampleD3D12.cpp | 3 |
3 files changed, 44 insertions, 42 deletions
diff --git a/samples/dual_layer/D3D12/src/DeviceManager12.cpp b/samples/dual_layer/D3D12/src/DeviceManager12.cpp index 85c99ff..7e847a9 100644 --- a/samples/dual_layer/D3D12/src/DeviceManager12.cpp +++ b/samples/dual_layer/D3D12/src/DeviceManager12.cpp @@ -216,6 +216,11 @@ DeviceManager::CreateWindowDeviceAndSwapChain(const DeviceCreationParameters& pa for(UINT bufferIndex = 0; bufferIndex < m_SwapChainDesc.BufferCount; bufferIndex++) { m_FrameFenceEvents.push_back( CreateEvent(NULL, false, true, NULL) ); + + ID3D12CommandAllocator* commandAllocator = nullptr; + m_Device12->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, IID_PPV_ARGS(&commandAllocator)); + + m_CommandAllocators.push_back(commandAllocator); } DeviceCreated(); @@ -245,7 +250,9 @@ DeviceManager::Shutdown() SAFE_RELEASE(m_FrameFence); - SAFE_RELEASE(m_DefaultCommandAllocator); + for (auto& commandAllocator : m_CommandAllocators) + SAFE_RELEASE(commandAllocator); + SAFE_RELEASE(m_PreRenderCommandList); SAFE_RELEASE(m_PostRenderCommandList); @@ -288,19 +295,20 @@ HRESULT DeviceManager::CreatePrePostRenderCommandLists() { HRESULT hr; - if (!m_DefaultCommandAllocator) + ID3D12CommandAllocator* commandAllocator = m_CommandAllocators[m_BufferIndex]; + + if (commandAllocator) { - hr = m_Device12->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, IID_PPV_ARGS(&m_DefaultCommandAllocator)); - HR_RETURN(hr); + commandAllocator->Reset(); } if (!m_PreRenderCommandList) { - hr = m_Device12->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_DIRECT, m_DefaultCommandAllocator, NULL, IID_PPV_ARGS(&m_PreRenderCommandList)); + hr = m_Device12->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_DIRECT, commandAllocator, NULL, IID_PPV_ARGS(&m_PreRenderCommandList)); HR_RETURN(hr); } else - m_PreRenderCommandList->Reset(m_DefaultCommandAllocator, nullptr); + m_PreRenderCommandList->Reset(commandAllocator, nullptr); SetResourceBarrier(m_PreRenderCommandList, m_SwapChainBuffers[m_BufferIndex], D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET); if(m_EnableRenderTargetClear) @@ -312,11 +320,11 @@ HRESULT DeviceManager::CreatePrePostRenderCommandLists() if (!m_PostRenderCommandList) { - hr = m_Device12->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_DIRECT, m_DefaultCommandAllocator, NULL, IID_PPV_ARGS(&m_PostRenderCommandList)); + hr = m_Device12->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_DIRECT, commandAllocator, NULL, IID_PPV_ARGS(&m_PostRenderCommandList)); HR_RETURN(hr); } else - m_PostRenderCommandList->Reset(m_DefaultCommandAllocator, nullptr); + m_PostRenderCommandList->Reset(commandAllocator, nullptr); SetResourceBarrier(m_PostRenderCommandList, m_SwapChainBuffers[m_BufferIndex], D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT); m_PostRenderCommandList->Close(); @@ -425,10 +433,6 @@ DeviceManager::MessageLoop() { m_AverageFrameTime = timeSum / (double)m_vFrameTimes.size(); m_vFrameTimes.clear(); - - //char buf[256]; - //sprintf_s(buf, "Average FPS: %.2f\n", 1.f / m_AverageFrameTime); - //OutputDebugStringA(buf); } } diff --git a/samples/dual_layer/D3D12/src/DeviceManager12.h b/samples/dual_layer/D3D12/src/DeviceManager12.h index 595e60d..e4b1e37 100644 --- a/samples/dual_layer/D3D12/src/DeviceManager12.h +++ b/samples/dual_layer/D3D12/src/DeviceManager12.h @@ -99,34 +99,34 @@ public: }; protected: - ID3D12Device* m_Device12; - ID3D12CommandQueue* m_DefaultQueue; - IDXGISwapChain3* m_SwapChain; - DXGI_SWAP_CHAIN_DESC1 m_SwapChainDesc; - DXGI_SWAP_CHAIN_FULLSCREEN_DESC m_FullScreenDesc; - ID3D12CommandAllocator* m_DefaultCommandAllocator; - ID3D12GraphicsCommandList* m_PreRenderCommandList; - ID3D12GraphicsCommandList* m_PostRenderCommandList; - ID3D12DescriptorHeap* m_DescHeapRTV; - IDXGIAdapter* m_DxgiAdapter; - HWND m_hWnd; - std::list<IVisualController*> m_vControllers; - std::wstring m_WindowTitle; - double m_FixedFrameInterval; - UINT m_SyncInterval; - std::list<double> m_vFrameTimes; - double m_AverageFrameTime; - double m_AverageTimeUpdateInterval; - bool m_InSizingModalLoop; - SIZE m_NewWindowSize; - std::vector<ID3D12Resource*> m_SwapChainBuffers; + ID3D12Device* m_Device12; + ID3D12CommandQueue* m_DefaultQueue; + IDXGISwapChain3* m_SwapChain; + DXGI_SWAP_CHAIN_DESC1 m_SwapChainDesc; + DXGI_SWAP_CHAIN_FULLSCREEN_DESC m_FullScreenDesc; + std::vector<ID3D12CommandAllocator*> m_CommandAllocators; + ID3D12GraphicsCommandList* m_PreRenderCommandList; + ID3D12GraphicsCommandList* m_PostRenderCommandList; + ID3D12DescriptorHeap* m_DescHeapRTV; + IDXGIAdapter* m_DxgiAdapter; + HWND m_hWnd; + std::list<IVisualController*> m_vControllers; + std::wstring m_WindowTitle; + double m_FixedFrameInterval; + UINT m_SyncInterval; + std::list<double> m_vFrameTimes; + double m_AverageFrameTime; + double m_AverageTimeUpdateInterval; + bool m_InSizingModalLoop; + SIZE m_NewWindowSize; + std::vector<ID3D12Resource*> m_SwapChainBuffers; std::vector<D3D12_CPU_DESCRIPTOR_HANDLE> m_SwapChainRTVs; - ID3D12Fence* m_FrameFence; - std::vector<HANDLE> m_FrameFenceEvents; - int m_BufferIndex; - UINT64 m_FrameCount; - bool m_EnableRenderTargetClear; - float m_RenderTargetClearColor[4]; + ID3D12Fence* m_FrameFence; + std::vector<HANDLE> m_FrameFenceEvents; + int m_BufferIndex; + UINT64 m_FrameCount; + bool m_EnableRenderTargetClear; + float m_RenderTargetClearColor[4]; private: HRESULT CreateRenderTargets(); HRESULT CreatePrePostRenderCommandLists(); @@ -146,7 +146,6 @@ public: , m_SyncInterval(0) , m_AverageFrameTime(0) , m_AverageTimeUpdateInterval(0.5) - , m_DefaultCommandAllocator(NULL) , m_PreRenderCommandList(NULL) , m_PostRenderCommandList(NULL) , m_DescHeapRTV(NULL) diff --git a/samples/dual_layer/D3D12/src/HBAOSampleD3D12.cpp b/samples/dual_layer/D3D12/src/HBAOSampleD3D12.cpp index cf10894..d5ce0d1 100644 --- a/samples/dual_layer/D3D12/src/HBAOSampleD3D12.cpp +++ b/samples/dual_layer/D3D12/src/HBAOSampleD3D12.cpp @@ -43,6 +43,7 @@ void HBAOSampleD3D12::Initialize() deviceParams.windowPosY = 0; mDeviceManager.CreateWindowDeviceAndSwapChain(deviceParams, L"HBAO+ D3D12 Sample"); + mDeviceManager.SetPrimaryRenderTargetClearColor(false, nullptr); mDeviceManager.AddControllerToBack(this); @@ -210,11 +211,9 @@ bool HBAOSampleD3D12::InitializeHBAOPlus() DescriptorHeaps.CBV_SRV_UAV.pDescHeap = mSSAODescriptorHeapCBVSRVUAV.Get(); DescriptorHeaps.CBV_SRV_UAV.BaseIndex = kNumTotalAppDescriptors; - DescriptorHeaps.CBV_SRV_UAV.NumDescriptors = GFSDK_SSAO_NUM_DESCRIPTORS_CBV_SRV_UAV_HEAP_D3D12; DescriptorHeaps.RTV.pDescHeap = mSSAODescriptorHeapRTV.Get(); DescriptorHeaps.RTV.BaseIndex = 0; - DescriptorHeaps.RTV.NumDescriptors = GFSDK_SSAO_NUM_DESCRIPTORS_RTV_HEAP_D3D12; GFSDK_SSAO_Status status = GFSDK_SSAO_CreateContext_D3D12(mDevice, NodeMask, DescriptorHeaps, &mSSAOContext, &CustomHeap); assert(status == GFSDK_SSAO_OK); |