From 3ff998024e1f8ee8a19eec0eb5968475693967c0 Mon Sep 17 00:00:00 2001 From: valeriog Date: Mon, 27 Oct 2014 19:18:27 +0100 Subject: [PATCH 1/3] Texture data type GL_UNSIGNED_INT_5_9_9_9_REV was missing from GetByteSize. --- renderdoc/driver/gl/gl_resources.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/renderdoc/driver/gl/gl_resources.cpp b/renderdoc/driver/gl/gl_resources.cpp index 4f4c2ec76..eced5bceb 100644 --- a/renderdoc/driver/gl/gl_resources.cpp +++ b/renderdoc/driver/gl/gl_resources.cpp @@ -81,6 +81,7 @@ size_t GetByteSize(GLsizei w, GLsizei h, GLsizei d, GLenum format, GLenum type, case eGL_UNSIGNED_INT_10_10_10_2: case eGL_UNSIGNED_INT_2_10_10_10_REV: case eGL_UNSIGNED_INT_10F_11F_11F_REV: + case eGL_UNSIGNED_INT_5_9_9_9_REV: return ((w*4 + alignAdd) & alignMask)*h*d; case eGL_DEPTH_COMPONENT16: return ((w*2 + alignAdd) & alignMask)*h*d; From 48be83376dcfa68e0c52de3a509fc79ec964df22 Mon Sep 17 00:00:00 2001 From: valeriog Date: Mon, 27 Oct 2014 19:20:20 +0100 Subject: [PATCH 2/3] Wrong GL function being called and serialized for glGenQueries. --- renderdoc/driver/gl/wrappers/gl_query_funcs.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/gl/wrappers/gl_query_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_query_funcs.cpp index f2790f759..4ce3bc663 100644 --- a/renderdoc/driver/gl/wrappers/gl_query_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_query_funcs.cpp @@ -159,7 +159,7 @@ bool WrappedOpenGL::Serialise_glGenQueries(GLsizei n, GLuint* ids) if(m_State == READING) { GLuint real = 0; - m_Real.glGenSamplers(1, &real); + m_Real.glGenQueries(1, &real); GLResource res = QueryRes(GetCtx(), real); @@ -172,7 +172,7 @@ bool WrappedOpenGL::Serialise_glGenQueries(GLsizei n, GLuint* ids) void WrappedOpenGL::glGenQueries(GLsizei count, GLuint *ids) { - m_Real.glGenSamplers(count, ids); + m_Real.glGenQueries(count, ids); for(GLsizei i=0; i < count; i++) { From d1c341da225ae71e350b60b55204f192bf5a4888 Mon Sep 17 00:00:00 2001 From: valeriog Date: Mon, 27 Oct 2014 19:24:29 +0100 Subject: [PATCH 3/3] Handle GL shader arrays of one element during reflection and constant buffer read. --- renderdoc/driver/gl/gl_replay.cpp | 4 ++-- renderdoc/driver/gl/gl_shader_refl.cpp | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index 2c9b42f3e..42ec32c7c 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -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 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); diff --git a/renderdoc/driver/gl/gl_shader_refl.cpp b/renderdoc/driver/gl/gl_shader_refl.cpp index 783d99d59..63c6ea15d 100644 --- a/renderdoc/driver/gl/gl_shader_refl.cpp +++ b/renderdoc/driver/gl/gl_shader_refl.cpp @@ -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 *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;