diff options
| author | Miles Macklin <[email protected]> | 2017-06-09 13:41:15 +1200 |
|---|---|---|
| committer | Miles Macklin <[email protected]> | 2017-06-09 13:41:15 +1200 |
| commit | 688b5f42e9bfe498d7af7075d4d8f4429867f3a3 (patch) | |
| tree | 7e0d0e7c95298f0418723abd92f61ac6e16b055e /demo/d3d12/renderStateD3D12.cpp | |
| parent | Update README.md (diff) | |
| download | flex-1.2.0.beta.1.tar.xz flex-1.2.0.beta.1.zip | |
1.2.0.beta.11.2.0.beta.1
Diffstat (limited to 'demo/d3d12/renderStateD3D12.cpp')
| -rw-r--r-- | demo/d3d12/renderStateD3D12.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/demo/d3d12/renderStateD3D12.cpp b/demo/d3d12/renderStateD3D12.cpp new file mode 100644 index 0000000..28a69f4 --- /dev/null +++ b/demo/d3d12/renderStateD3D12.cpp @@ -0,0 +1,67 @@ + +#include "renderStateD3D12.h" + +namespace FlexSample { + +/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Dx12RenderStateManager !!!!!!!!!!!!!!!!!!!!!!!!!! */ + +int RenderStateManagerD3D12::initialize(AppGraphCtxD3D12* renderContext, size_t maxHeapAlloc) +{ + m_renderContext = renderContext; + m_device = renderContext->m_device; + + m_fence.init(m_device); + m_scopeManager.init(m_device, &m_fence); + m_srvCbvUavDescriptorHeap.init(m_device, 256, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE); + m_samplerDescriptorHeap.init(m_device, 64, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE); + + { + NvCo::Dx12CircularResourceHeap::Desc desc; + desc.init(); + desc.m_blockSize = maxHeapAlloc; + m_constantHeap.init(m_device, desc, &m_fence); + } + + return NV_OK; +} + +void RenderStateManagerD3D12::updateCompleted() +{ + m_scopeManager.updateCompleted(); + m_constantHeap.updateCompleted(); +} + +void RenderStateManagerD3D12::onGpuWorkSubmitted(ID3D12CommandQueue* commandQueue) +{ + assert(commandQueue); + if (!commandQueue) + { + printf("Must pass a ID3D12CommandQueue to onGpuWorkSubmitted"); + return; + } + + const uint64_t signalValue = m_fence.nextSignal(commandQueue); + + m_scopeManager.addSync(signalValue); + m_constantHeap.addSync(signalValue); +} + +RenderStateD3D12 RenderStateManagerD3D12::getState() +{ + RenderStateD3D12 state; + + state.m_renderContext = m_renderContext; + state.m_commandList = m_renderContext->m_commandList; + state.m_device = m_device; + + state.m_constantHeap = &m_constantHeap; + state.m_srvCbvUavDescriptorHeap = &m_srvCbvUavDescriptorHeap; + state.m_fence = &m_fence; + state.m_scopeManager = &m_scopeManager; + state.m_samplerDescriptorHeap = &m_samplerDescriptorHeap; + + return state; +} + + +} // namespace FlexSample
\ No newline at end of file |