Merge branch 'llvm-cliptest-viewport'
[mesa.git] / src / mesa / drivers / dri / unichrome / via_state.c
index 2c9cfca522ea3c8a66951edaed51794b1c0db697..033352188d4da4a6cc2abe9742cbb38d1189f628 100644 (file)
 
 #include <stdio.h>
 
-#include "glheader.h"
-#include "context.h"
-#include "macros.h"
-#include "colormac.h"
-#include "enums.h"
-#include "dd.h"
-
-#include "mm.h"
+#include "main/glheader.h"
+#include "main/context.h"
+#include "main/macros.h"
+#include "main/colormac.h"
+#include "main/enums.h"
+#include "main/dd.h"
+#include "main/mm.h"
+
 #include "via_context.h"
 #include "via_state.h"
 #include "via_tex.h"
-#include "via_tris.h"
 #include "via_ioctl.h"
 #include "via_3d_reg.h"
 
 #include "swrast/swrast.h"
-#include "array_cache/acache.h"
+#include "vbo/vbo.h"
 #include "tnl/tnl.h"
 #include "swrast_setup/swrast_setup.h"
 
-#include "tnl/t_pipeline.h"
-
 
 static GLuint ROP[16] = {
     HC_HROP_BLACK,    /* GL_CLEAR           0                          */
@@ -81,7 +78,7 @@ static GLuint viaComputeLodBias(GLfloat bias)
 
 void viaEmitState(struct via_context *vmesa)
 {
-   GLcontext *ctx = vmesa->glCtx;
+   struct gl_context *ctx = vmesa->glCtx;
    GLuint i = 0;
    GLuint j = 0;
    RING_VARS;
@@ -476,7 +473,7 @@ void viaEmitState(struct via_context *vmesa)
     */
    if (ctx->Polygon.StippleFlag) {
       GLuint *stipple = &ctx->PolygonStipple[0];
-      __DRIdrawablePrivate *dPriv = vmesa->driDrawable;
+      __DRIdrawable *dPriv = vmesa->driDrawable;
       struct via_renderbuffer *const vrb = 
        (struct via_renderbuffer *) dPriv->driverPrivate;
       GLint i;
@@ -500,10 +497,8 @@ void viaEmitState(struct via_context *vmesa)
 
       OUT_RING( HC_HEADER2 );                     
       OUT_RING( (HC_ParaType_NotTex << 16) );
-      OUT_RING( (HC_SubA_HSPXYOS << 24) | 
-               (((32- vrb->drawXoff) & 0x1f) << HC_HSPXOS_SHIFT));
-      OUT_RING( (HC_SubA_HSPXYOS << 24) | 
-               (((32 - vrb->drawXoff) & 0x1f) << HC_HSPXOS_SHIFT));
+      OUT_RING( (HC_SubA_HSPXYOS << 24) );
+      OUT_RING( (HC_SubA_HSPXYOS << 24) );
 
       ADVANCE_RING();
    }
@@ -513,9 +508,9 @@ void viaEmitState(struct via_context *vmesa)
 }
 
 
-static __inline__ GLuint viaPackColor(GLuint bpp,
-                                      GLubyte r, GLubyte g,
-                                      GLubyte b, GLubyte a)
+static INLINE GLuint viaPackColor(GLuint bpp,
+                                  GLubyte r, GLubyte g,
+                                  GLubyte b, GLubyte a)
 {
     switch (bpp) {
     case 16:
@@ -528,7 +523,7 @@ static __inline__ GLuint viaPackColor(GLuint bpp,
    }
 }
 
-static void viaBlendEquationSeparate(GLcontext *ctx,
+static void viaBlendEquationSeparate(struct gl_context *ctx,
                                     GLenum rgbMode, 
                                     GLenum aMode)
 {
@@ -550,7 +545,7 @@ static void viaBlendEquationSeparate(GLcontext *ctx,
               ctx->Color.LogicOp != GL_COPY));
 }
 
-static void viaBlendFunc(GLcontext *ctx, GLenum sfactor, GLenum dfactor)
+static void viaBlendFunc(struct gl_context *ctx, GLenum sfactor, GLenum dfactor)
 {
     struct via_context *vmesa = VIA_CONTEXT(ctx);
     GLboolean fallback = GL_FALSE;
@@ -585,7 +580,7 @@ static void viaBlendFunc(GLcontext *ctx, GLenum sfactor, GLenum dfactor)
 
 /* Shouldn't be called as the extension is disabled.
  */
-static void viaBlendFuncSeparate(GLcontext *ctx, GLenum sfactorRGB,
+static void viaBlendFuncSeparate(struct gl_context *ctx, GLenum sfactorRGB,
                                  GLenum dfactorRGB, GLenum sfactorA,
                                  GLenum dfactorA)
 {
@@ -602,7 +597,7 @@ static void viaBlendFuncSeparate(GLcontext *ctx, GLenum sfactorRGB,
 /* =============================================================
  * Hardware clipping
  */
-static void viaScissor(GLcontext *ctx, GLint x, GLint y,
+static void viaScissor(struct gl_context *ctx, GLint x, GLint y,
                        GLsizei w, GLsizei h)
 {
     struct via_context *vmesa = VIA_CONTEXT(ctx);
@@ -624,7 +619,7 @@ static void viaScissor(GLcontext *ctx, GLint x, GLint y,
     vmesa->scissorRect.y2 = vmesa->driDrawable->h - y;
 }
 
-static void viaEnable(GLcontext *ctx, GLenum cap, GLboolean state)
+static void viaEnable(struct gl_context *ctx, GLenum cap, GLboolean state)
 {
    struct via_context *vmesa = VIA_CONTEXT(ctx);
 
@@ -642,13 +637,13 @@ static void viaEnable(GLcontext *ctx, GLenum cap, GLboolean state)
 
 /* Fallback to swrast for select and feedback.
  */
-static void viaRenderMode(GLcontext *ctx, GLenum mode)
+static void viaRenderMode(struct gl_context *ctx, GLenum mode)
 {
     FALLBACK(VIA_CONTEXT(ctx), VIA_FALLBACK_RENDERMODE, (mode != GL_RENDER));
 }
 
 
-static void viaDrawBuffer(GLcontext *ctx, GLenum mode)
+static void viaDrawBuffer(struct gl_context *ctx, GLenum mode)
 {
    struct via_context *vmesa = VIA_CONTEXT(ctx);
 
@@ -658,13 +653,18 @@ static void viaDrawBuffer(GLcontext *ctx, GLenum mode)
    if (!ctx->DrawBuffer)
       return;
 
-   switch ( ctx->DrawBuffer->_ColorDrawBufferMask[0] ) {
-   case BUFFER_BIT_FRONT_LEFT:
+   if (ctx->DrawBuffer->_NumColorDrawBuffers != 1) {
+      FALLBACK(vmesa, VIA_FALLBACK_DRAW_BUFFER, GL_TRUE);
+      return;
+   }
+
+   switch ( ctx->DrawBuffer->_ColorDrawBufferIndexes[0] ) {
+   case BUFFER_FRONT_LEFT:
       VIA_FLUSH_DMA(vmesa);
       vmesa->drawBuffer = &vmesa->front;
       FALLBACK(vmesa, VIA_FALLBACK_DRAW_BUFFER, GL_FALSE);
       break;
-   case BUFFER_BIT_BACK_LEFT:
+   case BUFFER_BACK_LEFT:
       VIA_FLUSH_DMA(vmesa);
       vmesa->drawBuffer = &vmesa->back;
       FALLBACK(vmesa, VIA_FALLBACK_DRAW_BUFFER, GL_FALSE);
@@ -678,7 +678,7 @@ static void viaDrawBuffer(GLcontext *ctx, GLenum mode)
    viaXMesaWindowMoved(vmesa);
 }
 
-static void viaClearColor(GLcontext *ctx, const GLfloat color[4])
+static void viaClearColor(struct gl_context *ctx, const GLfloat color[4])
 {
     struct via_context *vmesa = VIA_CONTEXT(ctx);
     GLubyte pcolor[4];
@@ -696,7 +696,7 @@ static void viaClearColor(GLcontext *ctx, const GLfloat color[4])
 #define WRITEMASK_GREEN_SHIFT 29
 #define WRITEMASK_BLUE_SHIFT  28
 
-static void viaColorMask(GLcontext *ctx,
+static void viaColorMask(struct gl_context *ctx,
                         GLboolean r, GLboolean g,
                         GLboolean b, GLboolean a)
 {
@@ -712,47 +712,41 @@ static void viaColorMask(GLcontext *ctx,
 }
 
 
-/* =============================================================
- */
 
-
-/* Using drawXoff like this is incorrect outside of locked regions.
- * This hardware just isn't capable of private back buffers without
+/* This hardware just isn't capable of private back buffers without
  * glitches and/or a hefty locking scheme.
  */
-void viaCalcViewport(GLcontext *ctx)
+void viaCalcViewport(struct gl_context *ctx)
 {
     struct via_context *vmesa = VIA_CONTEXT(ctx);
-    __DRIdrawablePrivate *dPriv = vmesa->driDrawable;
+    __DRIdrawable *dPriv = vmesa->driDrawable;
     struct via_renderbuffer *const vrb = 
       (struct via_renderbuffer *) dPriv->driverPrivate;
     const GLfloat *v = ctx->Viewport._WindowMap.m;
     GLfloat *m = vmesa->ViewportMatrix.m;
     
-    /* See also via_translate_vertex.
-     */
     m[MAT_SX] =   v[MAT_SX];
-    m[MAT_TX] =   v[MAT_TX] + SUBPIXEL_X + vrb->drawXoff;
+    m[MAT_TX] =   v[MAT_TX] + vrb->drawX + SUBPIXEL_X;
     m[MAT_SY] = - v[MAT_SY];
-    m[MAT_TY] = - v[MAT_TY] + dPriv->h + SUBPIXEL_Y;
+    m[MAT_TY] = - v[MAT_TY] + vrb->drawY + SUBPIXEL_Y + vrb->drawH;
     m[MAT_SZ] =   v[MAT_SZ] * (1.0 / vmesa->depth_max);
     m[MAT_TZ] =   v[MAT_TZ] * (1.0 / vmesa->depth_max);
 }
 
-static void viaViewport(GLcontext *ctx,
+static void viaViewport(struct gl_context *ctx,
                         GLint x, GLint y,
                         GLsizei width, GLsizei height)
 {
     viaCalcViewport(ctx);
 }
 
-static void viaDepthRange(GLcontext *ctx,
+static void viaDepthRange(struct gl_context *ctx,
                           GLclampd nearval, GLclampd farval)
 {
     viaCalcViewport(ctx);
 }
 
-void viaInitState(GLcontext *ctx)
+void viaInitState(struct gl_context *ctx)
 {
     struct via_context *vmesa = VIA_CONTEXT(ctx);
 
@@ -781,10 +775,10 @@ void viaInitState(GLcontext *ctx)
 /**
  * Convert S and T texture coordinate wrap modes to hardware bits.
  */
-static u_int32_t
+static uint32_t
 get_wrap_mode( GLenum sWrap, GLenum tWrap )
 {
-    u_int32_t v = 0;
+    uint32_t v = 0;
 
 
     switch( sWrap ) {
@@ -816,10 +810,10 @@ get_wrap_mode( GLenum sWrap, GLenum tWrap )
     return v;
 }
 
-static u_int32_t
+static uint32_t
 get_minmag_filter( GLenum min, GLenum mag )
 {
-    u_int32_t v = 0;
+    uint32_t v = 0;
 
     switch (min) {
     case GL_NEAREST:
@@ -871,7 +865,7 @@ get_minmag_filter( GLenum min, GLenum mag )
 }
 
 
-static GLboolean viaChooseTextureState(GLcontext *ctx) 
+static GLboolean viaChooseTextureState(struct gl_context *ctx) 
 {
     struct via_context *vmesa = VIA_CONTEXT(ctx);
     struct gl_texture_unit *texUnit0 = &ctx->Texture.Unit[0];
@@ -894,10 +888,10 @@ static GLboolean viaChooseTextureState(GLcontext *ctx)
             if (texObj->Image[0][texObj->BaseLevel]->Border > 0) {
               vmesa->regHTXnTB[0] |= (HC_HTXnTB_TBC_S | HC_HTXnTB_TBC_T);
               vmesa->regHTXnTBC[0] = 
-                 PACK_COLOR_888(FLOAT_TO_UBYTE(texObj->BorderColor[0]),
-                                FLOAT_TO_UBYTE(texObj->BorderColor[1]),
-                                FLOAT_TO_UBYTE(texObj->BorderColor[2]));
-              vmesa->regHTXnTRAH[0] = FLOAT_TO_UBYTE(texObj->BorderColor[3]);
+                 PACK_COLOR_888(FLOAT_TO_UBYTE(texObj->BorderColor.f[0]),
+                                FLOAT_TO_UBYTE(texObj->BorderColor.f[1]),
+                                FLOAT_TO_UBYTE(texObj->BorderColor.f[2]));
+              vmesa->regHTXnTRAH[0] = FLOAT_TO_UBYTE(texObj->BorderColor.f[3]);
             }
 
            if (texUnit0->LodBias != 0.0f) {
@@ -927,10 +921,10 @@ static GLboolean viaChooseTextureState(GLcontext *ctx)
             if (texObj->Image[0][texObj->BaseLevel]->Border > 0) {
               vmesa->regHTXnTB[1] |= (HC_HTXnTB_TBC_S | HC_HTXnTB_TBC_T);
               vmesa->regHTXnTBC[1] = 
-                 PACK_COLOR_888(FLOAT_TO_UBYTE(texObj->BorderColor[0]),
-                                FLOAT_TO_UBYTE(texObj->BorderColor[1]),
-                                FLOAT_TO_UBYTE(texObj->BorderColor[2]));
-              vmesa->regHTXnTRAH[1] = FLOAT_TO_UBYTE(texObj->BorderColor[3]);
+                 PACK_COLOR_888(FLOAT_TO_UBYTE(texObj->BorderColor.f[0]),
+                                FLOAT_TO_UBYTE(texObj->BorderColor.f[1]),
+                                FLOAT_TO_UBYTE(texObj->BorderColor.f[2]));
+              vmesa->regHTXnTRAH[1] = FLOAT_TO_UBYTE(texObj->BorderColor.f[3]);
             }
 
 
@@ -956,7 +950,7 @@ static GLboolean viaChooseTextureState(GLcontext *ctx)
     return GL_TRUE;
 }
 
-static void viaChooseColorState(GLcontext *ctx) 
+static void viaChooseColorState(struct gl_context *ctx) 
 {
     struct via_context *vmesa = VIA_CONTEXT(ctx);
     GLenum s = ctx->Color.BlendSrcRGB;
@@ -1241,18 +1235,18 @@ static void viaChooseColorState(GLcontext *ctx)
     else
         vmesa->regHROP = HC_HROP_P;
 
-    vmesa->regHFBBMSKL = PACK_COLOR_888(ctx->Color.ColorMask[0],
-                                       ctx->Color.ColorMask[1],
-                                       ctx->Color.ColorMask[2]);
-    vmesa->regHROP |= ctx->Color.ColorMask[3];
+    vmesa->regHFBBMSKL = PACK_COLOR_888(ctx->Color.ColorMask[0][0],
+                                       ctx->Color.ColorMask[0][1],
+                                       ctx->Color.ColorMask[0][2]);
+    vmesa->regHROP |= ctx->Color.ColorMask[0][3];
 
-    if (ctx->Color.ColorMask[3])
+    if (ctx->Color.ColorMask[0][3])
         vmesa->regEnable |= HC_HenAW_MASK;
     else
         vmesa->regEnable &= ~HC_HenAW_MASK;
 }
 
-static void viaChooseFogState(GLcontext *ctx) 
+static void viaChooseFogState(struct gl_context *ctx) 
 {
     struct via_context *vmesa = VIA_CONTEXT(ctx);
 
@@ -1277,7 +1271,7 @@ static void viaChooseFogState(GLcontext *ctx)
     }
 }
 
-static void viaChooseDepthState(GLcontext *ctx) 
+static void viaChooseDepthState(struct gl_context *ctx) 
 {
     struct via_context *vmesa = VIA_CONTEXT(ctx);
     if (ctx->Depth.Test) {
@@ -1301,7 +1295,7 @@ static void viaChooseDepthState(GLcontext *ctx)
     }
 }
 
-static void viaChooseLineState(GLcontext *ctx) 
+static void viaChooseLineState(struct gl_context *ctx) 
 {
     struct via_context *vmesa = VIA_CONTEXT(ctx);
 
@@ -1315,7 +1309,7 @@ static void viaChooseLineState(GLcontext *ctx)
     }
 }
 
-static void viaChoosePolygonState(GLcontext *ctx) 
+static void viaChoosePolygonState(struct gl_context *ctx) 
 {
     struct via_context *vmesa = VIA_CONTEXT(ctx);
 
@@ -1341,11 +1335,11 @@ static void viaChoosePolygonState(GLcontext *ctx)
     }
 }
 
-static void viaChooseStencilState(GLcontext *ctx) 
+static void viaChooseStencilState(struct gl_context *ctx) 
 {
     struct via_context *vmesa = VIA_CONTEXT(ctx);
     
-    if (ctx->Stencil.Enabled) {
+    if (ctx->Stencil._Enabled) {
         GLuint temp;
 
         vmesa->regEnable |= HC_HenST_MASK;
@@ -1427,7 +1421,7 @@ static void viaChooseStencilState(GLcontext *ctx)
 
 
 
-static void viaChooseTriangle(GLcontext *ctx) 
+static void viaChooseTriangle(struct gl_context *ctx) 
 {       
     struct via_context *vmesa = VIA_CONTEXT(ctx);
 
@@ -1451,7 +1445,7 @@ static void viaChooseTriangle(GLcontext *ctx)
     }
 }
 
-void viaValidateState( GLcontext *ctx )
+void viaValidateState( struct gl_context *ctx )
 {
     struct via_context *vmesa = VIA_CONTEXT(ctx);
 
@@ -1498,7 +1492,7 @@ void viaValidateState( GLcontext *ctx )
     vmesa->newState = 0;
 }
 
-static void viaInvalidateState(GLcontext *ctx, GLuint newState)
+static void viaInvalidateState(struct gl_context *ctx, GLuint newState)
 {
     struct via_context *vmesa = VIA_CONTEXT(ctx);
 
@@ -1507,11 +1501,11 @@ static void viaInvalidateState(GLcontext *ctx, GLuint newState)
 
     _swrast_InvalidateState(ctx, newState);
     _swsetup_InvalidateState(ctx, newState);
-    _ac_InvalidateState(ctx, newState);
+    _vbo_InvalidateState(ctx, newState);
     _tnl_InvalidateState(ctx, newState);
 }
 
-void viaInitStateFuncs(GLcontext *ctx)
+void viaInitStateFuncs(struct gl_context *ctx)
 {
     /* Callbacks for internal Mesa events.
      */