diff options
author | Samuel Pitoiset <[email protected]> | 2017-05-25 12:18:45 +0200 |
---|---|---|
committer | Samuel Pitoiset <[email protected]> | 2017-05-29 10:03:11 +0200 |
commit | 5521dc2477f109d2fbe77c6c70be44974900d356 (patch) | |
tree | 95aaf0f8dc2752813526a85f1897f8e4e28eaf2c | |
parent | 48b91103cea7fec8ec2864c3a4f8fe1eec711073 (diff) |
mesa: add KHR_no_error support for glActiveTexture()
Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Ian Romanick <[email protected]>
-rw-r--r-- | src/mapi/glapi/gen/gl_API.xml | 2 | ||||
-rw-r--r-- | src/mesa/main/texstate.c | 36 | ||||
-rw-r--r-- | 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 630d6b8a5bb..8f93318b95d 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 1aac3cdbd8b..1949ec2a849 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 cb329b07bfb..7c74329a64e 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 |