aboutsummaryrefslogtreecommitdiffstats
path: root/src/mesa/main/blend.c
diff options
context:
space:
mode:
authorSamuel Pitoiset <[email protected]>2017-08-02 20:47:49 +0200
committerSamuel Pitoiset <[email protected]>2017-08-03 10:56:02 +0200
commit39df62551c782fb571833e26d35c53cdcdb6ab4b (patch)
tree2e474706e147b94c0664d9a2ffd30e4adba92302 /src/mesa/main/blend.c
parent6d8af9fd50cffae4a30a1f19a9c7927fc1c4d442 (diff)
mesa: only check errors when the state change in glBlendEquationSeparateiARB()
When this GL call is a no-op, it should be a little faster. Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Timothy Arceri <[email protected]>
Diffstat (limited to 'src/mesa/main/blend.c')
-rw-r--r--src/mesa/main/blend.c42
1 files changed, 22 insertions, 20 deletions
diff --git a/src/mesa/main/blend.c b/src/mesa/main/blend.c
index 9ca04c1db29..af378f784da 100644
--- a/src/mesa/main/blend.c
+++ b/src/mesa/main/blend.c
@@ -694,14 +694,32 @@ _mesa_BlendEquationSeparate(GLenum modeRGB, GLenum modeA)
}
-static void
+static ALWAYS_INLINE void
blend_equation_separatei(struct gl_context *ctx, GLuint buf, GLenum modeRGB,
- GLenum modeA)
+ GLenum modeA, bool no_error)
{
if (ctx->Color.Blend[buf].EquationRGB == modeRGB &&
ctx->Color.Blend[buf].EquationA == modeA)
return; /* no change */
+ if (!no_error) {
+ /* Only allow simple blending equations.
+ * The GL_KHR_blend_equation_advanced spec says:
+ *
+ * "NOTE: These enums are not accepted by the <modeRGB> or <modeAlpha>
+ * parameters of BlendEquationSeparate or BlendEquationSeparatei."
+ */
+ if (!legal_simple_blend_equation(ctx, modeRGB)) {
+ _mesa_error(ctx, GL_INVALID_ENUM, "glBlendEquationSeparatei(modeRGB)");
+ return;
+ }
+
+ if (!legal_simple_blend_equation(ctx, modeA)) {
+ _mesa_error(ctx, GL_INVALID_ENUM, "glBlendEquationSeparatei(modeA)");
+ return;
+ }
+ }
+
_mesa_flush_vertices_for_blend_state(ctx);
ctx->Color.Blend[buf].EquationRGB = modeRGB;
ctx->Color.Blend[buf].EquationA = modeA;
@@ -715,7 +733,7 @@ _mesa_BlendEquationSeparateiARB_no_error(GLuint buf, GLenum modeRGB,
GLenum modeA)
{
GET_CURRENT_CONTEXT(ctx);
- blend_equation_separatei(ctx, buf, modeRGB, modeA);
+ blend_equation_separatei(ctx, buf, modeRGB, modeA, true);
}
@@ -738,23 +756,7 @@ _mesa_BlendEquationSeparateiARB(GLuint buf, GLenum modeRGB, GLenum modeA)
return;
}
- /* Only allow simple blending equations.
- * The GL_KHR_blend_equation_advanced spec says:
- *
- * "NOTE: These enums are not accepted by the <modeRGB> or <modeAlpha>
- * parameters of BlendEquationSeparate or BlendEquationSeparatei."
- */
- if (!legal_simple_blend_equation(ctx, modeRGB)) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glBlendEquationSeparatei(modeRGB)");
- return;
- }
-
- if (!legal_simple_blend_equation(ctx, modeA)) {
- _mesa_error(ctx, GL_INVALID_ENUM, "glBlendEquationSeparatei(modeA)");
- return;
- }
-
- blend_equation_separatei(ctx, buf, modeRGB, modeA);
+ blend_equation_separatei(ctx, buf, modeRGB, modeA, false);
}