Module Name:    xsrc
Committed By:   macallan
Date:           Tue Jul 30 21:49:38 UTC 2013

Modified Files:
        xsrc/external/mit/xf86-video-suncg14/dist/src: cg14_accel.c
            cg14_render.c

Log Message:
now we get PictOpOver with no source alpha and a 32bit mask right
( mostly gtk2 icons and button images )
TODO: RGB vs. BGR


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
    xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_accel.c \
    xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_render.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_accel.c
diff -u xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_accel.c:1.6 xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_accel.c:1.7
--- xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_accel.c:1.6	Thu Jul 25 17:37:30 2013
+++ xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_accel.c	Tue Jul 30 21:49:38 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: cg14_accel.c,v 1.6 2013/07/25 17:37:30 macallan Exp $ */
+/* $NetBSD: cg14_accel.c,v 1.7 2013/07/30 21:49:38 macallan Exp $ */
 /*
  * Copyright (c) 2013 Michael Lorenz
  * All rights reserved.
@@ -613,11 +613,11 @@ CG14PrepareComposite(int op, PicturePtr 
 		}
 	}
 	if (pMaskPicture != NULL) {
-		p->mskoff = exaGetPixmapOffset(pMask);		
+		p->mskoff = exaGetPixmapOffset(pMask);
 		p->mskpitch = exaGetPixmapPitch(pMask);
 		p->mskformat = pMaskPicture->format;
 	} else {
-		p->mskoff = 0;		
+		p->mskoff = 0;
 		p->mskpitch = 0;
 		p->mskformat = 0;
 	}
@@ -807,6 +807,8 @@ CG14Composite(PixmapPtr pDst, int srcX, 
 		case PictOpSrc:
 			DPRINTF(X_ERROR, "Src %08x %08x\n",
 			    p->srcformat, p->dstformat);
+			if (p->mskformat != 0)
+				xf86Msg(X_ERROR, "Src mask %08x\n", p->mskformat);
 			CG14Copy(pDst, srcX, srcY, dstX, dstY, width, height);
 			break;
 		default:
Index: xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_render.c
diff -u xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_render.c:1.6 xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_render.c:1.7
--- xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_render.c:1.6	Tue Jul 30 19:28:46 2013
+++ xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_render.c	Tue Jul 30 21:49:38 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: cg14_render.c,v 1.6 2013/07/30 19:28:46 macallan Exp $ */
+/* $NetBSD: cg14_render.c,v 1.7 2013/07/30 21:49:38 macallan Exp $ */
 /*
  * Copyright (c) 2013 Michael Lorenz
  * All rights reserved.
@@ -407,7 +407,7 @@ void CG14Comp_Over32(Cg14Ptr p,
 			    SX_XORV(12, 8, R_SCAM, 0));
 			/* dst * (1 - alpha) + R[13:15] */
 			write_sx_reg(p, SX_INSTRUCTIONS,
-			    SX_SAXP16X16SR8(21, 13, 25, 2));
+			    SX_SAXP16X16SR8(20, 12, 24, 3));
 			write_sx_io(p, dstx,
 			    SX_STUQ0C(24, 0, dstx & 7));
 			dstx += 4;
@@ -454,7 +454,7 @@ void CG14Comp_Over32Mask(Cg14Ptr p,
 			    SX_XORV(16, 8, R_SCAM, 0));
 			/* dst * (1 - alpha) + R[13:15] */
 			write_sx_reg(p, SX_INSTRUCTIONS,
-			    SX_SAXP16X16SR8(21, 17, 25, 2));
+			    SX_SAXP16X16SR8(20, 16, 24, 3));
 			write_sx_io(p, dstx,
 			    SX_STUQ0C(24, 0, dstx & 7));
 			srcx += 4;
@@ -487,6 +487,9 @@ void CG14Comp_Over32Mask_noalpha(Cg14Ptr
 		for (x = 0; x < width; x++) {
 			/* fetch source pixel */
 			write_sx_io(p, srcx, SX_LDUQ0(12, 0, srcx & 7));
+			/* set src alpha to 0xff */
+			write_sx_reg(p, SX_INSTRUCTIONS,
+			    SX_ORS(8, 0, 12, 0));
 			/* fetch mask */
 			write_sx_io(p, mskx & (~7), SX_LDB(9, 0, mskx & 7));
 			/* fetch dst pixel */
@@ -496,13 +499,13 @@ void CG14Comp_Over32Mask_noalpha(Cg14Ptr
 			    SX_ORS(9, 0, R_SCAM, 0));
 			/* src * alpha + R0 */
 			write_sx_reg(p, SX_INSTRUCTIONS,
-			    SX_SAXP16X16SR8(13, 0, 17, 2));
+			    SX_SAXP16X16SR8(12, 0, 16, 3));
 			/* write inverted alpha into SCAM */
 			write_sx_reg(p, SX_INSTRUCTIONS,
 			    SX_XORV(9, 8, R_SCAM, 0));
 			/* dst * (1 - alpha) + R[13:15] */
 			write_sx_reg(p, SX_INSTRUCTIONS,
-			    SX_SAXP16X16SR8(21, 17, 25, 2));
+			    SX_SAXP16X16SR8(20, 16, 24, 3));
 			write_sx_io(p, dstx,
 			    SX_STUQ0C(24, 0, dstx & 7));
 			srcx += 4;
@@ -536,21 +539,24 @@ void CG14Comp_Over32Mask32_noalpha(Cg14P
 			/* fetch source pixel */
 			write_sx_io(p, srcx, SX_LDUQ0(12, 0, srcx & 7));
 			/* fetch mask */
-			write_sx_io(p, mskx & (~7), SX_LDUQ0(16, 0, mskx & 7));
+			write_sx_io(p, mskx, SX_LDUQ0(16, 0, mskx & 7));
 			/* fetch dst pixel */
 			write_sx_io(p, dstx, SX_LDUQ0(20, 0, dstx & 7));
 			/* set src alpha to 0xff */
 			write_sx_reg(p, SX_INSTRUCTIONS,
 			    SX_ORS(8, 0, 12, 0));
-			/* apply mask */
+			/* mask alpha to SCAM */
+			write_sx_reg(p, SX_INSTRUCTIONS,
+			    SX_ORS(16, 0, R_SCAM, 0));
+			/* src * alpha */
 			write_sx_reg(p, SX_INSTRUCTIONS,
-			    SX_MUL16X16SR8R(12, 16, 24, 3));
+			    SX_SAXP16X16SR8(12, 0, 24, 3));
 			/* write inverted alpha into SCAM */
 			write_sx_reg(p, SX_INSTRUCTIONS,
-			    SX_XORV(12, 8, R_SCAM, 0));
-			/* dst * (1 - alpha) + R[25:31] */
+			    SX_XORS(16, 8, R_SCAM, 0));
+			/* dst * (1 - alpha) + R[24:31] */
 			write_sx_reg(p, SX_INSTRUCTIONS,
-			    SX_SAXP16X16SR8(21, 25, 29, 2));
+			    SX_SAXP16X16SR8(20, 24, 28, 3));
 			write_sx_io(p, dstx,
 			    SX_STUQ0C(28, 0, dstx & 7));
 			srcx += 4;

Reply via email to