From f4de6993bc78630fc000215fae2e2b33827a7d2e Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 17 Sep 2014 18:51:00 +0100 Subject: [PATCH] Fix double support in FormatElement & custom Buffer/CBuffer views --- renderdocui/Code/FormatElement.cs | 15 +++++++++------ renderdocui/Interop/Shader.cs | 12 ++++++------ renderdocui/Windows/BufferViewer.cs | 4 ++++ 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/renderdocui/Code/FormatElement.cs b/renderdocui/Code/FormatElement.cs index 0e4eea425..023e33220 100644 --- a/renderdocui/Code/FormatElement.cs +++ b/renderdocui/Code/FormatElement.cs @@ -159,7 +159,9 @@ namespace renderdocui.Code { if (format.compType == FormatComponentType.Float) { - if (format.compByteWidth == 4) + if (format.compByteWidth == 8) + ret.Add(read.ReadDouble()); + else if (format.compByteWidth == 4) ret.Add(read.ReadSingle()); else if (format.compByteWidth == 2) ret.Add(format.ConvertFromHalf(read.ReadUInt16())); @@ -194,9 +196,7 @@ namespace renderdocui.Code } else if (format.compType == FormatComponentType.Double) { - // should never hit this! just read a float - ret.Add(read.ReadSingle()); - renderdoc.StaticExports.LogText("Unexpected double FormatElement"); + ret.Add(read.ReadDouble()); } else { @@ -245,6 +245,7 @@ namespace renderdocui.Code ret.value.fv = new float[16]; ret.value.uv = new uint[16]; ret.value.iv = new int[16]; + ret.value._dv_arr = new double[16]; for (uint row = 0; row < ret.rows; row++) { @@ -255,7 +256,9 @@ namespace renderdocui.Code object o = objs[src]; - if (o is float) + if (o is double) + ret.value.dv[dst] = (double)o; + else if (o is float) ret.value.fv[dst] = (float)o; else if (o is uint) ret.value.uv[dst] = (uint)o; @@ -419,7 +422,7 @@ namespace renderdocui.Code } else if (basetype == "double") { - type = FormatComponentType.Float; + type = FormatComponentType.Double; width = 8; } else if (basetype == "unormh") diff --git a/renderdocui/Interop/Shader.cs b/renderdocui/Interop/Shader.cs index a7e703040..9cceb1c16 100644 --- a/renderdocui/Interop/Shader.cs +++ b/renderdocui/Interop/Shader.cs @@ -50,13 +50,13 @@ namespace renderdoc public Int32[] iv; [CustomMarshalAs(CustomUnmanagedType.Skip)] - private double[] dv_arr; + public double[] _dv_arr; public double[] dv { get { - if (dv_arr == null) + if (_dv_arr == null) { UInt64[] ds = { 0, 0 }; ds[0] = uv[1]; @@ -68,12 +68,12 @@ namespace renderdoc ds[0] |= uv[0]; ds[1] |= uv[2]; - dv_arr = new double[2]; - dv_arr[0] = BitConverter.Int64BitsToDouble(unchecked((long)ds[0])); - dv_arr[1] = BitConverter.Int64BitsToDouble(unchecked((long)ds[1])); + _dv_arr = new double[2]; + _dv_arr[0] = BitConverter.Int64BitsToDouble(unchecked((long)ds[0])); + _dv_arr[1] = BitConverter.Int64BitsToDouble(unchecked((long)ds[1])); } - return dv_arr; + return _dv_arr; } } }; diff --git a/renderdocui/Windows/BufferViewer.cs b/renderdocui/Windows/BufferViewer.cs index 03db7f1d6..ca45dedc5 100644 --- a/renderdocui/Windows/BufferViewer.cs +++ b/renderdocui/Windows/BufferViewer.cs @@ -1340,6 +1340,10 @@ namespace renderdocui.Windows { return Formatter.Format((float)o); } + else if (o is double) + { + return Formatter.Format((double)o); + } else if (o is uint) { uint u = (uint)o;