On 10/06/2011 02:11 PM, Marek Olšák wrote:
If I get this right... Why not use a vertex array with stride == 0 instead?

In the GL API, stride == 0 is a magic value that tells the GL implementation to figure out what the stride should be. As far as I know, most hardware can't do true zero-stride arrays.

On Thu, Oct 6, 2011 at 6:36 PM, Eric Anholt<e...@anholt.net>  wrote:
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..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),

    {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. */
--
1.7.6.3

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to