From f868cb09639d69acbc900842263ac2d28b60bcc0 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Sat, 16 Jul 2011 17:41:26 -0700 Subject: [PATCH] glsl: Add gl_CurrentAttrib{Vert,Frag}MESA internal builtin uniforms. These will be used by the FF VS/FS to represent the current attributes when they don't have an active vertex array. --- src/glsl/ir_variable.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/glsl/ir_variable.cpp b/src/glsl/ir_variable.cpp index 58be64bfaa6..6ae3b1f9ecf 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_CurrentAttribVertMESA_elements[] = { + {NULL, {STATE_INTERNAL, STATE_CURRENT_ATTRIB, 0}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_CurrentAttribFragMESA_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_CurrentAttribVertMESA), + STATEVAR(gl_CurrentAttribFragMESA), {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_CurrentAttribVertMESA") == 0 || + strcmp(name, "gl_CurrentAttribFragMESA") == 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_CurrentAttribVertMESA", 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_CurrentAttribFragMESA", frag_attribs); } /* This function should only be called for ES, not desktop GL. */ -- 2.30.2