From 58acc32a5e29c0c08bc58bd8348c5730db802019 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 31 Jul 2017 14:07:08 +0200 Subject: [PATCH] mesa: only check errors when the state change in glClipControl() MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit When this GL call is a no-op, it should be a little faster in the errors path only. Signed-off-by: Samuel Pitoiset Reviewed-by: Nicolai Hähnle --- src/mesa/main/viewport.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/mesa/main/viewport.c b/src/mesa/main/viewport.c index 90c92eadbf6..3dce320d1d0 100644 --- a/src/mesa/main/viewport.c +++ b/src/mesa/main/viewport.c @@ -492,13 +492,25 @@ void _mesa_init_viewport(struct gl_context *ctx) } -static void -clip_control(struct gl_context *ctx, GLenum origin, GLenum depth) +static ALWAYS_INLINE void +clip_control(struct gl_context *ctx, GLenum origin, GLenum depth, bool no_error) { if (ctx->Transform.ClipOrigin == origin && ctx->Transform.ClipDepthMode == depth) return; + if (!no_error && + origin != GL_LOWER_LEFT && origin != GL_UPPER_LEFT) { + _mesa_error(ctx, GL_INVALID_ENUM, "glClipControl"); + return; + } + + if (!no_error && + depth != GL_NEGATIVE_ONE_TO_ONE && depth != GL_ZERO_TO_ONE) { + _mesa_error(ctx, GL_INVALID_ENUM, "glClipControl"); + return; + } + /* Affects transform state and the viewport transform */ FLUSH_VERTICES(ctx, ctx->DriverFlags.NewClipControl ? 0 : _NEW_TRANSFORM | _NEW_VIEWPORT); @@ -530,7 +542,7 @@ void GLAPIENTRY _mesa_ClipControl_no_error(GLenum origin, GLenum depth) { GET_CURRENT_CONTEXT(ctx); - clip_control(ctx, origin, depth); + clip_control(ctx, origin, depth, true); } @@ -551,17 +563,7 @@ _mesa_ClipControl(GLenum origin, GLenum depth) return; } - if (origin != GL_LOWER_LEFT && origin != GL_UPPER_LEFT) { - _mesa_error(ctx, GL_INVALID_ENUM, "glClipControl"); - return; - } - - if (depth != GL_NEGATIVE_ONE_TO_ONE && depth != GL_ZERO_TO_ONE) { - _mesa_error(ctx, GL_INVALID_ENUM, "glClipControl"); - return; - } - - clip_control(ctx, origin, depth); + clip_control(ctx, origin, depth, false); } /** -- 2.30.2