On 10/06/2011 09:36 AM, Eric Anholt wrote:
These will be used by the FF VS/FS to represent the current attributes when they don't have an active vertex array.
I just want to make sure I grok this completely. These are arrays of vec4 uniforms that are used when, for example, glColor is called outside glBegin. Yes?
If that's the case, what's the advantage of having it in the fragment shader (as opposed to using uniforms to interpolate the potentially constant values)?
--- src/glsl/ir_variable.cpp | 25 ++++++++++++++++++++++++- 1 files changed, 24 insertions(+), 1 deletions(-) diff --git a/src/glsl/ir_variable.cpp b/src/glsl/ir_variable.cpp index 58be64b..03fa43f 100644 --- a/src/glsl/ir_variable.cpp +++ b/src/glsl/ir_variable.cpp @@ -178,6 +178,14 @@ static struct gl_builtin_uniform_element gl_MESAFogParamsOptimized_elements[] = {NULL, {STATE_INTERNAL, STATE_FOG_PARAMS_OPTIMIZED}, SWIZZLE_XYZW}, }; +static struct gl_builtin_uniform_element gl_MESACurrentAttribVert_elements[] = { + {NULL, {STATE_INTERNAL, STATE_CURRENT_ATTRIB, 0}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_MESACurrentAttribFrag_elements[] = { + {NULL, {STATE_INTERNAL, STATE_CURRENT_ATTRIB_MAYBE_VP_CLAMPED, 0}, SWIZZLE_XYZW}, +}; + #define MATRIX(name, statevar, modifier) \ static struct gl_builtin_uniform_element name ## _elements[] = { \ { NULL, { statevar, 0, 0, 0, modifier}, SWIZZLE_XYZW }, \ @@ -284,6 +292,8 @@ const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[] = { STATEVAR(gl_MESABumpRotMatrix0), STATEVAR(gl_MESABumpRotMatrix1), STATEVAR(gl_MESAFogParamsOptimized), + STATEVAR(gl_MESACurrentAttribVert), + STATEVAR(gl_MESACurrentAttribFrag),
My preference would be to use the "regular" GLSL extension naming convention (even though we're not exposing these names directly). That is, gl_CurrentAttribVertMESA and gl_CurrentAttribFragMESA. I would have made the same comment about the other statevar names here, but I was too slow getting reviews out.
{NULL, NULL, 0} }; @@ -355,7 +365,12 @@ add_uniform(exec_list *instructions, glsl_symbol_table *symtab, memcpy(slots->tokens, element->tokens, sizeof(element->tokens)); if (type->is_array()) { - slots->tokens[1] = a; + if (strcmp(name, "gl_MESACurrentAttribVert") == 0 || + strcmp(name, "gl_MESACurrentAttribFrag") == 0) { + slots->tokens[2] = a; + } else { + slots->tokens[1] = a; + } } slots->swizzle = element->swizzle; @@ -518,6 +533,14 @@ generate_110_uniforms(exec_list *instructions, add_uniform(instructions, symtab, "gl_Fog", symtab->get_type("gl_FogParameters")); + + /* Mesa-internal current attrib state */ + const glsl_type *const vert_attribs = + glsl_type::get_array_instance(glsl_type::vec4_type, VERT_ATTRIB_MAX); + add_uniform(instructions, symtab, "gl_MESACurrentAttribVert", vert_attribs); + const glsl_type *const frag_attribs = + glsl_type::get_array_instance(glsl_type::vec4_type, FRAG_ATTRIB_MAX); + add_uniform(instructions, symtab, "gl_MESACurrentAttribFrag", frag_attribs); } /* This function should only be called for ES, not desktop GL. */
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev