mesa: only check errors when the state change in glClipControl()

When this GL call is a no-op, it should be a little faster in
the errors path only.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Samuel Pitoiset 2017-07-31 14:07:08 +02:00
parent 56bea2a266
commit 58acc32a5e
1 changed files with 16 additions and 14 deletions

View File

@ -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);
}
/**