From 8938c718539de18e7ed39b35f2e7e0f863ceed94 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 12 Feb 2015 21:15:02 +0000 Subject: [PATCH] Texture buffers now default to viewing in the buffer not texture viewer * The pipeline state windows will open up the buffer viewer instead of the texture viewer to show the contents of texture buffers. --- renderdocui/Windows/BufferViewer.cs | 28 +++++++++++++------ .../PipelineState/D3D11PipelineStateViewer.cs | 26 +++++++++++------ .../PipelineState/GLPipelineStateViewer.cs | 23 ++++++++++----- renderdocui/Windows/TextureViewer.cs | 2 +- 4 files changed, 54 insertions(+), 25 deletions(-) diff --git a/renderdocui/Windows/BufferViewer.cs b/renderdocui/Windows/BufferViewer.cs index 38c6e6955..dae7dab88 100644 --- a/renderdocui/Windows/BufferViewer.cs +++ b/renderdocui/Windows/BufferViewer.cs @@ -646,12 +646,12 @@ namespace renderdocui.Windows #region Get Data Formats/Organisation - public void ViewRawBuffer(ResourceId buff) + public void ViewRawBuffer(bool isBuffer, ResourceId id) { - ViewRawBuffer(buff, ""); + ViewRawBuffer(isBuffer, id, ""); } - public void ViewRawBuffer(ResourceId buff, string formatString) + public void ViewRawBuffer(bool isBuffer, ResourceId id, string formatString) { if (m_Core.CurBuffers == null) return; @@ -660,7 +660,7 @@ namespace renderdocui.Windows Text = "Buffer Contents"; foreach (var b in m_Core.CurBuffers) { - if (b.ID == buff) + if (b.ID == id) { Text = b.name + " - Contents"; break; @@ -674,7 +674,7 @@ namespace renderdocui.Windows FormatElement[] elems = FormatElement.ParseFormatString(formatString, true, out errors); input.Strides = new uint[] { elems.Last().offset + elems.Last().ByteSize }; - input.Buffers = new ResourceId[] { buff }; + input.Buffers = new ResourceId[] { isBuffer ? id : ResourceId.Null, isBuffer ? ResourceId.Null : id }; input.Offsets = new uint[] { 0 }; input.IndexBuffer = ResourceId.Null; input.BufferFormats = elems; @@ -855,11 +855,14 @@ namespace renderdocui.Windows if (!MeshView) { - if (input != null && input.Buffers[0] != ResourceId.Null) + if (input != null && (input.Buffers[0] != ResourceId.Null || input.Buffers[1] != ResourceId.Null)) { ret.Buffers = new byte[1][]; - ret.Buffers[0] = r.GetBufferData(input.Buffers[0], 0, 0); + if(input.Buffers[0] != ResourceId.Null) + ret.Buffers[0] = r.GetBufferData(input.Buffers[0], 0, 0); + else if (input.Buffers[1] != ResourceId.Null) + ret.Buffers[0] = r.GetTextureData(input.Buffers[1], 0, 0); ret.Indices = null; ret.IndexCount = (uint)ret.Buffers[0].Length / input.Strides[0]; @@ -2717,7 +2720,16 @@ namespace renderdocui.Windows public void ProcessBufferFormat(string formatText) { - ViewRawBuffer(GetUIState(MeshDataStage.VSIn).m_Input.Buffers[0], formatText); + ResourceId id = GetUIState(MeshDataStage.VSIn).m_Input.Buffers[0]; + bool isBuffer = true; + + if (id == ResourceId.Null) + { + isBuffer = false; + id = GetUIState(MeshDataStage.VSIn).m_Input.Buffers[1]; + } + + ViewRawBuffer(isBuffer, id, formatText); } private void ShowFormatSpecifier() diff --git a/renderdocui/Windows/PipelineState/D3D11PipelineStateViewer.cs b/renderdocui/Windows/PipelineState/D3D11PipelineStateViewer.cs index 1e0c74f5b..e9b44c2af 100644 --- a/renderdocui/Windows/PipelineState/D3D11PipelineStateViewer.cs +++ b/renderdocui/Windows/PipelineState/D3D11PipelineStateViewer.cs @@ -1458,11 +1458,19 @@ namespace renderdocui.Windows.PipelineState { FetchTexture tex = (FetchTexture)tag; - var viewer = m_Core.GetTextureViewer(); - - viewer.Show(m_DockContent.DockPanel); - if (!viewer.IsDisposed) - viewer.ViewTexture(tex.ID, true); + if (tex.resType == ShaderResourceType.Buffer) + { + var viewer = new BufferViewer(m_Core, false); + viewer.ViewRawBuffer(false, tex.ID); + viewer.Show(m_DockContent.DockPanel); + } + else + { + var viewer = m_Core.GetTextureViewer(); + viewer.Show(m_DockContent.DockPanel); + if (!viewer.IsDisposed) + viewer.ViewTexture(tex.ID, true); + } } else if(tag is FetchBuffer) { @@ -1581,9 +1589,9 @@ namespace renderdocui.Windows.PipelineState { var viewer = new BufferViewer(m_Core, false); if (format.Length == 0) - viewer.ViewRawBuffer(buf.ID); + viewer.ViewRawBuffer(true, buf.ID); else - viewer.ViewRawBuffer(buf.ID, format); + viewer.ViewRawBuffer(true, buf.ID, format); viewer.Show(m_DockContent.DockPanel); } } @@ -1661,7 +1669,7 @@ namespace renderdocui.Windows.PipelineState if (id != ResourceId.Null) { var viewer = new BufferViewer(m_Core, false); - viewer.ViewRawBuffer(id); + viewer.ViewRawBuffer(true, id); viewer.Show(m_DockContent.DockPanel); } } @@ -2004,7 +2012,7 @@ namespace renderdocui.Windows.PipelineState return; var buf = stage.ConstantBuffers[slot].Buffer; - viewer.ViewRawBuffer(buf); + viewer.ViewRawBuffer(true, buf); viewer.Show(m_DockContent.DockPanel); return; diff --git a/renderdocui/Windows/PipelineState/GLPipelineStateViewer.cs b/renderdocui/Windows/PipelineState/GLPipelineStateViewer.cs index 4a296fc5b..8880faa66 100644 --- a/renderdocui/Windows/PipelineState/GLPipelineStateViewer.cs +++ b/renderdocui/Windows/PipelineState/GLPipelineStateViewer.cs @@ -1595,10 +1595,19 @@ namespace renderdocui.Windows.PipelineState { FetchTexture tex = (FetchTexture)tag; - var viewer = m_Core.GetTextureViewer(); - viewer.Show(m_DockContent.DockPanel); - if (!viewer.IsDisposed) - viewer.ViewTexture(tex.ID, true); + if (tex.resType == ShaderResourceType.Buffer) + { + var viewer = new BufferViewer(m_Core, false); + viewer.ViewRawBuffer(false, tex.ID); + viewer.Show(m_DockContent.DockPanel); + } + else + { + var viewer = m_Core.GetTextureViewer(); + viewer.Show(m_DockContent.DockPanel); + if (!viewer.IsDisposed) + viewer.ViewTexture(tex.ID, true); + } } else if(tag is ReadWriteTag) { @@ -1628,9 +1637,9 @@ namespace renderdocui.Windows.PipelineState { var viewer = new BufferViewer(m_Core, false); if (format.Length == 0) - viewer.ViewRawBuffer(buf.ID); + viewer.ViewRawBuffer(true, buf.ID); else - viewer.ViewRawBuffer(buf.ID, format); + viewer.ViewRawBuffer(true, buf.ID, format); viewer.Show(m_DockContent.DockPanel); } } @@ -1662,7 +1671,7 @@ namespace renderdocui.Windows.PipelineState if (id != ResourceId.Null) { var viewer = new BufferViewer(m_Core, false); - viewer.ViewRawBuffer(id); + viewer.ViewRawBuffer(true, id); viewer.Show(m_DockContent.DockPanel); } } diff --git a/renderdocui/Windows/TextureViewer.cs b/renderdocui/Windows/TextureViewer.cs index 872337e07..aef885733 100644 --- a/renderdocui/Windows/TextureViewer.cs +++ b/renderdocui/Windows/TextureViewer.cs @@ -481,7 +481,7 @@ namespace renderdocui.Windows if (m_Core.CurBuffers[i].ID == ID) { var viewer = new BufferViewer(m_Core, false); - viewer.ViewRawBuffer(ID); + viewer.ViewRawBuffer(true, ID); viewer.Show(DockPanel); return; }