xserver/hw/kdrive/mga g400_composite.c,1.2,1.3 mgadraw.c,1.13,1.14

Damien Ciabrini <xserver-commit-u7BhqnqprCWvj1b/[email protected]> Wed, 6 Jul 2005 08:34:27 -0700 (PDT)
Newsgroups gmane.comp.freedesktop.xserver.cvs
Message-ID <[email protected]>
Committed by: damienc

Update of /cvs/xserver/xserver/hw/kdrive/mga
In directory gabe:/tmp/cvs-serv24213/hw/kdrive/mga

Modified Files:
	g400_composite.c mgadraw.c 
Log Message:
Added hardware support for transformation matrix (zoom, rotation, etc...).
Fixed the composition function for RGB and A8 format. 
Avoid syncing hardware after HW fills or copies.


Index: g400_composite.c
===================================================================
RCS file: /cvs/xserver/xserver/hw/kdrive/mga/g400_composite.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- g400_composite.c	9 Jun 2005 21:59:26 -0000	1.2
+++ g400_composite.c	6 Jul 2005 15:34:22 -0000	1.3
@@ -31,8 +31,14 @@
 #include "g400_common.h"
 
 
+static PicturePtr currentSrcPicture;
+static PicturePtr currentMaskPicture;
 static PixmapPtr currentSrc;
 static PixmapPtr currentMask;
+static int src_w2;
+static int src_h2;
+static int mask_w2;
+static int mask_h2;
 
 struct blendinfo {
 	Bool dst_alpha;
@@ -85,16 +91,18 @@
     {PICT_a8, MGA_TW8A},
 };
 
-static int MGA_LOG2( int val )
+static int
+MGA_LOG2( int val )
 {
     int ret = 0;
-    
+    if (val==1) return 0;
     while (val >> ret)
 	ret++;
     
     return ((1 << (ret-1)) == val) ? (ret-1) : ret;
 }
 
+
 static Bool
 mgaCheckSourceTexture (int		tmu,
 		       PicturePtr 	pPict)
@@ -105,7 +113,7 @@
     CARD32 texctl = 0;
 
     if ((w > 2047) || (h > 2047))
-	MGA_FALLBACK(("Picture too large for composition (%dx%d)\n", w, h));
+	MGA_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h));
 
     for (i = 0; i < sizeof(texformats) / sizeof(texformats[0]); i++) {
 	if (texformats[i].fmt == pPict->format) {
@@ -114,10 +122,16 @@
 	}
     }
     if (texctl == 0) {
-	    MGA_FALLBACK(("Picture is in unsupported format 0x%x\n"
-			  pPict->format));
+	MGA_FALLBACK(("Unsupported picture format 0x%x\n", pPict->format));
     }
 
+    if (pPict->repeat && ((w & (w - 1)) != 0 || (h & (h - 1)) != 0))
+	MGA_FALLBACK(("NPOT repeat unsupported (%dx%d)\n", w, h));
+
+    if (pPict->filter != PictFilterNearest &&
+	pPict->filter != PictFilterBilinear)
+	MGA_FALLBACK(("Unsupported filter 0x%x\n", pPict->filter));
+    
     return TRUE;
 }
 
@@ -138,22 +152,28 @@
 
     int texctl = MGA_PITCHLIN | ((pitch & (2048 - 1)) << 9) | 
 	MGA_CLAMPUV | MGA_NOPERSPECTIVE;  
-    int texctl2=MGA_G400_TC2_MAGIC;
- 
+    int flags = 0;
+    int texctl2 = MGA_G400_TC2_MAGIC | flags;
+    
     for (i = 0; i < sizeof(texformats) / sizeof(texformats[0]); i++) {
 	if (texformats[i].fmt == pSrcPicture->format) {
 	    texctl |= texformats[i].card_fmt;
 	    break;
 	}
     }
+
     if (PICT_FORMAT_A(pSrcPicture->format) != 0) {
 	texctl |= MGA_TAKEY;
     } else {
 	texctl |= MGA_TAMASK | MGA_TAKEY;
     }
-
+	
+    if (pSrcPicture->repeat) {
+	texctl &= ~MGA_CLAMPUV;
+    }
+	
     if (tmu == 1)
-	texctl2 |= MGA_TC2_DUALTEX | MGA_TC2_SELECT_TMU1;
+	texctl2 |= MGA_TC2_DUALTEX | MGA_TC2_SELECT_TMU1 | flags;
   
     mgaWaitAvail (6);
     MGA_OUT32 (mmio, MGA_REG_TEXCTL2, texctl2);
@@ -162,17 +182,91 @@
     MGA_OUT32 (mmio, MGA_REG_TEXORG, ((int)pSrc->devPrivate.ptr - mem_base));
     MGA_OUT32 (mmio, MGA_REG_TEXWIDTH, (w-1)<<18 | ((8-w_log2)&63)<<9 | w_log2);
     MGA_OUT32 (mmio, MGA_REG_TEXHEIGHT, (h-1)<<18 | ((8-h_log2)&63)<<9 | h_log2);
-    /* Disable filtering since we aren't doing stretch blit */
-    MGA_OUT32 (mmio, MGA_REG_TEXFILTER, (0x10<<21) | MGA_MAG_NRST | MGA_MIN_NRST);
-  
+    /* Set blit filtering flags */
+    if (pSrcPicture->filter == PictFilterBilinear) {
+      MGA_OUT32 (mmio, MGA_REG_TEXFILTER,
+		 (0x10<<21) | MGA_MAG_BILIN | MGA_MIN_BILIN);
+    } else {
+      MGA_OUT32 (mmio, MGA_REG_TEXFILTER,
+		 (0x10<<21) | MGA_MAG_NRST | MGA_MIN_NRST);
+    }
+
     if (tmu == 1) {
 	mgaWaitAvail (1);
-	MGA_OUT32 (mmio, MGA_REG_TEXCTL2, MGA_G400_TC2_MAGIC | MGA_TC2_DUALTEX);
+	MGA_OUT32 (mmio, MGA_REG_TEXCTL2, MGA_G400_TC2_MAGIC | MGA_TC2_DUALTEX | flags);
     }
     
     return TRUE;
 }
 
+
+/*
+ *  The formals params are the elements of the following matrix:
+ *
+ *     Dest            Transform             Src
+ *    coords                                coords
+ *   / Xdst \   / X_incx X_incy X_init \   / Xsrc \
+ *   | Ydst | = | Y_incx Y_incy Y_init | x | Ysrc |
+ *   \  1   /   \ H_incx H_incy H_init /   \  1   /
+ *
+ * matrix elements are 32bits fixed points (16.16)
+ * mga_fx_* is the size of the fixed point for the TMU
+ */
+static void
+setTMIncrementsRegs(int X_incx,
+		    int X_incy,
+		    int X_init,
+		    int Y_incx,
+		    int Y_incy,
+		    int Y_init,
+		    int H_incx,
+		    int H_incy,
+		    int H_init,
+		    int mga_fx_width_size,
+		    int mga_fx_height_size) {
+    int decalw = mga_fx_width_size - 16;
+    int decalh = mga_fx_height_size - 16;
+
+    /* Convert 16 bits fixpoint -> MGA variable size fixpoint */
+    if (decalw >= 0) {
+	X_incx = X_incx << decalw;
+	X_incy = X_incy << decalw;
+	X_init = X_init << decalw;
+    } else {
+	decalw =- decalw;
+	X_incx = X_incx >> decalw;
+	X_incy = X_incy >> decalw;
+	X_init = X_init >> decalw;
+    }
+  
+    /* Convert 16 bits fixpoint -> MGA variable size fixpoint */
+    if (decalh >= 0) {
+	Y_incx = Y_incx << decalh;
+	Y_incy = Y_incy << decalh;
+	Y_init = Y_init << decalh;
+    } else {
+	decalh =- decalh;
+	Y_incx = Y_incx >> decalh;
+	Y_incy = Y_incy >> decalh;
+	Y_init = Y_init >> decalh;
+    }
+
+    /* Set TM registers */
+    mgaWaitAvail (9);
+    MGA_OUT32 (mmio, MGA_REG_TMR0, X_incx); 
+    MGA_OUT32 (mmio, MGA_REG_TMR1, Y_incx); 
+    MGA_OUT32 (mmio, MGA_REG_TMR2, X_incy);
+    MGA_OUT32 (mmio, MGA_REG_TMR3, Y_incy);
+    MGA_OUT32 (mmio, MGA_REG_TMR4, H_incx); 
+    MGA_OUT32 (mmio, MGA_REG_TMR5, H_incy); 
+    MGA_OUT32 (mmio, MGA_REG_TMR6, X_init);
+    MGA_OUT32 (mmio, MGA_REG_TMR7, Y_init);
+    MGA_OUT32 (mmio, MGA_REG_TMR8, H_init); 
+}
+
+
+
+
 Bool
 mgaCheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
 		  PicturePtr pDstPicture)
@@ -181,15 +275,12 @@
 	MGA_FALLBACK(("unsupported op %x", op));
     if (!mgaCheckSourceTexture (0, pSrcPicture))
 	return FALSE;
-    if (pSrcPicture->transform != NULL)
-	    MGA_FALLBACK(("Transformed src unsupported"));
+
     if (pMaskPicture != NULL) {
 	if (PICT_FORMAT_A(pMaskPicture->format) == 0)
 	    MGA_FALLBACK(("Mask without alpha unsupported"));
 	if (!mgaCheckSourceTexture (1, pMaskPicture))
 	    return FALSE;
-	if (pMaskPicture->transform != NULL)
-	    MGA_FALLBACK(("Transformed mask unsupported"));
     }
 
     if (pMaskPicture->componentAlpha)
@@ -203,20 +294,26 @@
     return TRUE;
 }
 
-#define C_ARG1_CUR		0x0	
+#define C_ARG1_CUR		0x0
+#define C_ARG1_ALPHA		MGA_TDS_COLOR_ARG1_REPLICATEALPHA	
 #define C_ARG2_DIFFUSE		MGA_TDS_COLOR_ARG2_DIFFUSE
+#define C_ARG2_FCOL		MGA_TDS_COLOR_ARG2_FCOL
 #define C_ARG2_PREV		MGA_TDS_COLOR_ARG2_PREVSTAGE
+#define C_ARG1_INV		MGA_TDS_COLOR_ARG1_INV
+#define C_ARG2_INV		MGA_TDS_COLOR_ARG2_INV
 #define COLOR_MUL		MGA_TDS_COLOR_SEL_MUL
 #define COLOR_ARG1		MGA_TDS_COLOR_SEL_ARG1
 #define COLOR_ARG2		MGA_TDS_COLOR_SEL_ARG2
 #define A_ARG1_CUR		0x0
 #define A_ARG2_IGN		A_ARG2_DIFFUSE
+#define A_ARG2_FCOL		MGA_TDS_ALPHA_ARG2_FCOL
 #define A_ARG2_DIFFUSE		MGA_TDS_ALPHA_ARG2_DIFFUSE
 #define A_ARG2_PREV		MGA_TDS_ALPHA_ARG2_PREVSTAGE
 #define ALPHA_MUL		MGA_TDS_ALPHA_SEL_MUL
 #define ALPHA_ARG1		MGA_TDS_ALPHA_SEL_ARG1
 #define ALPHA_ARG2		MGA_TDS_ALPHA_SEL_ARG2
 
+
 Bool
 mgaPrepareComposite (int		op,
 		     PicturePtr		pSrcPicture,
@@ -229,71 +326,84 @@
     KdScreenPriv (pSrc->drawable.pScreen);  
     int mem_base=(int)pScreenPriv->screen->memory_base;
     int cmd, blendcntl;
-
-    mgaWaitIdle();
+    int ds0, ds1;
+    
     /* Init MGA (clipping) */
-    mgaSetup (pSrc->drawable.pScreen, pDst->drawable.bitsPerPixel, 5);
-    MGA_OUT32 (mmio, MGA_REG_TMR1, 0); 
-    MGA_OUT32 (mmio, MGA_REG_TMR2, 0);
-    MGA_OUT32 (mmio, MGA_REG_TMR3, 0);
-    MGA_OUT32 (mmio, MGA_REG_TMR4, 0); 
-    MGA_OUT32 (mmio, MGA_REG_TMR5, 0); 
-    MGA_OUT32 (mmio, MGA_REG_TMR6, 0);
-    MGA_OUT32 (mmio, MGA_REG_TMR7, 0);
-    MGA_OUT32 (mmio, MGA_REG_TMR8, 0x10000); 
-
-    /* Initialize colors to 0, used in the src = A8 case */
-    mgaWaitAvail(9);
-    MGA_OUT32 (mmio, MGA_REG_DR4, 0); 
-    MGA_OUT32 (mmio, MGA_REG_DR6, 0);
-    MGA_OUT32 (mmio, MGA_REG_DR7, 0);
-    MGA_OUT32 (mmio, MGA_REG_DR8, 0); 
-    MGA_OUT32 (mmio, MGA_REG_DR10, 0); 
-    MGA_OUT32 (mmio, MGA_REG_DR11, 0);
-    MGA_OUT32 (mmio, MGA_REG_DR12, 0);
-    MGA_OUT32 (mmio, MGA_REG_DR14, 0); 
-    MGA_OUT32 (mmio, MGA_REG_DR15, 0);
+    mgaSetup (pSrc->drawable.pScreen, pDst->drawable.bitsPerPixel, 1);
 
+    /* Initialize fg color to 0, used in the src = A8 case */
+    MGA_OUT32 (mmio, MGA_REG_FCOL, 0xff000000);
+        
     /* Destination flags */
     mgaWaitAvail (2);
     MGA_OUT32 (mmio, MGA_REG_DSTORG, ((int)pDst->devPrivate.ptr - mem_base));
     MGA_OUT32 (mmio, MGA_REG_PITCH,
 	       pDst->devKind / (pDst->drawable.bitsPerPixel >> 3));
-    
+
+	
     /* Source(s) flags */
     if (!PrepareSourceTexture (0, pSrcPicture, pSrc)) return FALSE;
-    if (pMask != NULL)
-	if (!PrepareSourceTexture (1, pMaskPicture, pMask)) return FALSE;
+    if (pMask != NULL) {
+    	if (!PrepareSourceTexture (1, pMaskPicture, pMask)) return FALSE;
+    }
+
+    /* Prepare multi-texture registers */
+    ds0=ds1=0;
 
-    /* MultiTexture modulation */
-    mgaWaitAvail (2);
     if (pSrcPicture->format == PICT_a8) {
 	/* C = 0	A = As */
-	MGA_OUT32 (mmio, MGA_REG_TDUALSTAGE0,
-		   C_ARG2_DIFFUSE | COLOR_ARG2 |
-		   A_ARG1_CUR | ALPHA_ARG1);
+	/* MGA HW: A8 format makes RGB white. We use FCOL for the black
+	 * If FCOL was not 0, it would have been be premultiplied (RENDER)
+	 * color component would have been:
+	 *   C_ARG1_ALPHA | C_ARG2_FCOL | COLOR_MUL
+	 */
+	ds0=C_ARG2_FCOL | COLOR_ARG2 |
+	    A_ARG1_CUR | ALPHA_ARG1;
+	/* MGA HW: TMU1 must be enabled when DUALSTAGE0 contains something */
+	if (pMask == NULL) {
+	    if (!PrepareSourceTexture (1, pSrcPicture, pSrc)) return FALSE;
+	    ds1=C_ARG2_PREV | COLOR_ARG2 |
+		A_ARG2_PREV | ALPHA_ARG2;
+	}
     } else {
 	/* C = Cs	A = As */
-	MGA_OUT32 (mmio, MGA_REG_TDUALSTAGE0,
-		   C_ARG1_CUR | COLOR_ARG1 |
-		   A_ARG1_CUR | ALPHA_ARG1);
+	ds0=C_ARG1_CUR | COLOR_ARG1 |
+	    A_ARG1_CUR | ALPHA_ARG1;
     }
+    
     if (pMask != NULL) {
-	if (PICT_FORMAT_A (pSrcPicture->format) == 0) {
-	    MGA_OUT32 (mmio, MGA_REG_TDUALSTAGE1, 
-		       C_ARG1_CUR | C_ARG2_PREV | COLOR_MUL |
-		       A_ARG1_CUR | A_ARG2_IGN | ALPHA_ARG1 |
-		       MGA_TDS_COLOR_ARG1_REPLICATEALPHA);
+	/* As or Am might be NULL. in this case we don't multiply because,
+	 * the alpha component holds garbage.
+	 */
+	int color,alpha;
+	if (PICT_FORMAT_A (pMaskPicture->format) == 0) {
+	    /* C = Cs */
+	    color = C_ARG2_PREV | COLOR_ARG2;
 	} else {
-	    MGA_OUT32 (mmio, MGA_REG_TDUALSTAGE1, 
-		       C_ARG1_CUR | C_ARG2_PREV | COLOR_MUL |
-		       A_ARG1_CUR | A_ARG2_PREV | ALPHA_MUL |
-		       MGA_TDS_COLOR_ARG1_REPLICATEALPHA);
+	    /* C = Am * Cs */
+	    color = C_ARG1_ALPHA | C_ARG2_PREV | COLOR_MUL;
 	}
-    } else {
-	MGA_OUT32 (mmio, MGA_REG_TDUALSTAGE1, 0);    
-    }
-  
+
+	if (PICT_FORMAT_A (pMaskPicture->format) == 0) {
+	    /* A = As */
+	    alpha = A_ARG2_PREV | ALPHA_ARG2;
+	} else if (PICT_FORMAT_A (pSrcPicture->format) == 0) {
+	    /* A = Am */
+	    alpha = A_ARG1_CUR | ALPHA_ARG1;
+	} else {
+	    /* A = Am * As */
+	    alpha = A_ARG1_CUR | A_ARG2_PREV | ALPHA_MUL;
+	}
+	
+	ds1 = color | alpha;
+    }    
+    
+    /* MultiTexture modulation */
+    mgaWaitAvail (2);
+    MGA_OUT32 (mmio, MGA_REG_TDUALSTAGE0, ds0);
+    MGA_OUT32 (mmio, MGA_REG_TDUALSTAGE1, ds1);
+
+    
     cmd = MGA_OPCOD_TEXTURE_TRAP | MGA_ATYPE_RSTR | 0x000c0000 |
 	MGA_DWGCTL_SHIFTZERO | MGA_DWGCTL_SGNZERO | MGA_DWGCTL_ARZERO |
 	MGA_ATYPE_I;
@@ -309,13 +419,20 @@
     mgaWaitAvail (2);
     MGA_OUT32 (mmio, MGA_REG_DWGCTL, cmd);
     MGA_OUT32 (mmio, MGA_REG_ALPHACTRL, MGA_ALPHACHANNEL | blendcntl);
-    
-    currentSrc=pSrc;
-    currentMask=pMask;
+
+    currentSrcPicture = pSrcPicture;
+    currentMaskPicture = pMaskPicture;
+    currentSrc = pSrc;
+    currentMask = pMask;
+    src_w2 = MGA_LOG2 (currentSrc->drawable.width);
+    src_h2 = MGA_LOG2 (currentSrc->drawable.height);
+    mask_w2 = MGA_LOG2 (currentMask->drawable.width);
+    mask_h2 = MGA_LOG2 (currentMask->drawable.height);
 
     return TRUE;
 }
 
+
 void
 mgaComposite (int	srcX,
 	      int	srcY,
@@ -326,9 +443,6 @@
 	      int	width,
 	      int	height)
 {  
-    int src_w2 = MGA_LOG2 (currentSrc->drawable.width);
-    int src_h2 = MGA_LOG2 (currentSrc->drawable.height);
-
     /* Source positions can be outside source textures' boundaries.
      * We clamp the values here to avoid rendering glitches.
      */
@@ -336,31 +450,55 @@
     srcY=srcY % currentSrc->drawable.height;
     maskX=maskX % currentMask->drawable.width;
     maskY=maskY % currentMask->drawable.height;
-  
-    mgaWaitAvail (4);
-    /* Start position in the texture */
-    MGA_OUT32 (mmio, MGA_REG_TMR6, srcX<<(20-src_w2));
-    MGA_OUT32 (mmio, MGA_REG_TMR7, srcY<<(20-src_h2));
-    /* Increments (1 since we aren't doing stretch blit) */
-    MGA_OUT32 (mmio, MGA_REG_TMR0, 1<<(20-src_w2));
-    MGA_OUT32 (mmio, MGA_REG_TMR3, 1<<(20-src_h2));
-
+    
+    if (currentSrcPicture->transform) {
+	setTMIncrementsRegs (currentSrcPicture->transform->matrix[0][0],
+			     currentSrcPicture->transform->matrix[0][1],
+			     currentSrcPicture->transform->matrix[0][2] +
+			     (srcX << 16),
+			     currentSrcPicture->transform->matrix[1][0],
+			     currentSrcPicture->transform->matrix[1][1],
+			     currentSrcPicture->transform->matrix[1][2] +
+			     (srcY << 16),
+			     currentSrcPicture->transform->matrix[2][0],
+			     currentSrcPicture->transform->matrix[2][1],
+			     currentSrcPicture->transform->matrix[2][2],
+			     20-src_w2, 20-src_h2);
+    } else {
+	setTMIncrementsRegs (1 << 16, 0, srcX << 16,
+			     0, 1 << 16, srcY << 16,
+			     0, 0, 0x10000,
+			     20-src_w2, 20-src_h2);
+    }
+    
     if (currentMask != NULL) {
-	int mask_w2 = MGA_LOG2 (currentMask->drawable.width);
-	int mask_h2 = MGA_LOG2 (currentMask->drawable.height);
-
-	mgaWaitAvail (6);
+	mgaWaitAvail (1);
 	MGA_OUT32  (mmio, MGA_REG_TEXCTL2,
 		    MGA_G400_TC2_MAGIC | MGA_TC2_DUALTEX | MGA_TC2_SELECT_TMU1);
-
-	MGA_OUT32 (mmio, MGA_REG_TMR6, maskX<<(20-mask_w2));
-	MGA_OUT32 (mmio, MGA_REG_TMR7, maskY<<(20-mask_h2));
-	MGA_OUT32 (mmio, MGA_REG_TMR0, 1<<(20-mask_w2));
-	MGA_OUT32 (mmio, MGA_REG_TMR3, 1<<(20-mask_h2));
-
+	if (currentMaskPicture->transform) {
+	    setTMIncrementsRegs (currentMaskPicture->transform->matrix[0][0],
+				 currentMaskPicture->transform->matrix[0][1],
+				 currentMaskPicture->transform->matrix[0][2] +
+				 (maskX << 16),
+				 currentMaskPicture->transform->matrix[1][0],
+				 currentMaskPicture->transform->matrix[1][1],
+				 currentMaskPicture->transform->matrix[1][2] +
+				 (maskY << 16),
+				 currentMaskPicture->transform->matrix[2][0],
+				 currentMaskPicture->transform->matrix[2][1],
+				 currentMaskPicture->transform->matrix[2][2],
+				 20-mask_w2, 20-mask_h2);
+	} else {
+	    setTMIncrementsRegs (1 << 16, 0, maskX << 16,
+				 0, 1 << 16, maskY << 16,
+				 0, 0, 0x10000,
+				 20-mask_w2, 20-mask_h2);
+	}
+	
+	mgaWaitAvail (1);
 	MGA_OUT32 (mmio, MGA_REG_TEXCTL2, MGA_G400_TC2_MAGIC | MGA_TC2_DUALTEX);
     }  
-  
+
     /* Destination Bounding Box
      * (Boundary Right | Boundary Left, Y dest | Height)
      */
@@ -374,5 +512,4 @@
 void
 mgaDoneComposite (void)
 {
-
 }

Index: mgadraw.c
===================================================================
RCS file: /cvs/xserver/xserver/hw/kdrive/mga/mgadraw.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- mgadraw.c	9 Jun 2005 23:22:54 -0000	1.13
+++ mgadraw.c	6 Jul 2005 15:34:22 -0000	1.14
@@ -65,14 +65,18 @@
     fifo_size -= n;
 }
 
+#define MGA_OUT8(mmio, a, v) (*(VOL8 *) ((mmio) + (a)) = (v))
+#define MGA_REG_CRTC_INDEX	(0x1fd4)
+
 void
 mgaWaitIdle (void)
 {
+    
+    mgaWaitAvail (2);
+    MGA_OUT32(mmio, MGA_REG_CACHEFLUSH, 0);
+    /* MGA_OUT8 (mmio, MGA_REG_CRTC_INDEX, 0); */
     while (MGA_IN32 (mmio, MGA_REG_STATUS) & 0x10000)
 	;
-
-    mgaWaitAvail (1);
-    MGA_OUT32(mmio, MGA_REG_CACHEFLUSH, 0);
 }
 
 static void
@@ -168,7 +172,6 @@
 static void
 mgaDoneSolid (void)
 {
-  mgaWaitIdle();
 }
 
 #define BLIT_LEFT	1
@@ -179,7 +182,6 @@
 		int dx, int dy, int alu, Pixel pm)
 {
   KdScreenPriv(pSrcPixmap->drawable.pScreen);
-
     int cmd;
 
     cmd = MGA_OPCOD_BITBLT | MGA_DWGCTL_BFCOL | MGA_DWGCTL_SHIFTZERO | mgaRop[alu];
@@ -214,7 +216,6 @@
 mgaCopy (int srcX, int srcY, int dstX, int dstY, int w, int h)
 {
     int start, end;
-
     if (dir & BLIT_UP)
     {
 	srcY += h - 1;
@@ -239,13 +240,12 @@
 static void
 mgaDoneCopy (void)
 {
-  mgaWaitIdle();
 }
 
 #if 0
 static Bool
 mgaUploadToScreen(PixmapPtr pDst, char *src, int src_pitch) {
-  /* fprintf(stderr,"Upload to Screen %p [%d]\n",src,src_pitch); */
+  /*fprintf(stderr,"Upload to Screen %p [%d]\n",src,src_pitch);*/
   return TRUE;
 }
 #endif
@@ -272,14 +272,15 @@
      */
     mgas->kaa.pitchAlign	= 128;
     mgas->kaa.flags		= KAA_OFFSCREEN_PIXMAPS;
-
+    
     if (card->attr.deviceID == MGA_G4XX_DEVICE_ID) {
 	mgas->kaa.CheckComposite = mgaCheckComposite;
 	mgas->kaa.PrepareComposite = mgaPrepareComposite;
 	mgas->kaa.Composite	= mgaComposite;
 	mgas->kaa.DoneComposite	= mgaDoneComposite;
     }
-    /*mgaKaa.UploadToScreen=mgaUploadToScreen;*/
+    
+    /*mgas->kaa.UploadToScreen=mgaUploadToScreen;*/
         
     if (!kaaDrawInit (pScreen, &mgas->kaa))
 	return FALSE;