[Mesa-dev] [PATCH v2] mesa: add KHR_no_error support for glActiveTexture()

Ian Romanick idr at freedesktop.org
Thu May 25 23:42:27 UTC 2017


Much better.

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

On 05/25/2017 03:18 AM, Samuel Pitoiset wrote:
> v2: add active_texture() with ALWAYS_INLINE and no_error param
> 
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>  src/mapi/glapi/gen/gl_API.xml |  2 +-
>  src/mesa/main/texstate.c      | 36 +++++++++++++++++++++++++-----------
>  src/mesa/main/texstate.h      |  3 +++
>  3 files changed, 29 insertions(+), 12 deletions(-)
> 
> diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml
> index 630d6b8a5b..8f93318b95 100644
> --- a/src/mapi/glapi/gen/gl_API.xml
> +++ b/src/mapi/glapi/gen/gl_API.xml
> @@ -4268,7 +4268,7 @@
>      <enum name="DOT3_RGB"                                 value="0x86AE"/>
>      <enum name="DOT3_RGBA"                                value="0x86AF"/>
>  
> -    <function name="ActiveTexture" es1="1.0" es2="2.0">
> +    <function name="ActiveTexture" es1="1.0" es2="2.0" no_error="true">
>          <param name="texture" type="GLenum"/>
>          <glx rop="197"/>
>      </function>
> diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
> index 1aac3cdbd8..1949ec2a84 100644
> --- a/src/mesa/main/texstate.c
> +++ b/src/mesa/main/texstate.c
> @@ -279,14 +279,12 @@ calculate_derived_texenv( struct gl_tex_env_combine_state *state,
>  }
>  
>  
> -
> -
>  /* GL_ARB_multitexture */
> -void GLAPIENTRY
> -_mesa_ActiveTexture(GLenum texture)
> +static ALWAYS_INLINE void
> +active_texture(GLenum texture, bool no_error)
>  {
>     const GLuint texUnit = texture - GL_TEXTURE0;
> -   GLuint k;
> +
>     GET_CURRENT_CONTEXT(ctx);
>  
>     if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
> @@ -296,14 +294,16 @@ _mesa_ActiveTexture(GLenum texture)
>     if (ctx->Texture.CurrentUnit == texUnit)
>        return;
>  
> -   k = _mesa_max_tex_unit(ctx);
> +   if (!no_error) {
> +      GLuint k = _mesa_max_tex_unit(ctx);
>  
> -   assert(k <= ARRAY_SIZE(ctx->Texture.Unit));
> +      assert(k <= ARRAY_SIZE(ctx->Texture.Unit));
>  
> -   if (texUnit >= k) {
> -      _mesa_error(ctx, GL_INVALID_ENUM, "glActiveTexture(texture=%s)",
> -                  _mesa_enum_to_string(texture));
> -      return;
> +      if (texUnit >= k) {
> +         _mesa_error(ctx, GL_INVALID_ENUM, "glActiveTexture(texture=%s)",
> +                     _mesa_enum_to_string(texture));
> +         return;
> +      }
>     }
>  
>     FLUSH_VERTICES(ctx, _NEW_TEXTURE_STATE);
> @@ -316,6 +316,20 @@ _mesa_ActiveTexture(GLenum texture)
>  }
>  
>  
> +void GLAPIENTRY
> +_mesa_ActiveTexture_no_error(GLenum texture)
> +{
> +   active_texture(texture, true);
> +}
> +
> +
> +void GLAPIENTRY
> +_mesa_ActiveTexture(GLenum texture)
> +{
> +   active_texture(texture, false);
> +}
> +
> +
>  /* GL_ARB_multitexture */
>  void GLAPIENTRY
>  _mesa_ClientActiveTexture(GLenum texture)
> diff --git a/src/mesa/main/texstate.h b/src/mesa/main/texstate.h
> index cb329b07bf..7c74329a64 100644
> --- a/src/mesa/main/texstate.h
> +++ b/src/mesa/main/texstate.h
> @@ -78,6 +78,9 @@ _mesa_print_texunit_state( struct gl_context *ctx, GLuint unit );
>  /*@{*/
>  
>  extern void GLAPIENTRY
> +_mesa_ActiveTexture_no_error( GLenum target );
> +
> +extern void GLAPIENTRY
>  _mesa_ActiveTexture( GLenum target );
>  
>  extern void GLAPIENTRY
> 



More information about the mesa-dev mailing list