From: Dave Airlie Date: Tue, 17 May 2016 04:22:57 +0000 (+1000) Subject: mesa/subroutines: count number subroutines properly. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7fa0250f9446ec57caab581b8cac2c011c1cb497;p=mesa.git mesa/subroutines: count number subroutines properly. The code was implementing the ACTIVE_SUBROUTINE_UNIFORMS incorrectly, using the number of types not the number of uniforms. This is different than the locations as the locations may be sparsly allocated. This fixes: GL43-CTS.shader_subroutine.four_subroutines_with_two_uniforms Reviewed-by: Chris Forbes Signed-off-by: Dave Airlie --- diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index 2374c013c15..a7b2a19a66b 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -3096,6 +3096,7 @@ link_calculate_subroutine_compat(struct gl_shader_program *prog) if (!uni) continue; + sh->NumSubroutineUniforms++; count = 0; if (sh->NumSubroutineFunctions == 0) { linker_error(prog, "subroutine uniform %s defined but no valid functions found\n", uni->type->name); diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 569e0acc1ec..05b20590369 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2436,6 +2436,7 @@ struct gl_shader * Subroutine uniform remap table * based on the program level uniform remap table. */ + GLuint NumSubroutineUniforms; /* non-sparse total */ GLuint NumSubroutineUniformRemapTable; struct gl_uniform_storage **SubroutineUniformRemapTable; diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 47666d83ded..79097679e90 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -2368,7 +2368,7 @@ _mesa_GetActiveSubroutineUniformiv(GLuint program, GLenum shadertype, return; } - if (index >= sh->NumSubroutineUniformTypes) { + if (index >= sh->NumSubroutineUniforms) { _mesa_error(ctx, GL_INVALID_VALUE, "%s: invalid index greater than GL_ACTIVE_SUBROUTINE_UNIFORMS", api_name); return; } @@ -2672,7 +2672,7 @@ _mesa_GetProgramStageiv(GLuint program, GLenum shadertype, values[0] = sh->NumSubroutineUniformRemapTable; break; case GL_ACTIVE_SUBROUTINE_UNIFORMS: - values[0] = sh->NumSubroutineUniformTypes; + values[0] = sh->NumSubroutineUniforms; break; case GL_ACTIVE_SUBROUTINE_MAX_LENGTH: {