mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 09:20:12 +01:00
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 <chrisforbes@google.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
22db9b10eb
commit
7fa0250f94
3 changed files with 4 additions and 2 deletions
|
|
@ -3096,6 +3096,7 @@ link_calculate_subroutine_compat(struct gl_shader_program *prog)
|
||||||
if (!uni)
|
if (!uni)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
sh->NumSubroutineUniforms++;
|
||||||
count = 0;
|
count = 0;
|
||||||
if (sh->NumSubroutineFunctions == 0) {
|
if (sh->NumSubroutineFunctions == 0) {
|
||||||
linker_error(prog, "subroutine uniform %s defined but no valid functions found\n", uni->type->name);
|
linker_error(prog, "subroutine uniform %s defined but no valid functions found\n", uni->type->name);
|
||||||
|
|
|
||||||
|
|
@ -2436,6 +2436,7 @@ struct gl_shader
|
||||||
* Subroutine uniform remap table
|
* Subroutine uniform remap table
|
||||||
* based on the program level uniform remap table.
|
* based on the program level uniform remap table.
|
||||||
*/
|
*/
|
||||||
|
GLuint NumSubroutineUniforms; /* non-sparse total */
|
||||||
GLuint NumSubroutineUniformRemapTable;
|
GLuint NumSubroutineUniformRemapTable;
|
||||||
struct gl_uniform_storage **SubroutineUniformRemapTable;
|
struct gl_uniform_storage **SubroutineUniformRemapTable;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2368,7 +2368,7 @@ _mesa_GetActiveSubroutineUniformiv(GLuint program, GLenum shadertype,
|
||||||
return;
|
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);
|
_mesa_error(ctx, GL_INVALID_VALUE, "%s: invalid index greater than GL_ACTIVE_SUBROUTINE_UNIFORMS", api_name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -2672,7 +2672,7 @@ _mesa_GetProgramStageiv(GLuint program, GLenum shadertype,
|
||||||
values[0] = sh->NumSubroutineUniformRemapTable;
|
values[0] = sh->NumSubroutineUniformRemapTable;
|
||||||
break;
|
break;
|
||||||
case GL_ACTIVE_SUBROUTINE_UNIFORMS:
|
case GL_ACTIVE_SUBROUTINE_UNIFORMS:
|
||||||
values[0] = sh->NumSubroutineUniformTypes;
|
values[0] = sh->NumSubroutineUniforms;
|
||||||
break;
|
break;
|
||||||
case GL_ACTIVE_SUBROUTINE_MAX_LENGTH:
|
case GL_ACTIVE_SUBROUTINE_MAX_LENGTH:
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue