diff options
author | Brian Paul <brian.paul@tungstengraphics.com> | 2003-12-15 18:04:17 +0000 |
---|---|---|
committer | Brian Paul <brian.paul@tungstengraphics.com> | 2003-12-15 18:04:17 +0000 |
commit | 63f4e198b41ad5a25200db3d126a6320d6cf8dcc (patch) | |
tree | 14e16f838a9ba329206dee4efa61af0f2ac8f9ec | |
parent | b3b725b1e6044d29fb5f484979766d1ef8a7fa9f (diff) |
fix GL_MIN/MAX w/ glBlendFuncSeparate bug (Ian Romanick)
-rw-r--r-- | src/mesa/swrast/s_blend.c | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/src/mesa/swrast/s_blend.c b/src/mesa/swrast/s_blend.c index 6d522ffd87..124d389b30 100644 --- a/src/mesa/swrast/s_blend.c +++ b/src/mesa/swrast/s_blend.c @@ -685,9 +685,6 @@ blend_general( GLcontext *ctx, GLuint n, const GLubyte mask[], } - - - /* * Analyze current blending parameters to pick fastest blending function. * Result: the ctx->Color.BlendFunc pointer is updated. @@ -700,7 +697,27 @@ void _swrast_choose_blend_func( GLcontext *ctx ) const GLenum srcA = ctx->Color.BlendSrcA; const GLenum dstA = ctx->Color.BlendDstA; - if (srcRGB != srcA || dstRGB != dstA) { + if (eq==GL_MIN_EXT) { + /* Note: GL_MIN ignores the blending weight factors */ +#if defined(USE_MMX_ASM) + if ( cpu_has_mmx ) { + SWRAST_CONTEXT(ctx)->BlendFunc = _mesa_mmx_blend_min; + } + else +#endif + SWRAST_CONTEXT(ctx)->BlendFunc = blend_min; + } + else if (eq==GL_MAX_EXT) { + /* Note: GL_MAX ignores the blending weight factors */ +#if defined(USE_MMX_ASM) + if ( cpu_has_mmx ) { + SWRAST_CONTEXT(ctx)->BlendFunc = _mesa_mmx_blend_max; + } + else +#endif + SWRAST_CONTEXT(ctx)->BlendFunc = blend_max; + } + else if (srcRGB != srcA || dstRGB != dstA) { SWRAST_CONTEXT(ctx)->BlendFunc = blend_general; } else if (eq==GL_FUNC_ADD_EXT && srcRGB==GL_SRC_ALPHA @@ -735,24 +752,6 @@ void _swrast_choose_blend_func( GLcontext *ctx ) #endif SWRAST_CONTEXT(ctx)->BlendFunc = blend_modulate; } - else if (eq==GL_MIN_EXT) { -#if defined(USE_MMX_ASM) - if ( cpu_has_mmx ) { - SWRAST_CONTEXT(ctx)->BlendFunc = _mesa_mmx_blend_min; - } - else -#endif - SWRAST_CONTEXT(ctx)->BlendFunc = blend_min; - } - else if (eq==GL_MAX_EXT) { -#if defined(USE_MMX_ASM) - if ( cpu_has_mmx ) { - SWRAST_CONTEXT(ctx)->BlendFunc = _mesa_mmx_blend_max; - } - else -#endif - SWRAST_CONTEXT(ctx)->BlendFunc = blend_max; - } else if (eq==GL_FUNC_ADD_EXT && srcRGB == GL_ZERO && dstRGB == GL_ONE) { SWRAST_CONTEXT(ctx)->BlendFunc = blend_noop; } |