Mesa (master): mesa: optimize no-change check in _mesa_BlendEquationSeparate()
Brian Paul
brianp at kemper.freedesktop.org
Thu Oct 15 13:23:09 UTC 2015
Module: Mesa
Branch: master
Commit: 34de3c4c1635a42c884da3321fc35ef07be34a6e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=34de3c4c1635a42c884da3321fc35ef07be34a6e
Author: Brian Paul <brianp at vmware.com>
Date: Wed Oct 14 09:45:36 2015 -0600
mesa: optimize no-change check in _mesa_BlendEquationSeparate()
Reviewed-by: Eric Anholt <eric at anholt.net>
---
src/mesa/main/blend.c | 41 ++++++++++++++++++++++++++---------------
1 file changed, 26 insertions(+), 15 deletions(-)
diff --git a/src/mesa/main/blend.c b/src/mesa/main/blend.c
index 01b6919..14742d0 100644
--- a/src/mesa/main/blend.c
+++ b/src/mesa/main/blend.c
@@ -432,7 +432,7 @@ void GLAPIENTRY
_mesa_BlendEquationSeparate( GLenum modeRGB, GLenum modeA )
{
GLuint buf, numBuffers;
- GLboolean changed;
+ bool changed = false;
GET_CURRENT_CONTEXT(ctx);
if (MESA_VERBOSE & VERBOSE_API)
@@ -440,6 +440,30 @@ _mesa_BlendEquationSeparate( GLenum modeRGB, GLenum modeA )
_mesa_enum_to_string(modeRGB),
_mesa_enum_to_string(modeA));
+ numBuffers = ctx->Extensions.ARB_draw_buffers_blend
+ ? ctx->Const.MaxDrawBuffers : 1;
+
+ if (ctx->Color._BlendEquationPerBuffer) {
+ /* Check all per-buffer states */
+ for (buf = 0; buf < numBuffers; buf++) {
+ if (ctx->Color.Blend[buf].EquationRGB != modeRGB ||
+ ctx->Color.Blend[buf].EquationA != modeA) {
+ changed = true;
+ break;
+ }
+ }
+ }
+ else {
+ /* only need to check 0th per-buffer state */
+ if (ctx->Color.Blend[0].EquationRGB != modeRGB ||
+ ctx->Color.Blend[0].EquationA != modeA) {
+ changed = true;
+ }
+ }
+
+ if (!changed)
+ return;
+
if ( (modeRGB != modeA) && !ctx->Extensions.EXT_blend_equation_separate ) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"glBlendEquationSeparateEXT not supported by driver");
@@ -456,21 +480,8 @@ _mesa_BlendEquationSeparate( GLenum modeRGB, GLenum modeA )
return;
}
- numBuffers = ctx->Extensions.ARB_draw_buffers_blend
- ? ctx->Const.MaxDrawBuffers : 1;
-
- changed = GL_FALSE;
- for (buf = 0; buf < numBuffers; buf++) {
- if (ctx->Color.Blend[buf].EquationRGB != modeRGB ||
- ctx->Color.Blend[buf].EquationA != modeA) {
- changed = GL_TRUE;
- break;
- }
- }
- if (!changed)
- return;
-
FLUSH_VERTICES(ctx, _NEW_COLOR);
+
for (buf = 0; buf < numBuffers; buf++) {
ctx->Color.Blend[buf].EquationRGB = modeRGB;
ctx->Color.Blend[buf].EquationA = modeA;
More information about the mesa-commit
mailing list