From: Samuel Pitoiset Date: Wed, 2 Aug 2017 18:47:50 +0000 (+0200) Subject: mesa: only check errors when the state change in glLogicOp() X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8e103371ed270b7493da9fe06901809248dd53f6;p=mesa.git mesa: only check errors when the state change in glLogicOp() When this GL call is a no-op, it should be a little faster. Signed-off-by: Samuel Pitoiset Reviewed-by: Timothy Arceri --- diff --git a/src/mesa/main/blend.c b/src/mesa/main/blend.c index af378f784da..5c496d99705 100644 --- a/src/mesa/main/blend.c +++ b/src/mesa/main/blend.c @@ -850,12 +850,37 @@ _mesa_AlphaFunc( GLenum func, GLclampf ref ) } -static void -logic_op(struct gl_context *ctx, GLenum opcode) +static ALWAYS_INLINE void +logic_op(struct gl_context *ctx, GLenum opcode, bool no_error) { if (ctx->Color.LogicOp == opcode) return; + if (!no_error) { + switch (opcode) { + case GL_CLEAR: + case GL_SET: + case GL_COPY: + case GL_COPY_INVERTED: + case GL_NOOP: + case GL_INVERT: + case GL_AND: + case GL_NAND: + case GL_OR: + case GL_NOR: + case GL_XOR: + case GL_EQUIV: + case GL_AND_REVERSE: + case GL_AND_INVERTED: + case GL_OR_REVERSE: + case GL_OR_INVERTED: + break; + default: + _mesa_error( ctx, GL_INVALID_ENUM, "glLogicOp" ); + return; + } + } + FLUSH_VERTICES(ctx, ctx->DriverFlags.NewLogicOp ? 0 : _NEW_COLOR); ctx->NewDriverState |= ctx->DriverFlags.NewLogicOp; ctx->Color.LogicOp = opcode; @@ -883,30 +908,7 @@ _mesa_LogicOp( GLenum opcode ) if (MESA_VERBOSE & VERBOSE_API) _mesa_debug(ctx, "glLogicOp(%s)\n", _mesa_enum_to_string(opcode)); - switch (opcode) { - case GL_CLEAR: - case GL_SET: - case GL_COPY: - case GL_COPY_INVERTED: - case GL_NOOP: - case GL_INVERT: - case GL_AND: - case GL_NAND: - case GL_OR: - case GL_NOR: - case GL_XOR: - case GL_EQUIV: - case GL_AND_REVERSE: - case GL_AND_INVERTED: - case GL_OR_REVERSE: - case GL_OR_INVERTED: - break; - default: - _mesa_error( ctx, GL_INVALID_ENUM, "glLogicOp" ); - return; - } - - logic_op(ctx, opcode); + logic_op(ctx, opcode, false); } @@ -914,7 +916,7 @@ void GLAPIENTRY _mesa_LogicOp_no_error(GLenum opcode) { GET_CURRENT_CONTEXT(ctx); - logic_op(ctx, opcode); + logic_op(ctx, opcode, true); }