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,