mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-07-30 11:21:01 +00:00
Pass through resource view element size in D3D11 pipeline state
* This lets us calculate the offset and visible length when opening a buffer view from a resource binding.
This commit is contained in:
@@ -82,7 +82,7 @@ struct D3D11PipelineState
|
||||
{
|
||||
ResourceView() : View(), Resource(),
|
||||
Format(),
|
||||
Structured(false), BufferStructCount(0),
|
||||
Structured(false), BufferStructCount(0), ElementSize(0),
|
||||
ElementOffset(0), ElementWidth(0),
|
||||
FirstElement(0), NumElements(0),
|
||||
Flags(0),
|
||||
@@ -96,6 +96,7 @@ struct D3D11PipelineState
|
||||
|
||||
bool32 Structured;
|
||||
uint32_t BufferStructCount;
|
||||
uint32_t ElementSize;
|
||||
|
||||
// Buffer (SRV)
|
||||
uint32_t ElementOffset;
|
||||
|
||||
@@ -648,6 +648,8 @@ D3D11PipelineState D3D11Replay::MakePipelineState()
|
||||
view.Structured = false;
|
||||
view.BufferStructCount = 0;
|
||||
|
||||
view.ElementSize = desc.Format == DXGI_FORMAT_UNKNOWN ? 1 : GetByteSize(1, 1, 1, desc.Format, 0);
|
||||
|
||||
view.Resource = rm->GetOriginalID(GetIDForResource(res));
|
||||
|
||||
view.Type = ToStr::Get(desc.ViewDimension);
|
||||
@@ -658,6 +660,14 @@ D3D11PipelineState D3D11Replay::MakePipelineState()
|
||||
view.NumElements = desc.Buffer.NumElements;
|
||||
view.ElementOffset = desc.Buffer.ElementOffset;
|
||||
view.ElementWidth = desc.Buffer.ElementWidth;
|
||||
|
||||
D3D11_BUFFER_DESC bufdesc;
|
||||
((ID3D11Buffer *)res)->GetDesc(&bufdesc);
|
||||
|
||||
view.Structured = bufdesc.StructureByteStride > 0 && desc.Format == DXGI_FORMAT_UNKNOWN;
|
||||
|
||||
if(view.Structured)
|
||||
view.ElementSize = bufdesc.StructureByteStride;
|
||||
}
|
||||
else if(desc.ViewDimension == D3D11_SRV_DIMENSION_BUFFEREX)
|
||||
{
|
||||
@@ -737,9 +747,15 @@ D3D11PipelineState D3D11Replay::MakePipelineState()
|
||||
view.Structured = false;
|
||||
view.BufferStructCount = 0;
|
||||
|
||||
view.ElementSize = GetByteSize(1, 1, 1, desc.Format, 0);
|
||||
|
||||
if(desc.ViewDimension == D3D11_UAV_DIMENSION_BUFFER &&
|
||||
(desc.Buffer.Flags & (D3D11_BUFFER_UAV_FLAG_APPEND|D3D11_BUFFER_UAV_FLAG_COUNTER)))
|
||||
{
|
||||
D3D11_BUFFER_DESC bufdesc;
|
||||
((ID3D11Buffer *)res)->GetDesc(&bufdesc);
|
||||
|
||||
view.ElementSize = bufdesc.StructureByteStride;
|
||||
view.Structured = true;
|
||||
view.BufferStructCount = m_pDevice->GetDebugManager()->GetStructCount(rs->CSUAVs[s]);
|
||||
}
|
||||
@@ -919,6 +935,7 @@ D3D11PipelineState D3D11Replay::MakePipelineState()
|
||||
|
||||
view.Structured = false;
|
||||
view.BufferStructCount = 0;
|
||||
view.ElementSize = desc.Format == DXGI_FORMAT_UNKNOWN ? 1 : GetByteSize(1, 1, 1, desc.Format, 0);
|
||||
|
||||
view.Resource = rm->GetOriginalID(GetIDForResource(res));
|
||||
|
||||
@@ -985,6 +1002,7 @@ D3D11PipelineState D3D11Replay::MakePipelineState()
|
||||
|
||||
view.Structured = false;
|
||||
view.BufferStructCount = 0;
|
||||
view.ElementSize = desc.Format == DXGI_FORMAT_UNKNOWN ? 1 : GetByteSize(1, 1, 1, desc.Format, 0);
|
||||
|
||||
if(desc.Buffer.Flags & (D3D11_BUFFER_UAV_FLAG_APPEND|D3D11_BUFFER_UAV_FLAG_COUNTER))
|
||||
{
|
||||
@@ -1056,6 +1074,7 @@ D3D11PipelineState D3D11Replay::MakePipelineState()
|
||||
|
||||
view.Structured = false;
|
||||
view.BufferStructCount = 0;
|
||||
view.ElementSize = desc.Format == DXGI_FORMAT_UNKNOWN ? 1 : GetByteSize(1, 1, 1, desc.Format, 0);
|
||||
|
||||
ret.m_OM.DepthReadOnly = false;
|
||||
ret.m_OM.StencilReadOnly = false;
|
||||
|
||||
@@ -126,6 +126,7 @@ namespace renderdoc
|
||||
|
||||
public bool Structured;
|
||||
public UInt32 BufferStructCount;
|
||||
public UInt32 ElementSize;
|
||||
|
||||
// Buffer (SRV)
|
||||
public UInt32 ElementOffset;
|
||||
|
||||
@@ -1698,9 +1698,9 @@ namespace renderdocui.Windows.PipelineState
|
||||
{
|
||||
var viewer = new BufferViewer(m_Core, false);
|
||||
if (format.Length == 0)
|
||||
viewer.ViewRawBuffer(true, 0, ulong.MaxValue, buf.ID);
|
||||
viewer.ViewRawBuffer(true, view.FirstElement * view.ElementSize, view.NumElements * view.ElementSize, buf.ID);
|
||||
else
|
||||
viewer.ViewRawBuffer(true, 0, ulong.MaxValue, buf.ID, format);
|
||||
viewer.ViewRawBuffer(true, view.FirstElement * view.ElementSize, view.NumElements * view.ElementSize, buf.ID, format);
|
||||
viewer.Show(m_DockContent.DockPanel);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user