Handle GL shader arrays of one element during reflection and constant buffer read.

This commit is contained in:
valeriog
2014-10-27 19:24:29 +01:00
parent 48be83376d
commit d1c341da22
2 changed files with 7 additions and 5 deletions
+2 -2
View File
@@ -1210,7 +1210,7 @@ void GLReplay::FillCBufferVariables(WrappedOpenGL &gl, GLuint prog, bool bufferB
if(variables[i].type.members.count > 0)
{
if(desc.elements == 1)
if(desc.elements == 0)
{
vector<ShaderVariable> ov;
FillCBufferVariables(gl, prog, bufferBacked, prefix + var.name.elems + ".", variables[i].type.members, ov, data);
@@ -1265,7 +1265,7 @@ void GLReplay::FillCBufferVariables(WrappedOpenGL &gl, GLuint prog, bool bufferB
values[2] = 1;
}
if(desc.elements == 1)
if(desc.elements == 0)
{
FillCBufferValue(gl, prog, bufferBacked, desc.rowMajorStorage ? true : false,
values[0], values[1], data, var);
+5 -3
View File
@@ -203,7 +203,7 @@ void MakeShaderReflection(const GLHookSet &gl, GLenum shadType, GLuint sepProg,
res.IsUAV = false;
res.variableType.descriptor.rows = 1;
res.variableType.descriptor.cols = 4;
res.variableType.descriptor.elements = 1;
res.variableType.descriptor.elements = 0;
res.variableType.descriptor.rowMajorStorage = false;
res.bindPoint = (int32_t)resources.size();
@@ -703,8 +703,10 @@ void MakeShaderReflection(const GLHookSet &gl, GLenum shadType, GLuint sepProg,
int32_t c = values[1]-1;
// trim off trailing [0] if it's an array
if(values[4] > 1 && var.name[c-3] == '[' && var.name[c-2] == '0' && var.name[c-1] == ']')
if(var.name[c-3] == '[' && var.name[c-2] == '0' && var.name[c-1] == ']')
var.name.resize(c-3);
else
var.type.descriptor.elements = 0;
vector<DynShaderConstant> *parentmembers = &globalUniforms;
@@ -769,7 +771,7 @@ void MakeShaderReflection(const GLHookSet &gl, GLenum shadType, GLuint sepProg,
parentVar.reg.vec = var.reg.vec;
parentVar.reg.comp = 0;
parentVar.type.descriptor.name = "struct";
parentVar.type.descriptor.elements = RDCMAX(1U, uint32_t(arrayIdx+1));
parentVar.type.descriptor.elements = isarray ? RDCMAX(1U, uint32_t(arrayIdx+1)) : 0;
bool found = false;