Bladeren bron

mesa: Determine GL_ACTIVE_ATTRIBUTES by walking the GLSL IR.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
tags/mesa-8.0-rc1
Ian Romanick 14 jaren geleden
bovenliggende
commit
c097c63aa8
3 gewijzigde bestanden met toevoegingen van 30 en 1 verwijderingen
  1. 27
    0
      src/mesa/main/shader_query.cpp
  2. 1
    1
      src/mesa/main/shaderapi.c
  3. 2
    0
      src/mesa/main/shaderapi.h

+ 27
- 0
src/mesa/main/shader_query.cpp Bestand weergeven

@@ -185,3 +185,30 @@ _mesa_GetAttribLocationARB(GLhandleARB program, const GLcharARB * name)

return -1;
}


unsigned
_mesa_count_active_attribs(struct gl_shader_program *shProg)
{
if (!shProg->LinkStatus
|| shProg->_LinkedShaders[MESA_SHADER_VERTEX] == NULL) {
return 0;
}

exec_list *const ir = shProg->_LinkedShaders[MESA_SHADER_VERTEX]->ir;
unsigned i = 0;

foreach_list(node, ir) {
const ir_variable *const var = ((ir_instruction *) node)->as_variable();

if (var == NULL
|| var->mode != ir_var_in
|| var->location == -1
|| var->location < VERT_ATTRIB_GENERIC0)
continue;

i++;
}

return i;
}

+ 1
- 1
src/mesa/main/shaderapi.c Bestand weergeven

@@ -569,7 +569,7 @@ get_programiv(struct gl_context *ctx, GLuint program, GLenum pname, GLint *param
*params = shProg->NumShaders;
break;
case GL_ACTIVE_ATTRIBUTES:
*params = attribs ? attribs->NumParameters : 0;
*params = _mesa_count_active_attribs(shProg);
break;
case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:
*params = _mesa_longest_parameter_name(attribs, PROGRAM_INPUT) + 1;

+ 2
- 0
src/mesa/main/shaderapi.h Bestand weergeven

@@ -50,6 +50,8 @@ _mesa_active_program(struct gl_context *ctx, struct gl_shader_program *shProg,
extern void
_mesa_init_shader_dispatch(struct _glapi_table *exec);

extern unsigned
_mesa_count_active_attribs(struct gl_shader_program *shProg);


extern void GLAPIENTRY

Laden…
Annuleren
Opslaan