From 9cb69036908761220f216b0e60a214af38d0b343 Mon Sep 17 00:00:00 2001 From: Dennis Brakhane Date: Sun, 3 Jan 2016 16:13:51 +0100 Subject: [PATCH] workaround for NVidia 361.43 driver bug This driver returns internal/synthetic uniform shaders when asked for the list of active uniforms. They all start with "_main_" and have names like "_main_0_gp5fp[0]". We need to ignore these, otherwise, Panda will later crash with failed assertions when trying to set this unknown uniform. --- panda/src/glstuff/glShaderContext_src.cxx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/panda/src/glstuff/glShaderContext_src.cxx b/panda/src/glstuff/glShaderContext_src.cxx index b3429b65a6..088813b97a 100644 --- a/panda/src/glstuff/glShaderContext_src.cxx +++ b/panda/src/glstuff/glShaderContext_src.cxx @@ -687,6 +687,15 @@ reflect_uniform(int i, char *name_buffer, GLsizei name_buflen) { _glgsg->_glGetActiveUniform(_glsl_program, i, name_buflen, NULL, ¶m_size, ¶m_type, name_buffer); GLint p = _glgsg->_glGetUniformLocation(_glsl_program, name_buffer); + + // Some NVidia drivers (361.43 for example) (incorrectly) include "internal" uniforms in + // the list starting with "_main_" (for example, "_main_0_gp5fp[0]") + // we need to skip those, because we don't know anything about them + if (strncmp(name_buffer, "_main_", 6) == 0) { + GLCAT.warning() << "Ignoring uniform " << name_buffer << " which may be generated by buggy Nvidia driver.\n"; + return; + } + if (GLCAT.is_debug()) { GLCAT.debug() << "Active uniform " << name_buffer << " with size " << param_size