-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRootParameteruffer.cpp
59 lines (56 loc) · 1.92 KB
/
RootParameteruffer.cpp
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
#include "D3D12FrameWork/RootParameterBuffer.h"
namespace D3D12FrameWork {
bool RootParameterBuffer::Init(RootParamRegisterDesc const& rpRegDesc,
RootSignature::RSRootParameterDesc const& rpDesc,
D3DDevice* pDev,
uint32_t _bufferCount) {
//assert(rpRegDesc.RangeDescs.size() != 0);
for (auto i = 0u; i < rpRegDesc.RangeDescs.size();i++) {
if (rpDesc.Ranges[i].Type == D3D12_DESCRIPTOR_RANGE_TYPE_CBV) {
auto tmp = std::make_unique<ConstantBufferSet>();
if (!tmp->InitFromRegisterDescWithRange(
rpRegDesc.ConstantBindDesc, rpRegDesc.RangeDescs[i].Registers,
rpDesc.Ranges[i].BaseShaderRegister,
rpDesc.Ranges[i].NumDescriptors,
rpDesc.BuffType,
pDev,
_bufferCount)) {
assert(false);
return false;
}
m_constantRangeBuffers.emplace_back(std::move(tmp));
m_orderedRangeSet.emplace_back(m_constantRangeBuffers.back().get());
}
else if(rpDesc.Ranges[i].Type == D3D12_DESCRIPTOR_RANGE_TYPE_SRV) {
auto tmp = std::make_unique<TextureSet>();
if (!tmp->InitFromRegisterDescWithRange(
rpRegDesc.TextureBindDesc, rpRegDesc.RangeDescs[i].Registers,
rpDesc.Ranges[i].BaseShaderRegister,
rpDesc.Ranges[i].NumDescriptors,
pDev)) {
assert(false);
return false;
}
m_textureRangeBuffers.emplace_back(std::move(tmp));
m_orderedRangeSet.emplace_back(m_textureRangeBuffers.back().get());
}
else if (rpDesc.Ranges[i].Type == D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER) {
auto tmp = std::make_unique<SamplerSet>();
if (!tmp->InitFromRegisterDescWithRange(
rpRegDesc.SamplerBindDesc, rpRegDesc.RangeDescs[i].Registers,
rpDesc.Ranges[i].BaseShaderRegister,
rpDesc.Ranges[i].NumDescriptors,
pDev)) {
assert(false);
return false;
}
m_samplerRangeBuffers.emplace_back(std::move(tmp));
m_orderedRangeSet.emplace_back(m_samplerRangeBuffers.back().get());
}
else {
assert(false);
}
}
return true;
}
}