From 5e7b25efca326b2508ab94e7bad3f6744cba810c Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Tue, 5 Sep 2023 08:01:04 +0100 Subject: [PATCH] GL: Fallback for uniform lookup for arrays of dimension 1 Closes #3047 ie. struct A { vec3 m1; vec3 m2; vec3 m2; }; uniform A a[1]; with a[0] being passed to a function. Previously it would look for "a.m1", if that is not found then it looks for "a[0].m1" etc. --- renderdoc/driver/gl/gl_replay.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index c046a5dfd..2634d43cd 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -2176,6 +2176,16 @@ void GLReplay::OpenGLFillCBufferVariables(ResourceId shader, GLuint prog, bool b GLuint idx = GL.glGetProgramResourceIndex(prog, eGL_UNIFORM, fullname.c_str()); + // if this is an array of size 1 try looking for [0]. + if((idx == GL_INVALID_INDEX) && (desc.elements == 1)) + { + rdcstr arrayZeroName = prefix; + if(!arrayZeroName.empty() && arrayZeroName.back() == '.') + arrayZeroName.pop_back(); + arrayZeroName += "[0]." + var.name; + + idx = GL.glGetProgramResourceIndex(prog, eGL_UNIFORM, arrayZeroName.c_str()); + } if(idx == GL_INVALID_INDEX) { // this might not be an error, this might be the corresponding member in an array-of-structs