diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2010-06-22 17:41:37 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-06-23 11:24:26 -0700 |
commit | 9342d269a4818bf18296b07baa98f577efd1735c (patch) | |
tree | e98763f12b9ad45ac817fe5adcb8af6c97db79d9 | |
parent | 6984670f97aa0668ccdc99891d2881dbd95103f8 (diff) |
linker: Limit attribute allocation to MAX_VERTEX_ATTRIBS
-rw-r--r-- | linker.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -503,9 +503,13 @@ find_available_slots(unsigned used_mask, unsigned needed_count) bool assign_attribute_locations(glsl_shader *sh, - struct gl_program_parameter_list *attrib) + struct gl_program_parameter_list *attrib, + unsigned max_attribute_index) { - unsigned used_locations = 0; + /* Mark invalid attribute locations as being used. + */ + unsigned used_locations = (max_attribute_index >= 32) + ? ~0 : ~((1 << max_attribute_index) - 1); assert(sh->Type == GL_VERTEX_SHADER); @@ -736,8 +740,14 @@ link_shaders(struct glsl_program *prog) assign_uniform_locations(prog); if (prog->_LinkedShaders[0]->Type == GL_VERTEX_SHADER) + /* FINISHME: The value of the max_attribute_index parameter is + * FINISHME: implementation dependent based on the value of + * FINISHME: GL_MAX_VERTEX_ATTRIBS. GL_MAX_VERTEX_ATTRIBS must be + * FINISHME: at least 16, so hardcode 16 for now. + */ if (!assign_attribute_locations(prog->_LinkedShaders[0], - prog->Attributes)) + prog->Attributes, + 16)) goto done; /* FINISHME: Assign vertex shader output / fragment shader input |