[Mesa-dev] [PATCH 3/5] glsl: Add gl_MESACurrentAttrib{Vert, Frag} internal builtin uniforms.

Marek Olšák maraeo at gmail.com
Thu Oct 6 14:11:51 PDT 2011


If I get this right... Why not use a vertex array with stride == 0 instead?

Marek

On Thu, Oct 6, 2011 at 6:36 PM, Eric Anholt <eric at 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>


More information about the mesa-dev mailing list