aboutsummaryrefslogtreecommitdiff
path: root/samples/dual_layer
diff options
context:
space:
mode:
authorLouis Bavoil <[email protected]>2018-03-30 21:31:25 +0200
committerLouis Bavoil <[email protected]>2018-03-30 21:31:25 +0200
commit7dfdbb54a778d4d9184037fdc74c85debd68011b (patch)
tree15c8800522d8bd5a5153d21a36989aba0b4d4565 /samples/dual_layer
parentHBAO+ 4.0.0.23740451 (diff)
downloadhbaoplus-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.cpp28
-rw-r--r--samples/dual_layer/D3D12/src/DeviceManager12.h55
-rw-r--r--samples/dual_layer/D3D12/src/HBAOSampleD3D12.cpp3
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);