Mesa (master): glsl: Add gl_CurrentAttrib{Vert, Frag}MESA internal builtin uniforms.

Eric Anholt anholt at kemper.freedesktop.org
Tue Oct 18 11:06:44 PDT 2011


Module: Mesa
Branch: master
Commit: f868cb09639d69acbc900842263ac2d28b60bcc0
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f868cb09639d69acbc900842263ac2d28b60bcc0

Author: Eric Anholt <eric at anholt.net>
Date:   Sat Jul 16 17:41:26 2011 -0700

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 files changed, 24 insertions(+), 1 deletions(-)

diff --git a/src/glsl/ir_variable.cpp b/src/glsl/ir_variable.cpp
index 58be64b..6ae3b1f 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. */



More information about the mesa-commit mailing list