diff --git a/renderdocui/Code/Helpers.cs b/renderdocui/Code/Helpers.cs index 92678b589..cfc5c10c2 100644 --- a/renderdocui/Code/Helpers.cs +++ b/renderdocui/Code/Helpers.cs @@ -75,6 +75,11 @@ namespace renderdocui.Code else return val; } + public static uint AlignUp(this uint x, uint a) + { + return (x + (a - 1)) & (~(a - 1)); + } + public static bool IsElevated { get diff --git a/renderdocui/Windows/BufferViewer.cs b/renderdocui/Windows/BufferViewer.cs index 652f60dfb..a2d30567e 100644 --- a/renderdocui/Windows/BufferViewer.cs +++ b/renderdocui/Windows/BufferViewer.cs @@ -806,8 +806,20 @@ namespace renderdocui.Windows uint offset = 0; for (int i = 0; i < details.OutputSig.Length; i++) { + uint numComps = f[i].format.compCount; + uint elemSize = f[i].format.compType == FormatComponentType.Double ? 8U : 4U; + + if (m_Core.CurPipelineState.HasAlignedPostVSData) + { + if (numComps == 2) + offset = offset.AlignUp(2U * elemSize); + else if (numComps > 2) + offset = offset.AlignUp(4U * elemSize); + } + f[i].offset = offset; - offset += f[i].format.compCount * sizeof(float); + + offset += numComps * elemSize; } ret.BufferFormats = f.ToArray();