Where possible apply offs/len knowledge when viewing buffers. Refs #224

This commit is contained in:
baldurk
2016-04-02 15:39:27 +02:00
parent f626e627b6
commit 009bfb2c74
6 changed files with 216 additions and 109 deletions
+18 -13
View File
@@ -112,7 +112,8 @@
this.rowOffset = new System.Windows.Forms.ToolStripTextBox();
this.byteOffsLab = new System.Windows.Forms.ToolStripLabel();
this.byteOffset = new System.Windows.Forms.ToolStripTextBox();
this.offsetCancel = new System.Windows.Forms.ToolStripButton();
this.rowRangeLab = new System.Windows.Forms.ToolStripLabel();
this.rowRange = new System.Windows.Forms.ToolStripTextBox();
this.instSep = new System.Windows.Forms.ToolStripSeparator();
this.instLabel = new System.Windows.Forms.ToolStripLabel();
this.instanceIdxToolitem = new System.Windows.Forms.ToolStripTextBox();
@@ -786,7 +787,7 @@
this.flowLayoutPanel2.Controls.Add(this.toolStrip1);
this.flowLayoutPanel2.Location = new System.Drawing.Point(3, 3);
this.flowLayoutPanel2.Name = "flowLayoutPanel2";
this.flowLayoutPanel2.Size = new System.Drawing.Size(728, 25);
this.flowLayoutPanel2.Size = new System.Drawing.Size(831, 25);
this.flowLayoutPanel2.TabIndex = 0;
//
// toolStrip1
@@ -805,13 +806,14 @@
this.rowOffset,
this.byteOffsLab,
this.byteOffset,
this.offsetCancel,
this.rowRangeLab,
this.rowRange,
this.instSep,
this.instLabel,
this.instanceIdxToolitem});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(728, 25);
this.toolStrip1.Size = new System.Drawing.Size(831, 25);
this.toolStrip1.TabIndex = 0;
this.toolStrip1.Text = "toolStrip1";
//
@@ -920,15 +922,17 @@
this.byteOffset.Size = new System.Drawing.Size(60, 25);
this.byteOffset.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.byteOffset_KeyPress);
//
// offsetCancel
// rowRangeLab
//
this.offsetCancel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.offsetCancel.Image = global::renderdocui.Properties.Resources.red_x_16;
this.offsetCancel.ImageTransparentColor = System.Drawing.Color.Magenta;
this.offsetCancel.Name = "offsetCancel";
this.offsetCancel.Size = new System.Drawing.Size(23, 22);
this.offsetCancel.Text = "Reset";
this.offsetCancel.Click += new System.EventHandler(this.offsetCancel_Click);
this.rowRangeLab.Name = "rowRangeLab";
this.rowRangeLab.Size = new System.Drawing.Size(33, 22);
this.rowRangeLab.Text = "Rows";
//
// rowRange
//
this.rowRange.Name = "rowRange";
this.rowRange.Size = new System.Drawing.Size(60, 25);
this.rowRange.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.rowRange_KeyPress);
//
// instSep
//
@@ -1118,7 +1122,6 @@
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStripLabel toolStripLabel2;
private System.Windows.Forms.ToolStripTextBox rowOffset;
private System.Windows.Forms.ToolStripButton offsetCancel;
private System.Windows.Forms.ToolStripSeparator instSep;
private System.Windows.Forms.ToolStripLabel instLabel;
private System.Windows.Forms.ToolStripTextBox instanceIdxToolitem;
@@ -1157,6 +1160,8 @@
private System.Windows.Forms.ToolStripMenuItem selectColumnAsSecondaryToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem selectAlphaAsSecondaryToolStripMenuItem;
private System.Windows.Forms.Label largeBufferWarning;
private System.Windows.Forms.ToolStripLabel rowRangeLab;
private System.Windows.Forms.ToolStripTextBox rowRange;
}
}
+59 -27
View File
@@ -146,15 +146,6 @@ namespace renderdocui.Windows
}
}
private int MaxRowCount
{
get
{
// for now, don't clamp rows on mesh view
return MeshView ? int.MaxValue : 200000;
}
}
// one UI state for each stage
private UIState m_VSIn = new UIState(MeshDataStage.VSIn);
private UIState m_VSOut = new UIState(MeshDataStage.VSOut);
@@ -279,14 +270,19 @@ namespace renderdocui.Windows
instLabel.Visible = instSep.Visible = instanceIdxToolitem.Visible = false;
syncViewsToolItem.Visible = false;
highlightVerts.Visible = false;
byteOffset.Visible = true; byteOffsLab.Visible = true;
rowRange.Visible = true; rowRangeLab.Visible = true;
byteOffset.Text = "0";
rowRange.Text = DefaultMaxRows.ToString();
Text = "Buffer Contents";
}
else
{
byteOffset.Visible = false; byteOffsLab.Visible = false;
rowRange.Visible = false; rowRangeLab.Visible = false;
byteOffset.Text = "0";
rowRange.Text = DefaultMaxRows.ToString();
Text = "Mesh Output";
}
@@ -458,7 +454,7 @@ namespace renderdocui.Windows
previewTab.SelectedIndex = 0;
uint byteoffs = ByteOffset;
ulong byteoffs = ByteOffset;
if (MeshView)
{
@@ -558,7 +554,7 @@ namespace renderdocui.Windows
int curReq = m_ReqID;
uint byteoffs = ByteOffset;
ulong byteoffs = ByteOffset;
m_Core.Renderer.BeginInvoke((ReplayRenderer r) =>
{
@@ -695,25 +691,39 @@ namespace renderdocui.Windows
}
}
private uint ByteOffset
private uint DefaultMaxRows { get { return 200000; } }
private int MaxRowCount
{
get
{
// for now, don't clamp rows on mesh view
if (IsDisposed || MeshView) return int.MaxValue;
int maxrows = 0;
int.TryParse(rowRange.Text, out maxrows);
return maxrows;
}
}
private ulong ByteOffset
{
get
{
if (IsDisposed) return 0;
uint offs = 0;
uint.TryParse(byteOffset.Text, out offs);
ulong offs = 0;
ulong.TryParse(byteOffset.Text, out offs);
return offs;
}
}
#region Get Data Formats/Organisation
public void ViewRawBuffer(bool isBuffer, ResourceId id)
public void ViewRawBuffer(bool isBuffer, ulong offset, ulong size, ResourceId id)
{
ViewRawBuffer(isBuffer, id, "");
ViewRawBuffer(isBuffer, offset, size, id, "");
}
public void ViewRawBuffer(bool isBuffer, ResourceId id, string formatString)
public void ViewRawBuffer(bool isBuffer, ulong offset, ulong size, ResourceId id, string formatString)
{
if (m_Core.CurBuffers == null) return;
@@ -745,7 +755,21 @@ namespace renderdocui.Windows
input.IndexOffset = 0;
largeBufferWarning.Visible = false;
byteOffset.Enabled = false;
byteOffset.Text = offset.ToString();
if (size == ulong.MaxValue)
{
rowRange.Text = DefaultMaxRows.ToString();
}
else
{
uint rows = (uint)(size / input.Strides[0]);
if (rows * input.Strides[0] < size)
rows++;
rowRange.Text = rows.ToString();
}
m_VSIn.m_Input = input;
@@ -755,13 +779,11 @@ namespace renderdocui.Windows
ClearStoredData();
uint byteoffset = ByteOffset;
m_Core.Renderer.BeginInvoke((ReplayRenderer r) =>
{
if (IsDisposed) return;
var contents = RT_FetchBufferContents(MeshDataStage.VSIn, r, input, byteoffset);
var contents = RT_FetchBufferContents(MeshDataStage.VSIn, r, input, offset);
this.BeginInvoke(new Action(() =>
{
@@ -938,7 +960,7 @@ namespace renderdocui.Windows
#region Get Actual Bytes
private Dataset RT_FetchBufferContents(MeshDataStage type, ReplayRenderer r, Input input, uint byteoffs)
private Dataset RT_FetchBufferContents(MeshDataStage type, ReplayRenderer r, Input input, ulong byteoffs)
{
Dataset ret = new Dataset();
@@ -956,7 +978,7 @@ namespace renderdocui.Windows
if(input.Buffers[0] != ResourceId.Null)
ret.Buffers[0] = r.GetBufferData(input.Buffers[0], byteoffs, 0);
else if (input.Buffers[1] != ResourceId.Null)
ret.Buffers[0] = r.GetTextureData(input.Buffers[1], byteoffs, 0);
ret.Buffers[0] = r.GetTextureData(input.Buffers[1], (uint)byteoffs, 0);
ret.Indices = null;
ret.DataIndices = null;
@@ -1688,7 +1710,7 @@ namespace renderdocui.Windows
{
bufView.RowCount = Math.Min(state.m_Rows.Length, MaxRowCount);
if (state.m_Rows.Length > MaxRowCount)
if (state.m_Rows.Length > MaxRowCount && MaxRowCount >= DefaultMaxRows)
largeBufferWarning.Visible = true;
ScrollToRow(bufView, RowOffset);
@@ -3122,7 +3144,7 @@ namespace renderdocui.Windows
byteOffset.Enabled = false;
uint byteoffset = ByteOffset;
ulong byteoffset = ByteOffset;
m_Core.Renderer.BeginInvoke((ReplayRenderer r) =>
{
@@ -3140,7 +3162,7 @@ namespace renderdocui.Windows
private void largeBufferWarning_Click(object sender, EventArgs e)
{
byteOffset.Text = (ByteOffset + m_VSIn.m_Input.Strides[0]*MaxRowCount).ToString();
byteOffset.Text = (ByteOffset + (ulong)(m_VSIn.m_Input.Strides[0]*MaxRowCount)).ToString();
SetByteOffset();
}
@@ -3152,6 +3174,16 @@ namespace renderdocui.Windows
}
}
private void rowRange_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '\n' || e.KeyChar == '\r')
{
if (MaxRowCount > DefaultMaxRows)
rowRange.Text = DefaultMaxRows.ToString();
SetByteOffset();
}
}
private void offsetCancel_Click(object sender, EventArgs e)
{
rowOffset.Text = "0";
@@ -3175,7 +3207,7 @@ namespace renderdocui.Windows
id = GetUIState(MeshDataStage.VSIn).m_Input.Buffers[1];
}
ViewRawBuffer(isBuffer, id, formatText);
ViewRawBuffer(isBuffer, ByteOffset, ulong.MaxValue, id, formatText);
}
private void ShowFormatSpecifier()
@@ -48,6 +48,18 @@ namespace renderdocui.Windows.PipelineState
// keep track of the VB nodes (we want to be able to highlight them easily on hover)
private List<TreelistView.Node> m_VBNodes = new List<TreelistView.Node>();
private struct IABufferTag
{
public IABufferTag(ResourceId i, ulong offs)
{
id = i;
offset = offs;
}
public ResourceId id;
public ulong offset;
};
public D3D11PipelineStateViewer(Core core, DockContent c)
{
InitializeComponent();
@@ -826,7 +838,7 @@ namespace renderdocui.Windows.PipelineState
node.Image = global::renderdocui.Properties.Resources.action;
node.HoverImage = global::renderdocui.Properties.Resources.action_hover;
node.Tag = state.m_IA.ibuffer.Buffer;
node.Tag = new IABufferTag(state.m_IA.ibuffer.Buffer, draw.indexOffset);
if (!ibufferUsed)
InactiveRow(node);
@@ -843,7 +855,7 @@ namespace renderdocui.Windows.PipelineState
node.Image = global::renderdocui.Properties.Resources.action;
node.HoverImage = global::renderdocui.Properties.Resources.action_hover;
node.Tag = state.m_IA.ibuffer.Buffer;
node.Tag = new IABufferTag(state.m_IA.ibuffer.Buffer, draw.indexOffset);
EmptyRow(node);
@@ -889,7 +901,7 @@ namespace renderdocui.Windows.PipelineState
node.Image = global::renderdocui.Properties.Resources.action;
node.HoverImage = global::renderdocui.Properties.Resources.action_hover;
node.Tag = v.Buffer;
node.Tag = new IABufferTag(v.Buffer, v.Offset);
if (!filledSlot)
EmptyRow(node);
@@ -1559,7 +1571,7 @@ namespace renderdocui.Windows.PipelineState
if (tex.resType == ShaderResourceType.Buffer)
{
var viewer = new BufferViewer(m_Core, false);
viewer.ViewRawBuffer(false, tex.ID);
viewer.ViewRawBuffer(false, 0, ulong.MaxValue, tex.ID);
viewer.Show(m_DockContent.DockPanel);
}
else
@@ -1685,9 +1697,9 @@ namespace renderdocui.Windows.PipelineState
{
var viewer = new BufferViewer(m_Core, false);
if (format.Length == 0)
viewer.ViewRawBuffer(true, buf.ID);
viewer.ViewRawBuffer(true, 0, ulong.MaxValue, buf.ID);
else
viewer.ViewRawBuffer(true, buf.ID, format);
viewer.ViewRawBuffer(true, 0, ulong.MaxValue, buf.ID, format);
viewer.Show(m_DockContent.DockPanel);
}
}
@@ -1775,14 +1787,14 @@ namespace renderdocui.Windows.PipelineState
private void iabuffers_NodeDoubleClicked(TreelistView.Node node)
{
if (node.Tag is ResourceId)
if (node.Tag is IABufferTag)
{
ResourceId id = (ResourceId)node.Tag;
IABufferTag tag = (IABufferTag)node.Tag;
if (id != ResourceId.Null)
if (tag.id != ResourceId.Null)
{
var viewer = new BufferViewer(m_Core, false);
viewer.ViewRawBuffer(true, id);
viewer.ViewRawBuffer(true, tag.offset, ulong.MaxValue, tag.id);
viewer.Show(m_DockContent.DockPanel);
}
}
@@ -2141,8 +2153,8 @@ namespace renderdocui.Windows.PipelineState
if (stage.ConstantBuffers.Length < slot)
return;
var buf = stage.ConstantBuffers[slot].Buffer;
viewer.ViewRawBuffer(true, buf);
var buf = stage.ConstantBuffers[slot];
viewer.ViewRawBuffer(true, buf.VecOffset * 4 * sizeof(float), buf.VecCount * 4 * sizeof(float), buf.Buffer);
viewer.Show(m_DockContent.DockPanel);
return;
@@ -53,12 +53,31 @@ namespace renderdocui.Windows.PipelineState
public FetchBuffer buf;
};
private struct IABufferTag
{
public IABufferTag(ResourceId i, ulong offs)
{
id = i;
offset = offs;
}
public ResourceId id;
public ulong offset;
};
private Core m_Core;
private DockContent m_DockContent;
// keep track of the VB nodes (we want to be able to highlight them easily on hover)
private List<TreelistView.Node> m_VBNodes = new List<TreelistView.Node>();
private enum GLReadWriteType
{
Atomic,
SSBO,
Image,
};
public GLPipelineStateViewer(Core core, DockContent c)
{
InitializeComponent();
@@ -226,6 +245,31 @@ namespace renderdocui.Windows.PipelineState
readwrites.Nodes.Clear();
}
private GLReadWriteType GetGLReadWriteType(ShaderResource res)
{
GLReadWriteType ret = GLReadWriteType.Image;
if (res.IsTexture)
{
ret = GLReadWriteType.Image;
}
else
{
if (res.variableType.descriptor.rows == 1 &&
res.variableType.descriptor.cols == 1 &&
res.variableType.descriptor.type == VarType.UInt)
{
ret = GLReadWriteType.Atomic;
}
else
{
ret = GLReadWriteType.SSBO;
}
}
return ret;
}
// Set a shader stage's resources and values
private void SetShaderState(FetchTexture[] texs, FetchBuffer[] bufs,
GLPipelineState state, GLPipelineState.ShaderStage stage,
@@ -562,45 +606,28 @@ namespace renderdocui.Windows.PipelineState
{
int bindPoint = stage.BindpointMapping.ReadWriteResources[i].bind;
bool atomic = false;
bool ssbo = false;
bool image = false;
GLReadWriteType readWriteType = GetGLReadWriteType(res);
GLPipelineState.Buffer bf = null;
GLPipelineState.ImageLoadStore im = null;
ResourceId id = ResourceId.Null;
if (res.IsTexture)
if (readWriteType == GLReadWriteType.Image && bindPoint >= 0 && bindPoint < state.Images.Length)
{
image = true;
if (bindPoint >= 0 && bindPoint < state.Images.Length)
{
im = state.Images[bindPoint];
id = state.Images[bindPoint].Resource;
}
im = state.Images[bindPoint];
id = state.Images[bindPoint].Resource;
}
else
if (readWriteType == GLReadWriteType.Atomic && bindPoint >= 0 && bindPoint < state.AtomicBuffers.Length)
{
if (res.variableType.descriptor.rows == 1 &&
res.variableType.descriptor.cols == 1 &&
res.variableType.descriptor.type == VarType.UInt)
{
atomic = true;
if (bindPoint >= 0 && bindPoint < state.AtomicBuffers.Length)
{
bf = state.AtomicBuffers[bindPoint];
id = state.AtomicBuffers[bindPoint].Resource;
}
}
else
{
ssbo = true;
if (bindPoint >= 0 && bindPoint < state.ShaderStorageBuffers.Length)
{
bf = state.ShaderStorageBuffers[bindPoint];
id = state.ShaderStorageBuffers[bindPoint].Resource;
}
}
bf = state.AtomicBuffers[bindPoint];
id = state.AtomicBuffers[bindPoint].Resource;
}
if (readWriteType == GLReadWriteType.SSBO && bindPoint >= 0 && bindPoint < state.ShaderStorageBuffers.Length)
{
bf = state.ShaderStorageBuffers[bindPoint];
id = state.ShaderStorageBuffers[bindPoint].Resource;
}
bool filledSlot = id != ResourceId.Null;
@@ -612,9 +639,9 @@ namespace renderdocui.Windows.PipelineState
(showEmpty.Checked && !filledSlot) // it's empty, and we have "show empty"
)
{
string binding = image ? "Image" :
atomic ? "Atomic" :
ssbo ? "SSBO" :
string binding = readWriteType == GLReadWriteType.Image ? "Image" :
readWriteType == GLReadWriteType.Atomic ? "Atomic" :
readWriteType == GLReadWriteType.SSBO ? "SSBO" :
"Unknown";
string slotname = String.Format("{0}: {1}", bindPoint, res.name);
@@ -953,7 +980,7 @@ namespace renderdocui.Windows.PipelineState
node.Image = global::renderdocui.Properties.Resources.action;
node.HoverImage = global::renderdocui.Properties.Resources.action_hover;
node.Tag = state.m_VtxIn.ibuffer;
node.Tag = new IABufferTag(state.m_VtxIn.ibuffer, draw.indexOffset);
if (!ibufferUsed)
InactiveRow(node);
@@ -970,7 +997,7 @@ namespace renderdocui.Windows.PipelineState
node.Image = global::renderdocui.Properties.Resources.action;
node.HoverImage = global::renderdocui.Properties.Resources.action_hover;
node.Tag = state.m_VtxIn.ibuffer;
node.Tag = new IABufferTag(state.m_VtxIn.ibuffer, draw.indexOffset);
EmptyRow(node);
@@ -1017,7 +1044,7 @@ namespace renderdocui.Windows.PipelineState
node.Image = global::renderdocui.Properties.Resources.action;
node.HoverImage = global::renderdocui.Properties.Resources.action_hover;
node.Tag = v.Buffer;
node.Tag = new IABufferTag(v.Buffer, v.Offset);
if (!filledSlot)
EmptyRow(node);
@@ -1633,7 +1660,7 @@ namespace renderdocui.Windows.PipelineState
if (tex.resType == ShaderResourceType.Buffer)
{
var viewer = new BufferViewer(m_Core, false);
viewer.ViewRawBuffer(false, tex.ID);
viewer.ViewRawBuffer(false, 0, ulong.MaxValue, tex.ID);
viewer.Show(m_DockContent.DockPanel);
}
else
@@ -1654,6 +1681,22 @@ namespace renderdocui.Windows.PipelineState
var deets = stage.ShaderDetails;
ShaderResource r = deets.ReadWriteResources[rwtag.idx];
var bindpoint = stage.BindpointMapping.ReadWriteResources[rwtag.idx];
GLReadWriteType readWriteType = GetGLReadWriteType(r);
ulong offset = 0;
ulong size = ulong.MaxValue;
if (readWriteType == GLReadWriteType.SSBO)
{
offset = m_Core.CurGLPipelineState.ShaderStorageBuffers[bindpoint.bind].Offset;
size = m_Core.CurGLPipelineState.ShaderStorageBuffers[bindpoint.bind].Size;
}
if (readWriteType == GLReadWriteType.Atomic)
{
offset = m_Core.CurGLPipelineState.AtomicBuffers[bindpoint.bind].Offset;
size = m_Core.CurGLPipelineState.AtomicBuffers[bindpoint.bind].Size;
}
if (deets != null)
{
@@ -1672,9 +1715,9 @@ namespace renderdocui.Windows.PipelineState
{
var viewer = new BufferViewer(m_Core, false);
if (format.Length == 0)
viewer.ViewRawBuffer(true, buf.ID);
viewer.ViewRawBuffer(true, offset, size, buf.ID);
else
viewer.ViewRawBuffer(true, buf.ID, format);
viewer.ViewRawBuffer(true, offset, size, buf.ID, format);
viewer.Show(m_DockContent.DockPanel);
}
}
@@ -1758,14 +1801,14 @@ namespace renderdocui.Windows.PipelineState
private void iabuffers_NodeDoubleClicked(TreelistView.Node node)
{
if (node.Tag is ResourceId)
if (node.Tag is IABufferTag)
{
ResourceId id = (ResourceId)node.Tag;
IABufferTag tag = (IABufferTag)node.Tag;
if (id != ResourceId.Null)
if (tag.id != ResourceId.Null)
{
var viewer = new BufferViewer(m_Core, false);
viewer.ViewRawBuffer(true, id);
viewer.ViewRawBuffer(true, tag.offset, ulong.MaxValue, tag.id);
viewer.Show(m_DockContent.DockPanel);
}
}
@@ -49,6 +49,18 @@ namespace renderdocui.Windows.PipelineState
private List<TreelistView.Node> m_VBNodes = new List<TreelistView.Node>();
private List<TreelistView.Node> m_BindNodes = new List<TreelistView.Node>();
private struct IABufferTag
{
public IABufferTag(ResourceId i, ulong offs)
{
id = i;
offset = offs;
}
public ResourceId id;
public ulong offset;
};
class SamplerData
{
public SamplerData(TreelistView.Node n) { node = n; }
@@ -65,10 +77,13 @@ namespace renderdocui.Windows.PipelineState
class BufferResTag
{
public BufferResTag(bool rw, UInt32 b, ResourceId i) { rwRes = rw; bindPoint = b; ID = i; }
public BufferResTag(bool rw, UInt32 b, ResourceId id, ulong offs, ulong sz)
{ rwRes = rw; bindPoint = b; ID = id; offset = offs; size = sz; }
public bool rwRes;
public UInt32 bindPoint;
public ResourceId ID;
public ulong offset;
public ulong size;
};
private Dictionary<TreelistView.Node, TreelistView.Node> m_CombinedImageSamplers = new Dictionary<TreelistView.Node, TreelistView.Node>();
@@ -494,7 +509,7 @@ namespace renderdocui.Windows.PipelineState
name = bufs[t].name;
restype = ShaderResourceType.Buffer;
tag = new BufferResTag(isrw, bindPoint, bufs[t].ID);
tag = new BufferResTag(isrw, bindPoint, bufs[t].ID, descriptorBind.offset, descriptorBind.size);
isbuf = true;
}
@@ -1030,7 +1045,7 @@ namespace renderdocui.Windows.PipelineState
node.Image = global::renderdocui.Properties.Resources.action;
node.HoverImage = global::renderdocui.Properties.Resources.action_hover;
node.Tag = state.IA.ibuffer.buf;
node.Tag = new IABufferTag(state.IA.ibuffer.buf, draw.indexOffset);
if (!ibufferUsed)
InactiveRow(node);
@@ -1047,7 +1062,7 @@ namespace renderdocui.Windows.PipelineState
node.Image = global::renderdocui.Properties.Resources.action;
node.HoverImage = global::renderdocui.Properties.Resources.action_hover;
node.Tag = state.IA.ibuffer.buf;
node.Tag = new IABufferTag(state.IA.ibuffer.buf, draw.indexOffset);
EmptyRow(node);
@@ -1120,7 +1135,7 @@ namespace renderdocui.Windows.PipelineState
node.Image = global::renderdocui.Properties.Resources.action;
node.HoverImage = global::renderdocui.Properties.Resources.action_hover;
node.Tag = vbuff != null ? vbuff.buffer : ResourceId.Null;
node.Tag = new IABufferTag(vbuff != null ? vbuff.buffer : ResourceId.Null, vbuff != null ? vbuff.offset : 0);
if (!filledSlot || bind == null || vbuff == null)
EmptyRow(node);
@@ -1464,7 +1479,7 @@ namespace renderdocui.Windows.PipelineState
if (tex.resType == ShaderResourceType.Buffer)
{
var viewer = new BufferViewer(m_Core, false);
viewer.ViewRawBuffer(false, tex.ID);
viewer.ViewRawBuffer(false, 0, ulong.MaxValue, tex.ID);
viewer.Show(m_DockContent.DockPanel);
}
else
@@ -1499,7 +1514,7 @@ namespace renderdocui.Windows.PipelineState
if (buf.ID != ResourceId.Null)
{
var viewer = new BufferViewer(m_Core, false);
viewer.ViewRawBuffer(true, buf.ID, format);
viewer.ViewRawBuffer(true, buf.offset, buf.size, buf.ID, format);
viewer.Show(m_DockContent.DockPanel);
}
}
@@ -1587,14 +1602,14 @@ namespace renderdocui.Windows.PipelineState
private void iabuffers_NodeDoubleClicked(TreelistView.Node node)
{
if (node.Tag is ResourceId)
if (node.Tag is IABufferTag)
{
ResourceId id = (ResourceId)node.Tag;
IABufferTag tag = (IABufferTag)node.Tag;
if (id != ResourceId.Null)
if (tag.id != ResourceId.Null)
{
var viewer = new BufferViewer(m_Core, false);
viewer.ViewRawBuffer(true, id);
viewer.ViewRawBuffer(true, tag.offset, ulong.MaxValue, tag.id);
viewer.Show(m_DockContent.DockPanel);
}
}
+2 -2
View File
@@ -741,7 +741,7 @@ namespace renderdocui.Windows
if (m_Core.CurBuffers[i].ID == ID)
{
var viewer = new BufferViewer(m_Core, false);
viewer.ViewRawBuffer(true, ID);
viewer.ViewRawBuffer(true, 0, ulong.MaxValue, ID);
viewer.Show(DockPanel);
return;
}
@@ -3385,7 +3385,7 @@ namespace renderdocui.Windows
private void viewTexBuffer_Click(object sender, EventArgs e)
{
var viewer = new BufferViewer(m_Core, false);
viewer.ViewRawBuffer(false, CurrentTexture.ID);
viewer.ViewRawBuffer(false, 0, ulong.MaxValue, CurrentTexture.ID);
viewer.Show(this.DockPanel);
}