blob: 28a69f478625dc982bbc5225142fbfa239d77ec5 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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
|