On 05/23/2016 11:41 PM, mathias.froehl...@gmx.net wrote:
> From: Mathias Fröhlich <mathias.froehl...@web.de>
> 
> The aim is to replace the CoordReplace array by
> a bitfield. Until all drivers are converted,
> establish the bitfield in paralell to the
                            parallel

> CoordReplace array.

As a general comment... please line-wrap commit messages at 70 - 72 columns.

> Signed-off-by: Mathias Fröhlich <mathias.froehl...@web.de>
> ---
>  src/mesa/main/attrib.c        |  2 +-
>  src/mesa/main/ffvertex_prog.c |  2 +-
>  src/mesa/main/mtypes.h        |  1 +
>  src/mesa/main/points.c        |  1 +
>  src/mesa/main/texenv.c        | 34 ++++++++++++++++++++++------------
>  5 files changed, 26 insertions(+), 14 deletions(-)
> 
> diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c
> index 61f7036..6f39cb0 100644
> --- a/src/mesa/main/attrib.c
> +++ b/src/mesa/main/attrib.c
> @@ -1247,7 +1247,7 @@ _mesa_PopAttrib(void)
>                    GLuint u;
>                    for (u = 0; u < ctx->Const.MaxTextureUnits; u++) {
>                       _mesa_TexEnvi(GL_POINT_SPRITE_NV, GL_COORD_REPLACE_NV,
> -                                   (GLint) point->CoordReplace[u]);
> +                                   !!(point->CoordReplaceBits & (1u << u)));
>                    }
>                    _mesa_set_enable(ctx, 
> GL_POINT_SPRITE_NV,point->PointSprite);
>                    if (ctx->Extensions.NV_point_sprite)
> diff --git a/src/mesa/main/ffvertex_prog.c b/src/mesa/main/ffvertex_prog.c
> index d72bc71..adf71dc 100644
> --- a/src/mesa/main/ffvertex_prog.c
> +++ b/src/mesa/main/ffvertex_prog.c
> @@ -243,7 +243,7 @@ static void make_state_key( struct gl_context *ctx, 
> struct state_key *key )
>        key->unit[i].texunit_really_enabled = 1;
>  
>        if (ctx->Point.PointSprite)
> -      if (ctx->Point.CoordReplace[i])
> +      if (ctx->Point.CoordReplaceBits & (1u << i))
>           key->unit[i].coord_replace = 1;
>  
>        if (ctx->Texture._TexMatEnabled & ENABLE_TEXMAT(i))
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index f6c6d97..e714239 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -757,6 +757,7 @@ struct gl_point_attrib
>     GLboolean _Attenuated;    /**< True if Params != [1, 0, 0] */
>     GLboolean PointSprite;    /**< GL_NV/ARB_point_sprite */
>     GLboolean CoordReplace[MAX_TEXTURE_COORD_UNITS]; /**< 
> GL_ARB_point_sprite*/
> +   GLbitfield CoordReplaceBits; /**< GL_ARB_point_sprite*/
>     GLenum SpriteRMode;               /**< GL_NV_point_sprite (only!) */
>     GLenum SpriteOrigin;              /**< GL_ARB_point_sprite */
>  };
> diff --git a/src/mesa/main/points.c b/src/mesa/main/points.c
> index c2f2b63..3fbd5d3 100644
> --- a/src/mesa/main/points.c
> +++ b/src/mesa/main/points.c
> @@ -256,4 +256,5 @@ _mesa_init_point(struct gl_context *ctx)
>     for (i = 0; i < ARRAY_SIZE(ctx->Point.CoordReplace); i++) {
>        ctx->Point.CoordReplace[i] = GL_FALSE; /* GL_ARB/NV_point_sprite */
>     }
> +   ctx->Point.CoordReplaceBits = 0; /* GL_ARB/NV_point_sprite */
>  }
> diff --git a/src/mesa/main/texenv.c b/src/mesa/main/texenv.c
> index 93c6806..0556b75 100644
> --- a/src/mesa/main/texenv.c
> +++ b/src/mesa/main/texenv.c
> @@ -460,20 +460,24 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const 
> GLfloat *param )
>        return;
>        }
>        if (pname == GL_COORD_REPLACE_NV) {
> -         if (iparam0 == GL_TRUE || iparam0 == GL_FALSE) {
> -            /* It's kind of weird to set point state via glTexEnv,
> -             * but that's what the spec calls for.
> -             */
> -            const GLboolean state = (GLboolean) iparam0;
> -            if (ctx->Point.CoordReplace[ctx->Texture.CurrentUnit] == state)
> +         /* It's kind of weird to set point state via glTexEnv,
> +          * but that's what the spec calls for.
> +          */
> +         if (iparam0 == GL_TRUE) {
> +            if (ctx->Point.CoordReplaceBits & (1u << 
> ctx->Texture.CurrentUnit))
>                 return;
> -            FLUSH_VERTICES(ctx, _NEW_POINT);
> -            ctx->Point.CoordReplace[ctx->Texture.CurrentUnit] = state;
> -         }
> -         else {
> +            ctx->Point.CoordReplaceBits |= (1u << ctx->Texture.CurrentUnit);
> +            ctx->Point.CoordReplace[ctx->Texture.CurrentUnit] = GL_TRUE;
> +         } else if (iparam0 == GL_FALSE) {
> +            if (~(ctx->Point.CoordReplaceBits) & (1u << 
> ctx->Texture.CurrentUnit))
> +               return;
> +            ctx->Point.CoordReplaceBits &= (1u << ctx->Texture.CurrentUnit);
> +            ctx->Point.CoordReplace[ctx->Texture.CurrentUnit] = GL_FALSE;
> +         } else {
>              _mesa_error( ctx, GL_INVALID_VALUE, "glTexEnv(param=0x%x)", 
> iparam0);
>              return;
>           }
> +         FLUSH_VERTICES(ctx, _NEW_POINT);
>        }
>        else {
>           _mesa_error( ctx, GL_INVALID_ENUM, "glTexEnv(pname=0x%x)", pname );
> @@ -675,7 +679,10 @@ _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat 
> *params )
>           return;
>        }
>        if (pname == GL_COORD_REPLACE_NV) {
> -         *params = (GLfloat) 
> ctx->Point.CoordReplace[ctx->Texture.CurrentUnit];
> +         if (ctx->Point.CoordReplaceBits & (1u << ctx->Texture.CurrentUnit))
> +            *params = 1.0f;
> +         else
> +            *params = 0.0f;
>        }
>        else {
>           _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexEnvfv(pname)" );
> @@ -736,7 +743,10 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint 
> *params )
>           return;
>        }
>        if (pname == GL_COORD_REPLACE_NV) {
> -         *params = (GLint) ctx->Point.CoordReplace[ctx->Texture.CurrentUnit];
> +         if (ctx->Point.CoordReplaceBits & (1u << ctx->Texture.CurrentUnit))
> +            *params = GL_TRUE;
> +         else
> +            *params = GL_FALSE;
>        }
>        else {
>           _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexEnviv(pname)" );
> 

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

Reply via email to