Module Name:    xsrc
Committed By:   macallan
Date:           Mon Oct 30 22:09:54 UTC 2017

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

Log Message:
support PictOpAdd with A8 source and ARGB/ABGR destination
now labels in windowmaker look right again


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 \
    xsrc/external/mit/xf86-video-suncg14/dist/src/cg14.h \
    xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_accel.c
cvs rdiff -u -r1.9 -r1.10 \
    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.h
diff -u xsrc/external/mit/xf86-video-suncg14/dist/src/cg14.h:1.11 xsrc/external/mit/xf86-video-suncg14/dist/src/cg14.h:1.12
--- xsrc/external/mit/xf86-video-suncg14/dist/src/cg14.h:1.11	Tue Apr 29 08:40:58 2014
+++ xsrc/external/mit/xf86-video-suncg14/dist/src/cg14.h	Mon Oct 30 22:09:54 2017
@@ -144,6 +144,8 @@ void CG14Comp_Over32Mask32_noalpha(Cg14P
 		   uint32_t, uint32_t, uint32_t, int, int);
 void CG14Comp_Add8(Cg14Ptr, uint32_t, uint32_t, uint32_t, uint32_t,
                    int, int);
+void CG14Comp_Add8_32(Cg14Ptr, uint32_t, uint32_t, uint32_t, uint32_t,
+                   int, int);
 void CG14Comp_Add32(Cg14Ptr, uint32_t, uint32_t, uint32_t, uint32_t,
                    int, int);
 
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.11 xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_accel.c:1.12
--- xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_accel.c:1.11	Sat Jan 14 00:20:16 2017
+++ xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_accel.c	Mon Oct 30 22:09:54 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: cg14_accel.c,v 1.11 2017/01/14 00:20:16 macallan Exp $ */
+/* $NetBSD: cg14_accel.c,v 1.12 2017/10/30 22:09:54 macallan Exp $ */
 /*
  * Copyright (c) 2013 Michael Lorenz
  * All rights reserved.
@@ -995,9 +995,22 @@ CG14Composite(PixmapPtr pDst, int srcX, 
 				case PICT_a8:
 					src = p->srcoff +
 					    (srcY * p->srcpitch) + srcX;
-					dst = dstoff + (dstY * dstpitch) + dstX;
-					CG14Comp_Add8(p, src, p->srcpitch,
-					    dst, dstpitch, width, height);
+					if (p->dstformat == PICT_a8) {
+						dst = dstoff + 
+						      (dstY * dstpitch) + dstX;
+						CG14Comp_Add8(p,
+						    src, p->srcpitch,
+						    dst, dstpitch,
+						    width, height);
+					} else {
+						dst = dstoff + 
+						      (dstY * dstpitch) +
+						      (dstX << 2);
+						CG14Comp_Add8_32(p,
+						    src, p->srcpitch,
+						    dst, dstpitch,
+						    width, height);
+					}
 					break;
 				case PICT_a8r8g8b8:
 				case PICT_x8r8g8b8:

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.9 xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_render.c:1.10
--- xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_render.c:1.9	Fri Sep 16 22:07:25 2016
+++ xsrc/external/mit/xf86-video-suncg14/dist/src/cg14_render.c	Mon Oct 30 22:09:54 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: cg14_render.c,v 1.9 2016/09/16 22:07:25 macallan Exp $ */
+/* $NetBSD: cg14_render.c,v 1.10 2017/10/30 22:09:54 macallan Exp $ */
 /*
  * Copyright (c) 2013 Michael Lorenz
  * All rights reserved.
@@ -395,6 +395,77 @@ void CG14Comp_Add8(Cg14Ptr p,
 	}
 }
 
+void CG14Comp_Add8_32(Cg14Ptr p,
+                   uint32_t src, uint32_t srcpitch,
+                   uint32_t dst, uint32_t dstpitch,
+                   int width, int height)
+{
+	int line;
+	uint32_t srcx, dstx, srcoff, dstoff;
+	int pre, full, part, x;
+	uint8_t *d;
+	char buffer[256];
+	ENTER;
+
+	srcoff = src & 7;
+	src &= ~7;
+	dstoff = dst & 7;
+	dst &= ~7;
+	full = width >> 5;	/* chunks of 32 */
+	part = width & 31;	/* leftovers */
+
+#ifdef SX_DEBUG
+	xf86Msg(X_ERROR, "%d %d, %d x %d, %d %d\n", srcpitch, dstpitch,
+	    width, height, full, part);
+#endif
+	/* we do this up to 32 pixels at a time */
+	for (line = 0; line < height; line++) {
+		srcx = src;
+		dstx = dst;
+		for (x = 0; x < full; x++) {
+			/* load source bytes */
+			write_sx_io(p, srcx, SX_LDB(8, 31, srcoff));
+			/* load alpha from destination */
+			write_sx_io(p, dstx, SX_LDUC0(40, 31, dstoff));
+			write_sx_reg(p, SX_INSTRUCTIONS,
+			    SX_ADDV(8, 40, 72, 15));
+			write_sx_reg(p, SX_INSTRUCTIONS,
+			    SX_ADDV(24, 56, 88, 15));
+			/* write clamped values back into dest alpha */
+			write_sx_io(p, dstx, SX_STUC0C(72, 31, dstoff));
+			srcx += 32;
+			dstx += 128;
+		}
+
+		if (part > 0) {
+			/* do leftovers */
+			write_sx_io(p, srcx, SX_LDB(8, part - 1, srcoff));
+			write_sx_io(p, dstx, SX_LDUC0(40, part - 1, dstoff));
+			if (part > 16) {
+				write_sx_reg(p, SX_INSTRUCTIONS,
+				    SX_ADDV(8, 40, 72, 15));
+				write_sx_reg(p, SX_INSTRUCTIONS,
+				    SX_ADDV(24, 56, 88, part - 17));
+			} else {
+				write_sx_reg(p, SX_INSTRUCTIONS,
+				    SX_ADDV(8, 40, 72, part - 1));
+			}
+			write_sx_io(p, dstx, SX_STUC0C(72, part - 1, dstoff));
+		}
+#ifdef SX_DEBUG
+		d = (uint8_t *)(p->fb + src + srcoff);
+		for (x = 0; x < width; x++) {
+			buffer[x] = c[d[x]>>5];
+		}
+		buffer[x] = 0;
+		xf86Msg(X_ERROR, "%s\n", buffer);
+#endif
+		/* next line */
+		src += srcpitch;
+		dst += dstpitch;
+	}
+}
+
 void CG14Comp_Over32(Cg14Ptr p,
                    uint32_t src, uint32_t srcpitch,
                    uint32_t dst, uint32_t dstpitch,

Reply via email to