Mesa (master): i915: Fix GL_DOT3_RGBA a bit

Ville Syrjala vsyrjala at kemper.freedesktop.org
Thu Nov 13 17:15:43 UTC 2014


Module: Mesa
Branch: master
Commit: 7988ff2fd1f56b2c78809937eaa663de02a144bc
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7988ff2fd1f56b2c78809937eaa663de02a144bc

Author: Ville Syrjälä <ville.syrjala at linux.intel.com>
Date:   Thu Jul  3 15:55:38 2014 +0300

i915: Fix GL_DOT3_RGBA a bit

The spec says using DOT4 for alpha is undefined unless DOT4 is also used
for color. It seems to do the right thing anyway, but better safe than sorry.

Also override numAlphaArgs to 2 for DOT4 since that's what it wants.
This migth fix something in case the specified alpha mode has only one
argument. Also avoids emitting a needless 3DSTATE_MAP_BLEND_ARG if
the specified alpha mode has three arguments.

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>

---

 src/mesa/drivers/dri/i915/i830_texblend.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i915/i830_texblend.c b/src/mesa/drivers/dri/i915/i830_texblend.c
index 236be59..feea383 100644
--- a/src/mesa/drivers/dri/i915/i830_texblend.c
+++ b/src/mesa/drivers/dri/i915/i830_texblend.c
@@ -136,7 +136,7 @@ i830SetTexEnvCombine(struct i830_context * i830,
                      GLuint texel_op, GLuint * state, const GLfloat * factor)
 {
    const GLuint numColorArgs = combine->_NumArgsRGB;
-   const GLuint numAlphaArgs = combine->_NumArgsA;
+   GLuint numAlphaArgs = combine->_NumArgsA;
 
    GLuint blendop;
    GLuint ablendop;
@@ -209,7 +209,7 @@ i830SetTexEnvCombine(struct i830_context * i830,
       break;
    case GL_DOT3_RGBA_EXT:
    case GL_DOT3_RGBA:
-      blendop = TEXBLENDOP_DOT3;
+      blendop = TEXBLENDOP_DOT4;
       break;
    default:
       return pass_through(state, blendUnit);
@@ -273,6 +273,7 @@ i830SetTexEnvCombine(struct i830_context * i830,
    if (combine->ModeRGB == GL_DOT3_RGBA_EXT ||
        combine->ModeRGB == GL_DOT3_RGBA) {
       ablendop = TEXBLENDOP_DOT4;
+      numAlphaArgs = 2;
       args_A[0] = TEXBLENDARG_FACTOR;   /* the global factor */
       args_A[1] = TEXBLENDARG_FACTOR;
       args_A[2] = TEXBLENDARG_FACTOR;




More information about the mesa-commit mailing list