Clarify root signature index in D3D12 pipeline view

* Internally we split ranges, but for display we should use the original root
  signature index.
This commit is contained in:
baldurk
2021-10-04 18:39:33 +01:00
parent c24dd2e7aa
commit c070dfd847
4 changed files with 45 additions and 43 deletions
+8 -7
View File
@@ -472,17 +472,18 @@ struct RootSignatureRange
bool operator==(const RootSignatureRange &o) const
{
return immediate == o.immediate && rootElement == o.rootElement && visibility == o.visibility &&
registerSpace == o.registerSpace && dynamicallyUsedCount == o.dynamicallyUsedCount &&
firstUsedIndex == o.firstUsedIndex && lastUsedIndex == o.lastUsedIndex &&
constantBuffers == o.constantBuffers && samplers == o.samplers && views == o.views;
return immediate == o.immediate && rootSignatureIndex == o.rootSignatureIndex &&
visibility == o.visibility && registerSpace == o.registerSpace &&
dynamicallyUsedCount == o.dynamicallyUsedCount && firstUsedIndex == o.firstUsedIndex &&
lastUsedIndex == o.lastUsedIndex && constantBuffers == o.constantBuffers &&
samplers == o.samplers && views == o.views;
}
bool operator<(const RootSignatureRange &o) const
{
if(!(immediate == o.immediate))
return immediate < o.immediate;
if(!(rootElement == o.rootElement))
return rootElement < o.rootElement;
if(!(rootSignatureIndex == o.rootSignatureIndex))
return rootSignatureIndex < o.rootSignatureIndex;
if(!(visibility == o.visibility))
return visibility < o.visibility;
if(!(registerSpace == o.registerSpace))
@@ -505,7 +506,7 @@ struct RootSignatureRange
DOCUMENT("``True`` if this root element is a root constant (i.e. not in a table).");
bool immediate = false;
DOCUMENT("The index in the original root signature that this descriptor came from.");
uint32_t rootElement = ~0U;
uint32_t rootSignatureIndex = ~0U;
DOCUMENT("The :class:`BindType` contained by this element.");
BindType type = BindType::Unknown;
DOCUMENT("The :class:`ShaderStageMask` of this element.");
+6 -6
View File
@@ -979,7 +979,7 @@ void D3D12Replay::FillRootElements(uint32_t eventId, const D3D12RenderState::Roo
rootElements.resize_for_index(ridx);
D3D12Pipe::RootSignatureRange &element = rootElements[ridx++];
element.immediate = true;
element.rootElement = (uint32_t)rootEl;
element.rootSignatureIndex = (uint32_t)rootEl;
element.type = BindType::ConstantBuffer;
element.registerSpace = p.Constants.RegisterSpace;
element.visibility = ToShaderStageMask(p.ShaderVisibility);
@@ -1010,7 +1010,7 @@ void D3D12Replay::FillRootElements(uint32_t eventId, const D3D12RenderState::Roo
rootElements.resize_for_index(ridx);
D3D12Pipe::RootSignatureRange &element = rootElements[ridx++];
element.immediate = true;
element.rootElement = (uint32_t)rootEl;
element.rootSignatureIndex = (uint32_t)rootEl;
element.type = BindType::ConstantBuffer;
element.registerSpace = p.Descriptor.RegisterSpace;
element.visibility = ToShaderStageMask(p.ShaderVisibility);
@@ -1043,7 +1043,7 @@ void D3D12Replay::FillRootElements(uint32_t eventId, const D3D12RenderState::Roo
rootElements.resize_for_index(ridx);
D3D12Pipe::RootSignatureRange &element = rootElements[ridx++];
element.immediate = true;
element.rootElement = (uint32_t)rootEl;
element.rootSignatureIndex = (uint32_t)rootEl;
element.type = BindType::ReadOnlyResource;
element.registerSpace = p.Descriptor.RegisterSpace;
element.visibility = ToShaderStageMask(p.ShaderVisibility);
@@ -1083,7 +1083,7 @@ void D3D12Replay::FillRootElements(uint32_t eventId, const D3D12RenderState::Roo
rootElements.resize_for_index(ridx);
D3D12Pipe::RootSignatureRange &element = rootElements[ridx++];
element.immediate = true;
element.rootElement = (uint32_t)rootEl;
element.rootSignatureIndex = (uint32_t)rootEl;
element.type = BindType::ReadWriteResource;
element.registerSpace = p.Descriptor.RegisterSpace;
element.visibility = ToShaderStageMask(p.ShaderVisibility);
@@ -1145,7 +1145,7 @@ void D3D12Replay::FillRootElements(uint32_t eventId, const D3D12RenderState::Roo
D3D12Pipe::RootSignatureRange &element = rootElements[ridx++];
element.immediate = false;
element.rootElement = (uint32_t)rootEl;
element.rootSignatureIndex = (uint32_t)rootEl;
element.registerSpace = range.RegisterSpace;
element.visibility = ToShaderStageMask(p.ShaderVisibility);
@@ -1364,7 +1364,7 @@ void D3D12Replay::FillRootElements(uint32_t eventId, const D3D12RenderState::Roo
rootElements.resize_for_index(ridx);
D3D12Pipe::RootSignatureRange &element = rootElements[ridx++];
element.immediate = true;
element.rootElement = (uint32_t)i;
element.rootSignatureIndex = (uint32_t)i;
element.type = BindType::Sampler;
element.registerSpace = sampDesc.RegisterSpace;
element.visibility = ToShaderStageMask(sampDesc.ShaderVisibility);
+1 -1
View File
@@ -1370,7 +1370,7 @@ template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::RootSignatureRange &el)
{
SERIALISE_MEMBER(immediate);
SERIALISE_MEMBER(rootElement);
SERIALISE_MEMBER(rootSignatureIndex);
SERIALISE_MEMBER(type);
SERIALISE_MEMBER(visibility);
SERIALISE_MEMBER(registerSpace);