From 4d699a20682af0034bded07b417ce4462083ed53 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 10 Feb 2017 21:36:03 +0000 Subject: [PATCH] Allow overriding the variable type when formatting a shader variable --- qrenderdoc/Code/FormatElement.cpp | 11 +++++++---- qrenderdoc/Code/QRDUtils.h | 3 ++- renderdoc/api/replay/replay_enums.h | 1 + renderdoc/driver/gl/gl_replay.cpp | 1 + 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/qrenderdoc/Code/FormatElement.cpp b/qrenderdoc/Code/FormatElement.cpp index 4686e7d9a..1ceae5a80 100644 --- a/qrenderdoc/Code/FormatElement.cpp +++ b/qrenderdoc/Code/FormatElement.cpp @@ -813,17 +813,20 @@ static QString RowValuesToString(int cols, el x, el y, el z, el w) Formatter::Format(w); } -QString RowString(const ShaderVariable &v, uint32_t row) +QString RowString(const ShaderVariable &v, uint32_t row, VarType type) { - if(v.type == eVar_Double) + if(type == eVar_Unknown) + type = v.type; + + if(type == eVar_Double) return RowValuesToString((int)v.columns, v.value.dv[row * v.columns + 0], v.value.dv[row * v.columns + 1], v.value.dv[row * v.columns + 2], v.value.dv[row * v.columns + 3]); - else if(v.type == eVar_Int) + else if(type == eVar_Int) return RowValuesToString((int)v.columns, v.value.iv[row * v.columns + 0], v.value.iv[row * v.columns + 1], v.value.iv[row * v.columns + 2], v.value.iv[row * v.columns + 3]); - else if(v.type == eVar_UInt) + else if(type == eVar_UInt) return RowValuesToString((int)v.columns, v.value.uv[row * v.columns + 0], v.value.uv[row * v.columns + 1], v.value.uv[row * v.columns + 2], v.value.uv[row * v.columns + 3]); diff --git a/qrenderdoc/Code/QRDUtils.h b/qrenderdoc/Code/QRDUtils.h index 396a9a8b9..734367052 100644 --- a/qrenderdoc/Code/QRDUtils.h +++ b/qrenderdoc/Code/QRDUtils.h @@ -386,6 +386,7 @@ struct ToStr case eVar_Int: return "int"; case eVar_UInt: return "uint"; case eVar_Double: return "double"; + case eVar_Unknown: break; } return "Unknown"; } @@ -442,7 +443,7 @@ struct FormatElement }; QString TypeString(const ShaderVariable &v); -QString RowString(const ShaderVariable &v, uint32_t row); +QString RowString(const ShaderVariable &v, uint32_t row, VarType type = eVar_Unknown); QString VarString(const ShaderVariable &v); QString RowTypeString(const ShaderVariable &v); diff --git a/renderdoc/api/replay/replay_enums.h b/renderdoc/api/replay/replay_enums.h index 0234c6b47..8870b3da1 100644 --- a/renderdoc/api/replay/replay_enums.h +++ b/renderdoc/api/replay/replay_enums.h @@ -40,6 +40,7 @@ enum DirectoryFileProperty enum VarType { + eVar_Unknown = -1, eVar_Float = 0, eVar_Int, eVar_UInt, diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index 8d69a17fa..7a4812caf 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -2045,6 +2045,7 @@ void GLReplay::FillCBufferValue(WrappedOpenGL &gl, GLuint prog, bool bufferBacke { switch(outVar.type) { + case eVar_Unknown: case eVar_Float: gl.glGetUniformfv(prog, offs, outVar.value.fv); break; case eVar_Int: gl.glGetUniformiv(prog, offs, outVar.value.iv); break; case eVar_UInt: gl.glGetUniformuiv(prog, offs, outVar.value.uv); break;