Remove ctx->Point._Size and ctx->Line._Width.
[mesa.git] / src / mesa / drivers / dri / i810 / i810state.c
index 9249d0841a0f20a03e8b0cce6f183b7c7028de94..e0d5b2b4876da5a3f3e0373dfa75bd07dcf0b91f 100644 (file)
@@ -5,7 +5,6 @@
 #include "glheader.h"
 #include "context.h"
 #include "macros.h"
-#include "enums.h"
 #include "dd.h"
 #include "colormac.h"
 
@@ -22,8 +21,8 @@
 #include "i810ioctl.h"
 
 #include "swrast/swrast.h"
-#include "array_cache/acache.h"
 #include "tnl/tnl.h"
+#include "vbo/vbo.h"
 #include "swrast_setup/swrast_setup.h"
 
 #include "tnl/t_pipeline.h"
@@ -75,10 +74,14 @@ static void i810AlphaFunc(GLcontext *ctx, GLenum func, GLfloat ref)
    imesa->Setup[I810_CTXREG_ZA] |= a;
 }
 
-static void i810BlendEquation(GLcontext *ctx, GLenum mode)
+static void i810BlendEquationSeparate(GLcontext *ctx,
+                                     GLenum modeRGB, GLenum modeA)
 {
+   assert( modeRGB == modeA );
+
    /* Can only do GL_ADD equation in hardware */
-   FALLBACK( I810_CONTEXT(ctx), I810_FALLBACK_BLEND_EQ, mode != GL_FUNC_ADD_EXT);
+   FALLBACK( I810_CONTEXT(ctx), I810_FALLBACK_BLEND_EQ, 
+            modeRGB != GL_FUNC_ADD);
 
    /* BlendEquation sets ColorLogicOpEnabled in an unexpected
     * manner.
@@ -98,14 +101,23 @@ static void i810BlendFuncSeparate( GLcontext *ctx, GLenum sfactorRGB,
 
    switch (ctx->Color.BlendSrcRGB) {
    case GL_ZERO:                a |= SDM_SRC_ZERO; break;
-   case GL_SRC_ALPHA:           a |= SDM_SRC_SRC_ALPHA; break;
    case GL_ONE:                 a |= SDM_SRC_ONE; break;
-   case GL_DST_COLOR:           a |= SDM_SRC_DST_COLOR; break;
-   case GL_ONE_MINUS_DST_COLOR: a |= SDM_SRC_INV_DST_COLOR; break;
+   case GL_SRC_COLOR:           a |= SDM_SRC_SRC_COLOR; break;
+   case GL_ONE_MINUS_SRC_COLOR: a |= SDM_SRC_INV_SRC_COLOR; break;
+   case GL_SRC_ALPHA:           a |= SDM_SRC_SRC_ALPHA; break;
    case GL_ONE_MINUS_SRC_ALPHA: a |= SDM_SRC_INV_SRC_ALPHA; break;
    case GL_DST_ALPHA:           a |= SDM_SRC_ONE; break;
    case GL_ONE_MINUS_DST_ALPHA: a |= SDM_SRC_ZERO; break;
-   case GL_SRC_ALPHA_SATURATE:  /*a |= SDM_SRC_SRC_ALPHA; break;*/
+   case GL_DST_COLOR:           a |= SDM_SRC_DST_COLOR; break;
+   case GL_ONE_MINUS_DST_COLOR: a |= SDM_SRC_INV_DST_COLOR; break;
+
+   /* (f, f, f, 1), f = min(As, 1 - Ad) = min(As, 1 - 1) = 0
+    * So (f, f, f, 1) = (0, 0, 0, 1).  Since there is no destination alpha and
+    * the only supported alpha operation is GL_FUNC_ADD, the result modulating
+    * the source alpha with the alpha factor is largely irrelevant.
+    */
+   case GL_SRC_ALPHA_SATURATE:  a |= SDM_SRC_ZERO; break;
+
    case GL_CONSTANT_COLOR:
    case GL_ONE_MINUS_CONSTANT_COLOR:
    case GL_CONSTANT_ALPHA:
@@ -117,14 +129,17 @@ static void i810BlendFuncSeparate( GLcontext *ctx, GLenum sfactorRGB,
    }
 
    switch (ctx->Color.BlendDstRGB) {
-   case GL_SRC_ALPHA:           a |= SDM_DST_SRC_ALPHA; break;
-   case GL_ONE_MINUS_SRC_ALPHA: a |= SDM_DST_INV_SRC_ALPHA; break;
    case GL_ZERO:                a |= SDM_DST_ZERO; break;
    case GL_ONE:                 a |= SDM_DST_ONE; break;
    case GL_SRC_COLOR:           a |= SDM_DST_SRC_COLOR; break;
    case GL_ONE_MINUS_SRC_COLOR: a |= SDM_DST_INV_SRC_COLOR; break;
+   case GL_SRC_ALPHA:           a |= SDM_DST_SRC_ALPHA; break;
+   case GL_ONE_MINUS_SRC_ALPHA: a |= SDM_DST_INV_SRC_ALPHA; break;
    case GL_DST_ALPHA:           a |= SDM_DST_ONE; break;
    case GL_ONE_MINUS_DST_ALPHA: a |= SDM_DST_ZERO; break;
+   case GL_DST_COLOR:           a |= SDM_DST_DST_COLOR; break;
+   case GL_ONE_MINUS_DST_COLOR: a |= SDM_DST_INV_DST_COLOR; break;
+
    case GL_CONSTANT_COLOR:
    case GL_ONE_MINUS_CONSTANT_COLOR:
    case GL_CONSTANT_ALPHA:
@@ -280,11 +295,11 @@ void i810DrawBuffer(GLcontext *ctx, GLenum mode )
    /*
     * _DrawDestMask is easier to cope with than <mode>.
     */
-   switch ( ctx->Color._DrawDestMask ) {
-   case FRONT_LEFT_BIT:
-     front=1;
+   switch ( ctx->DrawBuffer->_ColorDrawBufferMask[0]) {
+   case BUFFER_BIT_FRONT_LEFT:
+     front = 1;
      break;
-   case BACK_LEFT_BIT:
+   case BUFFER_BIT_BACK_LEFT:
      front = 0;
      break;
    default:
@@ -312,11 +327,6 @@ void i810DrawBuffer(GLcontext *ctx, GLenum mode )
                                             imesa->i810Screen->backPitchBits);
      i810XMesaSetBackClipRects( imesa );
    }
-
-   /* We want to update the s/w rast state too so that r200SetBuffer()
-    * gets called.
-    */
-   _swrast_DrawBuffer(ctx, mode);
 }
 
 
@@ -370,7 +380,10 @@ static void i810CullFaceFrontFace(GLcontext *ctx, GLenum unused)
 static void i810LineWidth( GLcontext *ctx, GLfloat widthf )
 {
    i810ContextPtr imesa = I810_CONTEXT( ctx );
-   int width = (int)ctx->Line._Width;
+   /* AA, non-AA limits are same */
+   const int width = (int) CLAMP(ctx->Line.Width,
+                                 ctx->Const.MinLineWidth,
+                                 ctx->Const.MaxLineWidth);
 
    imesa->LcsLineWidth = 0;
    if (width & 1) imesa->LcsLineWidth |= LCS_LINEWIDTH_1_0;
@@ -386,7 +399,10 @@ static void i810LineWidth( GLcontext *ctx, GLfloat widthf )
 static void i810PointSize( GLcontext *ctx, GLfloat sz )
 {
    i810ContextPtr imesa = I810_CONTEXT( ctx );
-   int size = (int)ctx->Point._Size;
+   /* AA, non-AA limits are same */
+   const int size = (int) CLAMP(ctx->Point.Size,
+                                ctx->Const.MinPointSize,
+                                ctx->Const.MaxPointSize);
 
    imesa->LcsPointSize = 0;
    if (size & 1) imesa->LcsPointSize |= LCS_LINEWIDTH_1_0;
@@ -587,6 +603,7 @@ static void i810Enable(GLcontext *ctx, GLenum cap, GLboolean state)
         imesa->Setup[I810_CTXREG_LCS] |= LCS_CULL_DISABLE;
       break;
    case GL_TEXTURE_2D:
+   case GL_TEXTURE_RECTANGLE_NV:
       I810_STATECHANGE(imesa, I810_UPLOAD_CTX);
       if (ctx->Texture.CurrentUnit == 0) {
         imesa->Setup[I810_CTXREG_MT] &= ~MT_TEXEL0_ENABLE;
@@ -727,13 +744,13 @@ void i810InitState( GLcontext *ctx )
                                     MC_UPDATE_DEST |
                                     MC_DEST_CURRENT |
                                     MC_UPDATE_ARG1 |
-                                    MC_ARG1_ITERATED_COLOR |
-                                    MC_ARG1_DONT_REPLICATE_ALPHA |
-                                    MC_ARG1_DONT_INVERT |
+                                    ((MC_ARG_ITERATED_COLOR |
+                                      MC_ARG_DONT_REPLICATE_ALPHA |
+                                      MC_ARG_DONT_INVERT) << MC_ARG1_SHIFT) |
                                     MC_UPDATE_ARG2 |
-                                    MC_ARG2_ONE |
-                                    MC_ARG2_DONT_REPLICATE_ALPHA |
-                                    MC_ARG2_DONT_INVERT |
+                                    ((MC_ARG_ONE |
+                                      MC_ARG_DONT_REPLICATE_ALPHA |
+                                      MC_ARG_DONT_INVERT) << MC_ARG2_SHIFT) |
                                     MC_UPDATE_OP |
                                     MC_OP_ARG1 );
 
@@ -742,13 +759,13 @@ void i810InitState( GLcontext *ctx )
                                     MC_UPDATE_DEST |
                                     MC_DEST_CURRENT |
                                     MC_UPDATE_ARG1 |
-                                    MC_ARG1_ONE |
-                                    MC_ARG1_DONT_REPLICATE_ALPHA |
-                                    MC_ARG1_DONT_INVERT |
+                                    ((MC_ARG_ONE |
+                                      MC_ARG_DONT_REPLICATE_ALPHA |
+                                      MC_ARG_DONT_INVERT) << MC_ARG1_SHIFT) |
                                     MC_UPDATE_ARG2 |
-                                    MC_ARG2_ONE |
-                                    MC_ARG2_DONT_REPLICATE_ALPHA |
-                                    MC_ARG2_DONT_INVERT |
+                                    ((MC_ARG_ONE |
+                                      MC_ARG_DONT_REPLICATE_ALPHA |
+                                      MC_ARG_DONT_INVERT) << MC_ARG2_SHIFT) |
                                     MC_UPDATE_OP |
                                     MC_OP_DISABLE );
 
@@ -758,13 +775,13 @@ void i810InitState( GLcontext *ctx )
                                     MC_UPDATE_DEST |
                                     MC_DEST_CURRENT |
                                     MC_UPDATE_ARG1 |
-                                    MC_ARG1_CURRENT_COLOR |
-                                    MC_ARG1_REPLICATE_ALPHA |
-                                    MC_ARG1_DONT_INVERT |
+                                    ((MC_ARG_CURRENT_COLOR |
+                                      MC_ARG_REPLICATE_ALPHA |
+                                      MC_ARG_DONT_INVERT) << MC_ARG1_SHIFT) |
                                     MC_UPDATE_ARG2 |
-                                    MC_ARG2_ONE |
-                                    MC_ARG2_DONT_REPLICATE_ALPHA |
-                                    MC_ARG2_DONT_INVERT |
+                                    ((MC_ARG_ONE |
+                                      MC_ARG_DONT_REPLICATE_ALPHA |
+                                      MC_ARG_DONT_INVERT) << MC_ARG2_SHIFT) |
                                     MC_UPDATE_OP |
                                     MC_OP_DISABLE );
 
@@ -772,11 +789,11 @@ void i810InitState( GLcontext *ctx )
    imesa->Setup[I810_CTXREG_MA0] = ( GFX_OP_MAP_ALPHA_STAGES |
                                     MA_STAGE_0 |
                                     MA_UPDATE_ARG1 |
-                                    MA_ARG1_ITERATED_ALPHA |
-                                    MA_ARG1_DONT_INVERT |
+                                    ((MA_ARG_ITERATED_ALPHA |
+                                      MA_ARG_DONT_INVERT) << MA_ARG1_SHIFT) |
                                     MA_UPDATE_ARG2 |
-                                    MA_ARG2_CURRENT_ALPHA |
-                                    MA_ARG2_DONT_INVERT |
+                                    ((MA_ARG_CURRENT_ALPHA |
+                                      MA_ARG_DONT_INVERT) << MA_ARG2_SHIFT) |
                                     MA_UPDATE_OP |
                                     MA_OP_ARG1 );
 
@@ -784,11 +801,11 @@ void i810InitState( GLcontext *ctx )
    imesa->Setup[I810_CTXREG_MA1] = ( GFX_OP_MAP_ALPHA_STAGES |
                                     MA_STAGE_1 |
                                     MA_UPDATE_ARG1 |
-                                    MA_ARG1_CURRENT_ALPHA |
-                                    MA_ARG1_DONT_INVERT |
+                                    ((MA_ARG_CURRENT_ALPHA |
+                                      MA_ARG_DONT_INVERT) << MA_ARG1_SHIFT) |
                                     MA_UPDATE_ARG2 |
-                                    MA_ARG2_CURRENT_ALPHA |
-                                    MA_ARG2_DONT_INVERT |
+                                    ((MA_ARG_CURRENT_ALPHA |
+                                      MA_ARG_DONT_INVERT) << MA_ARG2_SHIFT) |
                                     MA_UPDATE_OP |
                                     MA_OP_ARG1 );
 
@@ -796,11 +813,11 @@ void i810InitState( GLcontext *ctx )
    imesa->Setup[I810_CTXREG_MA2] = ( GFX_OP_MAP_ALPHA_STAGES |
                                     MA_STAGE_2 |
                                     MA_UPDATE_ARG1 |
-                                    MA_ARG1_CURRENT_ALPHA |
-                                    MA_ARG1_DONT_INVERT |
+                                    ((MA_ARG_CURRENT_ALPHA |
+                                      MA_ARG_DONT_INVERT) << MA_ARG1_SHIFT) |
                                     MA_UPDATE_ARG2 |
-                                    MA_ARG2_CURRENT_ALPHA |
-                                    MA_ARG2_DONT_INVERT |
+                                    ((MA_ARG_CURRENT_ALPHA |
+                                      MA_ARG_DONT_INVERT) << MA_ARG2_SHIFT) |
                                     MA_UPDATE_OP |
                                     MA_OP_ARG1 );
 
@@ -920,14 +937,10 @@ void i810InitState( GLcontext *ctx )
 
    if (imesa->glCtx->Visual.doubleBufferMode && imesa->sarea->pf_current_page == 0) {
       /* use back buffer by default */
-      imesa->drawMap = i810Screen->back.map;
-      imesa->readMap = i810Screen->back.map;
       imesa->BufferSetup[I810_DESTREG_DI1] = (i810Screen->backOffset |
                                              i810Screen->backPitchBits);
    } else {
       /* use front buffer by default */
-      imesa->drawMap = (char *)imesa->driScreen->pFB;
-      imesa->readMap = (char *)imesa->driScreen->pFB;
       imesa->BufferSetup[I810_DESTREG_DI1] = (i810Screen->fbOffset |
                                              i810Screen->backPitchBits);
    }
@@ -946,7 +959,7 @@ static void i810InvalidateState( GLcontext *ctx, GLuint new_state )
 {
    _swrast_InvalidateState( ctx, new_state );
    _swsetup_InvalidateState( ctx, new_state );
-   _ac_InvalidateState( ctx, new_state );
+   _vbo_InvalidateState( ctx, new_state );
    _tnl_InvalidateState( ctx, new_state );
    I810_CONTEXT(ctx)->new_state |= new_state;
 }
@@ -961,7 +974,7 @@ void i810InitStateFuncs(GLcontext *ctx)
    /* API callbacks
     */
    ctx->Driver.AlphaFunc = i810AlphaFunc;
-   ctx->Driver.BlendEquation = i810BlendEquation;
+   ctx->Driver.BlendEquationSeparate = i810BlendEquationSeparate;
    ctx->Driver.BlendFuncSeparate = i810BlendFuncSeparate;
    ctx->Driver.ClearColor = i810ClearColor;
    ctx->Driver.ColorMask = i810ColorMask;
@@ -988,19 +1001,4 @@ void i810InitStateFuncs(GLcontext *ctx)
    } else {
       ctx->Driver.LightModelfv = i810LightModelfv;
    }
-
-   /* Pixel path fallbacks.
-    */
-   ctx->Driver.Accum = _swrast_Accum;
-   ctx->Driver.Bitmap = _swrast_Bitmap;
-   ctx->Driver.CopyPixels = _swrast_CopyPixels;
-   ctx->Driver.DrawPixels = _swrast_DrawPixels;
-   ctx->Driver.ReadPixels = _swrast_ReadPixels;
-
-   /* Swrast hooks for imaging extensions:
-    */
-   ctx->Driver.CopyColorTable = _swrast_CopyColorTable;
-   ctx->Driver.CopyColorSubTable = _swrast_CopyColorSubTable;
-   ctx->Driver.CopyConvolutionFilter1D = _swrast_CopyConvolutionFilter1D;
-   ctx->Driver.CopyConvolutionFilter2D = _swrast_CopyConvolutionFilter2D;
 }