Improve type display in constant buffer previewer

This commit is contained in:
baldurk
2014-09-13 18:05:57 +01:00
parent 1a2831a52e
commit 475c0dab7c
5 changed files with 54 additions and 16 deletions
+2
View File
@@ -85,6 +85,8 @@ struct ShaderVariable
uint32_t uv[16];
} value;
bool32 isStruct;
rdctype::array<ShaderVariable> members;
};
+2
View File
@@ -542,6 +542,8 @@ void Serialiser::Serialise(const char *name, ShaderVariable &el)
Serialise<16>("", el.value.uv);
Serialise("", el.isStruct);
Serialise("", el.members);
}
+12
View File
@@ -92,14 +92,20 @@ void D3D11DebugManager::FillCBufferVariables(const string &prefix, size_t &offse
FillCBufferVariables("", vec, flatten, invars[v].type.members, mems, data);
vr.isStruct = true;
vr.members = mems;
varmembers.push_back(vr);
}
}
var.isStruct = false;
}
else
{
var.isStruct = true;
if(flatten)
FillCBufferVariables(basename + ".", vec, flatten, invars[v].type.members, outvars, data);
else
@@ -168,6 +174,7 @@ void D3D11DebugManager::FillCBufferVariables(const string &prefix, size_t &offse
combinedName += ", " + basename;
outvars[outIdx].name = combinedName;
outvars[outIdx].rows = 1;
outvars[outIdx].isStruct = false;
outvars[outIdx].columns += cols;
if(dataOffset < data.size())
@@ -182,6 +189,7 @@ void D3D11DebugManager::FillCBufferVariables(const string &prefix, size_t &offse
outvars[outIdx].name = basename;
outvars[outIdx].rows = 1;
outvars[outIdx].type = type;
outvars[outIdx].isStruct = false;
outvars[outIdx].columns = cols;
ShaderVariable &var = outvars[outIdx];
@@ -289,6 +297,7 @@ void D3D11DebugManager::FillCBufferVariables(const string &prefix, size_t &offse
(*out)[outIdx+r].name = base + buf;
(*out)[outIdx+r].rows = (uint32_t)rowCopy;
(*out)[outIdx+r].type = type;
(*out)[outIdx+r].isStruct = false;
(*out)[outIdx+r].columns = regLen;
size_t dataOffset = (vec+r*rowCopy)*16;
@@ -311,7 +320,10 @@ void D3D11DebugManager::FillCBufferVariables(const string &prefix, size_t &offse
}
if(!flatten)
{
var.isStruct = false;
var.members = varmembers;
}
}
}
}
+7
View File
@@ -1214,6 +1214,7 @@ void GLReplay::FillCBufferVariables(WrappedOpenGL &gl, GLuint prog, bool bufferB
{
vector<ShaderVariable> ov;
FillCBufferVariables(gl, prog, bufferBacked, prefix + var.name.elems + ".", variables[i].type.members, ov, data);
var.isStruct = true;
var.members = ov;
}
else
@@ -1227,10 +1228,13 @@ void GLReplay::FillCBufferVariables(WrappedOpenGL &gl, GLuint prog, bool bufferB
vector<ShaderVariable> ov;
FillCBufferVariables(gl, prog, bufferBacked, prefix + arrEl.name.elems + ".", variables[i].type.members, ov, data);
arrEl.members = ov;
arrEl.isStruct = true;
arrelems.push_back(arrEl);
}
var.members = arrelems;
var.isStruct = false;
var.rows = var.columns = 0;
}
}
@@ -1277,10 +1281,13 @@ void GLReplay::FillCBufferVariables(WrappedOpenGL &gl, GLuint prog, bool bufferB
FillCBufferValue(gl, prog, bufferBacked, desc.rowMajorStorage ? true : false,
values[0] + values[2] * a, values[1], data, el);
el.isStruct = false;
elems.push_back(el);
}
var.members = elems;
var.isStruct = false;
var.rows = var.columns = 0;
}
}
+31 -16
View File
@@ -81,18 +81,21 @@ namespace renderdoc
[CustomMarshalAs(CustomUnmanagedType.Union)]
public ValueUnion value;
public bool isStruct;
[CustomMarshalAs(CustomUnmanagedType.TemplatedArray)]
public ShaderVariable[] members;
public override string ToString()
{
if(members.Length > 0) return String.Format("struct[{0}]", members.Length);
if(rows == 1) return Row(0);
public override string ToString()
{
if (members.Length > 0)
return "";
if (rows == 1) return Row(0);
string ret = "";
for (int i = 0; i < (int)rows; i++)
for (int i = 0; i < (int)rows; i++)
{
if(i > 0) ret += ", ";
if (i > 0) ret += ", ";
ret += "{" + Row(i) + "}";
}
@@ -101,24 +104,36 @@ namespace renderdoc
public string RowTypeString()
{
if (members.Length > 0) return "struct";
if (members.Length > 0)
{
if (isStruct)
return "struct";
else
return "flibbertygibbet";
}
if(rows == 0 && columns == 0)
if (rows == 0 && columns == 0)
return "-";
if(columns == 1)
if (columns == 1)
return type.Str();
return String.Format("{0}{1}", type.Str(), columns);
return String.Format("{0}{1}", type.Str(), columns);
}
public string TypeString()
{
if (members.Length > 0) return "struct";
if (members.Length > 0)
{
if (isStruct)
return "struct";
else
return String.Format("{0}[{1}]", members[0].TypeString(), members.Length);
}
if (rows == 1 && columns == 1) return type.Str();
if (rows == 1) return String.Format("{0}{1}", type.Str(), columns);
else return String.Format("{0}{1}x{2}", type.Str(), rows, columns);
if (rows == 1 && columns == 1) return type.Str();
if (rows == 1) return String.Format("{0}{1}", type.Str(), columns);
else return String.Format("{0}{1}x{2}", type.Str(), rows, columns);
}
public string RowValuesToString(int cols, double x, double y)