xserver: Branch 'master' - 17 commits
Keith Packard
keithp at kemper.freedesktop.org
Wed Apr 24 14:15:12 PDT 2013
hw/kdrive/fbdev/fbdev.c | 157 ++++++++++++++++++++++++++++++++-------
hw/kdrive/fbdev/fbdev.h | 2
hw/kdrive/src/kdrive.c | 3
miext/shadow/Makefile.am | 4 +
miext/shadow/c2p_core.h | 184 ++++++++++++++++++++++++++++++++++++++++++++++
miext/shadow/shadow.h | 12 +++
miext/shadow/shafb4.c | 139 ++++++++++++++++++++++++++++++++++
miext/shadow/shafb8.c | 143 +++++++++++++++++++++++++++++++++++
miext/shadow/shiplan2p4.c | 136 ++++++++++++++++++++++++++++++++++
miext/shadow/shiplan2p8.c | 137 ++++++++++++++++++++++++++++++++++
miext/shadow/shpacked.c | 1
test/input.c | 2
12 files changed, 888 insertions(+), 32 deletions(-)
New commits:
commit 7ab98bafc9a3426fd40f8ae693430491333ba4fc
Merge: 53da26a 5ab2603
Author: Keith Packard <keithp at keithp.com>
Date: Wed Apr 24 14:14:45 2013 -0700
Merge remote-tracking branch 'geertu/master'
commit 5ab260317ad3b2aafff31a97df21620db52eacd1
Author: Geert Uytterhoeven <geert at linux-m68k.org>
Date: Sun Mar 10 21:04:19 2013 +0100
Xfbdev: Wire up Amiga afb4 and afb8 support
Add support for Amiga-style bitplanes, with 4 or 8 bits per pixel.
Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
Acked-by: Keith Packard <keithp at keithp.com>
diff --git a/hw/kdrive/fbdev/fbdev.c b/hw/kdrive/fbdev/fbdev.c
index 40747fe..95f64cb 100644
--- a/hw/kdrive/fbdev/fbdev.c
+++ b/hw/kdrive/fbdev/fbdev.c
@@ -319,6 +319,21 @@ fbdevWindowLinear(ScreenPtr pScreen,
return (CARD8 *) priv->fb + row * priv->fix.line_length + offset;
}
+static void *
+fbdevWindowAfb(ScreenPtr pScreen,
+ CARD32 row,
+ CARD32 offset, int mode, CARD32 *size, void *closure)
+{
+ KdScreenPriv(pScreen);
+ FbdevPriv *priv = pScreenPriv->card->driver;
+
+ if (!pScreenPriv->enabled)
+ return 0;
+ /* offset to next plane */
+ *size = priv->var.yres_virtual * priv->fix.line_length;
+ return (CARD8 *) priv->fb + row * priv->fix.line_length + offset;
+}
+
Bool
fbdevMapFramebuffer(KdScreenInfo * screen)
{
@@ -435,7 +450,20 @@ fbdevSetShadow(ScreenPtr pScreen)
break;
case FB_TYPE_PLANES:
- FatalError("Bitplanes are not yet supported\n");
+ window = fbdevWindowAfb;
+ switch (priv->var.bits_per_pixel) {
+ case 4:
+ update = shadowUpdateAfb4;
+ break;
+
+ case 8:
+ update = shadowUpdateAfb8;
+ break;
+
+ default:
+ FatalError("Bitplanes with bpp %u are not yet supported\n",
+ priv->var.bits_per_pixel);
+ }
break;
case FB_TYPE_INTERLEAVED_PLANES:
commit 672bc5bb38918304cf68114a1112cd48651a5e83
Author: Geert Uytterhoeven <geert at linux-m68k.org>
Date: Sun Mar 10 17:17:26 2013 +0100
Xfbdev: Wire up Atari iplan2p4 and iplan2p8 support
Add support for Atari-style interleaved bitplanes, with 2 bytes interleave
and 4 or 8 bits per pixel.
Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
Reviewed-by: Keith Packard <keithp at keithp.com>
diff --git a/hw/kdrive/fbdev/fbdev.c b/hw/kdrive/fbdev/fbdev.c
index 52dfbf5..40747fe 100644
--- a/hw/kdrive/fbdev/fbdev.c
+++ b/hw/kdrive/fbdev/fbdev.c
@@ -439,7 +439,24 @@ fbdevSetShadow(ScreenPtr pScreen)
break;
case FB_TYPE_INTERLEAVED_PLANES:
- FatalError("Interleaved bitplanes are not yet supported\n");
+ if (priv->fix.type_aux == 2) {
+ switch (priv->var.bits_per_pixel) {
+ case 4:
+ update = shadowUpdateIplan2p4;
+ break;
+
+ case 8:
+ update = shadowUpdateIplan2p8;
+ break;
+
+ default:
+ FatalError("Atari interleaved bitplanes with bpp %u are not yet supported\n",
+ priv->var.bits_per_pixel);
+ }
+ } else {
+ FatalError("Interleaved bitplanes with interleave %u are not yet supported\n",
+ priv->fix.type_aux);
+ }
break;
case FB_TYPE_TEXT:
commit 95a3c7536c1a4afe97aaf955980034cc69af9c2f
Author: Geert Uytterhoeven <geert at linux-m68k.org>
Date: Sun Mar 10 17:17:26 2013 +0100
Xfbdev: Force shadowfb for frame buffers with non-packed pixels
Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
Reviewed-by: Keith Packard <keithp at keithp.com>
diff --git a/hw/kdrive/fbdev/fbdev.c b/hw/kdrive/fbdev/fbdev.c
index f31635d..52dfbf5 100644
--- a/hw/kdrive/fbdev/fbdev.c
+++ b/hw/kdrive/fbdev/fbdev.c
@@ -326,7 +326,8 @@ fbdevMapFramebuffer(KdScreenInfo * screen)
KdPointerMatrix m;
FbdevPriv *priv = screen->card->driver;
- if (scrpriv->randr != RR_Rotate_0)
+ if (scrpriv->randr != RR_Rotate_0 ||
+ priv->fix.type != FB_TYPE_PACKED_PIXELS)
scrpriv->shadow = TRUE;
else
scrpriv->shadow = FALSE;
commit 0e808110df216649e05503baecd06cd5a3e50421
Author: Geert Uytterhoeven <geert at linux-m68k.org>
Date: Sun Mar 10 17:17:26 2013 +0100
Xfbdev: Reject unsupported frame buffer types
Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
Reviewed-by: Keith Packard <keithp at keithp.com>
diff --git a/hw/kdrive/fbdev/fbdev.c b/hw/kdrive/fbdev/fbdev.c
index ebbfeb9..f31635d 100644
--- a/hw/kdrive/fbdev/fbdev.c
+++ b/hw/kdrive/fbdev/fbdev.c
@@ -402,33 +402,58 @@ fbdevSetShadow(ScreenPtr pScreen)
window = fbdevWindowLinear;
update = 0;
- if (scrpriv->randr)
- if (priv->var.bits_per_pixel == 16) {
- switch (scrpriv->randr) {
- case RR_Rotate_90:
- if (useYX)
- update = shadowUpdateRotate16_90YX;
- else
- update = shadowUpdateRotate16_90;
- break;
- case RR_Rotate_180:
- update = shadowUpdateRotate16_180;
- break;
- case RR_Rotate_270:
- if (useYX)
- update = shadowUpdateRotate16_270YX;
- else
- update = shadowUpdateRotate16_270;
- break;
- default:
- update = shadowUpdateRotate16;
- break;
+ switch (priv->fix.type) {
+ case FB_TYPE_PACKED_PIXELS:
+ if (scrpriv->randr)
+ if (priv->var.bits_per_pixel == 16) {
+ switch (scrpriv->randr) {
+ case RR_Rotate_90:
+ if (useYX)
+ update = shadowUpdateRotate16_90YX;
+ else
+ update = shadowUpdateRotate16_90;
+ break;
+ case RR_Rotate_180:
+ update = shadowUpdateRotate16_180;
+ break;
+ case RR_Rotate_270:
+ if (useYX)
+ update = shadowUpdateRotate16_270YX;
+ else
+ update = shadowUpdateRotate16_270;
+ break;
+ default:
+ update = shadowUpdateRotate16;
+ break;
+ }
}
- }
+ else
+ update = shadowUpdateRotatePacked;
else
- update = shadowUpdateRotatePacked;
- else
- update = shadowUpdatePacked;
+ update = shadowUpdatePacked;
+ break;
+
+ case FB_TYPE_PLANES:
+ FatalError("Bitplanes are not yet supported\n");
+ break;
+
+ case FB_TYPE_INTERLEAVED_PLANES:
+ FatalError("Interleaved bitplanes are not yet supported\n");
+ break;
+
+ case FB_TYPE_TEXT:
+ FatalError("Text frame buffers are not yet supported\n");
+ break;
+
+ case FB_TYPE_VGA_PLANES:
+ FatalError("VGA planes are not yet supported\n");
+ break;
+
+ default:
+ FatalError("Unsupported frame buffer type %u\n", priv->fix.type);
+ break;
+ }
+
return KdShadowSet(pScreen, scrpriv->randr, update, window);
}
commit cfd10576812c36f5844805eb95ed1f2d093d1691
Author: Geert Uytterhoeven <geert at linux-m68k.org>
Date: Sun Mar 10 21:03:44 2013 +0100
Shadow: Add support for Amiga afb8
Add support for Amiga-style bitplanes, with 8 bits per pixel.
Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
Acked-by: Keith Packard <keithp at keithp.com>
diff --git a/miext/shadow/Makefile.am b/miext/shadow/Makefile.am
index d2142ad..1db8a26 100644
--- a/miext/shadow/Makefile.am
+++ b/miext/shadow/Makefile.am
@@ -10,6 +10,7 @@ libshadow_la_SOURCES = \
shadow.c \
shadow.h \
shafb4.c \
+ shafb8.c \
shalloc.c \
shiplan2p4.c \
shiplan2p8.c \
diff --git a/miext/shadow/shadow.h b/miext/shadow/shadow.h
index f9ea6c4..421ae96 100644
--- a/miext/shadow/shadow.h
+++ b/miext/shadow/shadow.h
@@ -99,6 +99,9 @@ extern _X_EXPORT void
shadowUpdateAfb4(ScreenPtr pScreen, shadowBufPtr pBuf);
extern _X_EXPORT void
+ shadowUpdateAfb8(ScreenPtr pScreen, shadowBufPtr pBuf);
+
+extern _X_EXPORT void
shadowUpdateIplan2p4(ScreenPtr pScreen, shadowBufPtr pBuf);
extern _X_EXPORT void
diff --git a/miext/shadow/shafb8.c b/miext/shadow/shafb8.c
new file mode 100644
index 0000000..0835e16
--- /dev/null
+++ b/miext/shadow/shafb8.c
@@ -0,0 +1,143 @@
+/*
+ *
+ * Copyright © 2013 Geert Uytterhoeven
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Geert Uytterhoeven not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Geert Uytterhoeven makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * GEERT UYTTERHOEVEN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL GEERT UYTTERHOEVEN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Based on shpacked.c, which is Copyright © 2000 Keith Packard
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <stdlib.h>
+
+#include <X11/X.h>
+#include "scrnintstr.h"
+#include "windowstr.h"
+#include <X11/fonts/font.h>
+#include "dixfontstr.h"
+#include <X11/fonts/fontstruct.h>
+#include "mi.h"
+#include "regionstr.h"
+#include "globals.h"
+#include "gcstruct.h"
+#include "shadow.h"
+#include "fb.h"
+#include "c2p_core.h"
+
+
+ /*
+ * Perform a full C2P step on 32 8-bit pixels, stored in 8 32-bit words
+ * containing
+ * - 32 8-bit chunky pixels on input
+ * - permutated planar data (1 plane per 32-bit word) on output
+ */
+
+static void c2p_32x8(CARD32 d[8])
+{
+ transp8(d, 16, 4);
+ transp8(d, 8, 2);
+ transp8(d, 4, 1);
+ transp8(d, 2, 4);
+ transp8(d, 1, 2);
+}
+
+
+ /*
+ * Store a full block of permutated planar data after c2p conversion
+ */
+
+static inline void store_afb8(void *dst, unsigned int stride,
+ const CARD32 d[8])
+{
+ CARD8 *p = dst;
+
+ *(CARD32 *)p = d[7]; p += stride;
+ *(CARD32 *)p = d[5]; p += stride;
+ *(CARD32 *)p = d[3]; p += stride;
+ *(CARD32 *)p = d[1]; p += stride;
+ *(CARD32 *)p = d[6]; p += stride;
+ *(CARD32 *)p = d[4]; p += stride;
+ *(CARD32 *)p = d[2]; p += stride;
+ *(CARD32 *)p = d[0]; p += stride;
+}
+
+
+void
+shadowUpdateAfb8(ScreenPtr pScreen, shadowBufPtr pBuf)
+{
+ RegionPtr damage = shadowDamage(pBuf);
+ PixmapPtr pShadow = pBuf->pPixmap;
+ int nbox = RegionNumRects(damage);
+ BoxPtr pbox = RegionRects(damage);
+ FbBits *shaBase;
+ CARD32 *shaLine, *sha;
+ FbStride shaStride;
+ int scrLine;
+ _X_UNUSED int shaBpp, shaXoff, shaYoff;
+ int x, y, w, h;
+ int i, n;
+ CARD32 *win;
+ CARD32 off, winStride;
+ union {
+ CARD8 bytes[32];
+ CARD32 words[8];
+ } d;
+
+ fbGetDrawable(&pShadow->drawable, shaBase, shaStride, shaBpp, shaXoff,
+ shaYoff);
+ if (sizeof(FbBits) != sizeof(CARD32))
+ shaStride = shaStride * sizeof(FbBits) / sizeof(CARD32);
+
+ while (nbox--) {
+ x = pbox->x1;
+ y = pbox->y1;
+ w = pbox->x2 - pbox->x1;
+ h = pbox->y2 - pbox->y1;
+
+ scrLine = x & -32;
+ shaLine = (CARD32 *)shaBase + y * shaStride + scrLine / sizeof(CARD32);
+
+ off = scrLine / 8; /* byte offset in bitplane scanline */
+ n = ((x & 31) + w + 31) / 32; /* number of c2p units in scanline */
+
+ while (h--) {
+ sha = shaLine;
+ win = (CARD32 *) (*pBuf->window) (pScreen,
+ y,
+ off,
+ SHADOW_WINDOW_WRITE,
+ &winStride,
+ pBuf->closure);
+ if (!win)
+ return;
+ for (i = 0; i < n; i++) {
+ memcpy(d.bytes, sha, sizeof(d.bytes));
+ c2p_32x8(d.words);
+ store_afb8(win++, winStride, d.words);
+ sha += sizeof(d.bytes) / sizeof(*sha);
+ }
+ shaLine += shaStride;
+ y++;
+ }
+ pbox++;
+ }
+}
commit a1b8e7f1e6118b611ba9d332b8763ee2b44f550c
Author: Geert Uytterhoeven <geert at linux-m68k.org>
Date: Wed Mar 27 09:37:02 2013 +0100
Shadow: Add support for Amiga afb4
Add support for Amiga-style bitplanes, with 4 bits per pixel.
Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
Acked-by: Keith Packard <keithp at keithp.com>
diff --git a/miext/shadow/Makefile.am b/miext/shadow/Makefile.am
index 882463e..d2142ad 100644
--- a/miext/shadow/Makefile.am
+++ b/miext/shadow/Makefile.am
@@ -9,6 +9,7 @@ endif
libshadow_la_SOURCES = \
shadow.c \
shadow.h \
+ shafb4.c \
shalloc.c \
shiplan2p4.c \
shiplan2p8.c \
diff --git a/miext/shadow/shadow.h b/miext/shadow/shadow.h
index e190cd4..f9ea6c4 100644
--- a/miext/shadow/shadow.h
+++ b/miext/shadow/shadow.h
@@ -96,6 +96,9 @@ shadowInit(ScreenPtr pScreen, ShadowUpdateProc update, ShadowWindowProc window);
extern _X_EXPORT void *shadowAlloc(int width, int height, int bpp);
extern _X_EXPORT void
+ shadowUpdateAfb4(ScreenPtr pScreen, shadowBufPtr pBuf);
+
+extern _X_EXPORT void
shadowUpdateIplan2p4(ScreenPtr pScreen, shadowBufPtr pBuf);
extern _X_EXPORT void
diff --git a/miext/shadow/shafb4.c b/miext/shadow/shafb4.c
new file mode 100644
index 0000000..0724932
--- /dev/null
+++ b/miext/shadow/shafb4.c
@@ -0,0 +1,139 @@
+/*
+ *
+ * Copyright © 2013 Geert Uytterhoeven
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Geert Uytterhoeven not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Geert Uytterhoeven makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * GEERT UYTTERHOEVEN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL GEERT UYTTERHOEVEN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Based on shpacked.c, which is Copyright © 2000 Keith Packard
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <stdlib.h>
+
+#include <X11/X.h>
+#include "scrnintstr.h"
+#include "windowstr.h"
+#include <X11/fonts/font.h>
+#include "dixfontstr.h"
+#include <X11/fonts/fontstruct.h>
+#include "mi.h"
+#include "regionstr.h"
+#include "globals.h"
+#include "gcstruct.h"
+#include "shadow.h"
+#include "fb.h"
+#include "c2p_core.h"
+
+
+ /*
+ * Perform a full C2P step on 32 4-bit pixels, stored in 4 32-bit words
+ * containing
+ * - 32 4-bit chunky pixels on input
+ * - permutated planar data (1 plane per 32-bit word) on output
+ */
+
+static void c2p_32x4(CARD32 d[4])
+{
+ transp4(d, 16, 2);
+ transp4(d, 8, 1);
+ transp4(d, 4, 2);
+ transp4(d, 2, 1);
+ transp4(d, 1, 2);
+}
+
+
+ /*
+ * Store a full block of permutated planar data after c2p conversion
+ */
+
+static inline void store_afb4(void *dst, unsigned int stride,
+ const CARD32 d[4])
+{
+ CARD8 *p = dst;
+
+ *(CARD32 *)p = d[3]; p += stride;
+ *(CARD32 *)p = d[1]; p += stride;
+ *(CARD32 *)p = d[2]; p += stride;
+ *(CARD32 *)p = d[0]; p += stride;
+}
+
+
+void
+shadowUpdateAfb4(ScreenPtr pScreen, shadowBufPtr pBuf)
+{
+ RegionPtr damage = shadowDamage(pBuf);
+ PixmapPtr pShadow = pBuf->pPixmap;
+ int nbox = RegionNumRects(damage);
+ BoxPtr pbox = RegionRects(damage);
+ FbBits *shaBase;
+ CARD32 *shaLine, *sha;
+ FbStride shaStride;
+ int scrLine;
+ _X_UNUSED int shaBpp, shaXoff, shaYoff;
+ int x, y, w, h;
+ int i, n;
+ CARD32 *win;
+ CARD32 off, winStride;
+ union {
+ CARD8 bytes[16];
+ CARD32 words[4];
+ } d;
+
+ fbGetDrawable(&pShadow->drawable, shaBase, shaStride, shaBpp, shaXoff,
+ shaYoff);
+ if (sizeof(FbBits) != sizeof(CARD32))
+ shaStride = shaStride * sizeof(FbBits) / sizeof(CARD32);
+
+ while (nbox--) {
+ x = pbox->x1;
+ y = pbox->y1;
+ w = pbox->x2 - pbox->x1;
+ h = pbox->y2 - pbox->y1;
+
+ scrLine = (x & -32) / 2;
+ shaLine = (CARD32 *)shaBase + y * shaStride + scrLine / sizeof(CARD32);
+
+ off = scrLine / 4; /* byte offset in bitplane scanline */
+ n = ((x & 31) + w + 31) / 32; /* number of c2p units in scanline */
+
+ while (h--) {
+ sha = shaLine;
+ win = (CARD32 *) (*pBuf->window) (pScreen,
+ y,
+ off,
+ SHADOW_WINDOW_WRITE,
+ &winStride,
+ pBuf->closure);
+ if (!win)
+ return;
+ for (i = 0; i < n; i++) {
+ memcpy(d.bytes, sha, sizeof(d.bytes));
+ c2p_32x4(d.words);
+ store_afb4(win++, winStride, d.words);
+ sha += sizeof(d.bytes) / sizeof(*sha);
+ }
+ shaLine += shaStride;
+ y++;
+ }
+ pbox++;
+ }
+}
commit d7181e567d1629c387b834da7eecdf618d14718e
Author: Geert Uytterhoeven <geert at linux-m68k.org>
Date: Sun Mar 10 17:16:17 2013 +0100
Shadow: Add support for Atari iplan2p8
Add support for Atari-style interleaved bitplanes, with 2 bytes interleave
and 8 bits per pixel.
Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
Acked-by: Keith Packard <keithp at keithp.com>
diff --git a/miext/shadow/Makefile.am b/miext/shadow/Makefile.am
index adb10bf..882463e 100644
--- a/miext/shadow/Makefile.am
+++ b/miext/shadow/Makefile.am
@@ -11,6 +11,7 @@ libshadow_la_SOURCES = \
shadow.h \
shalloc.c \
shiplan2p4.c \
+ shiplan2p8.c \
shpacked.c \
shplanar8.c \
shplanar.c \
diff --git a/miext/shadow/shadow.h b/miext/shadow/shadow.h
index d62903c..e190cd4 100644
--- a/miext/shadow/shadow.h
+++ b/miext/shadow/shadow.h
@@ -99,6 +99,9 @@ extern _X_EXPORT void
shadowUpdateIplan2p4(ScreenPtr pScreen, shadowBufPtr pBuf);
extern _X_EXPORT void
+ shadowUpdateIplan2p8(ScreenPtr pScreen, shadowBufPtr pBuf);
+
+extern _X_EXPORT void
shadowUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf);
extern _X_EXPORT void
diff --git a/miext/shadow/shiplan2p8.c b/miext/shadow/shiplan2p8.c
new file mode 100644
index 0000000..55762f6
--- /dev/null
+++ b/miext/shadow/shiplan2p8.c
@@ -0,0 +1,137 @@
+/*
+ *
+ * Copyright © 2013 Geert Uytterhoeven
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Geert Uytterhoeven not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Geert Uytterhoeven makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * GEERT UYTTERHOEVEN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL GEERT UYTTERHOEVEN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Based on shpacked.c, which is Copyright © 2000 Keith Packard
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <stdlib.h>
+
+#include <X11/X.h>
+#include "scrnintstr.h"
+#include "windowstr.h"
+#include <X11/fonts/font.h>
+#include "dixfontstr.h"
+#include <X11/fonts/fontstruct.h>
+#include "mi.h"
+#include "regionstr.h"
+#include "globals.h"
+#include "gcstruct.h"
+#include "shadow.h"
+#include "fb.h"
+#include "c2p_core.h"
+
+
+ /*
+ * Perform a full C2P step on 16 8-bit pixels, stored in 4 32-bit words
+ * containing
+ * - 16 8-bit chunky pixels on input
+ * - permutated planar data (2 planes per 32-bit word) on output
+ */
+
+static void c2p_16x8(CARD32 d[4])
+{
+ transp4(d, 8, 2);
+ transp4(d, 1, 2);
+ transp4x(d, 16, 2);
+ transp4x(d, 2, 2);
+ transp4(d, 4, 1);
+}
+
+
+ /*
+ * Store a full block of permutated iplan2p8 data after c2p conversion
+ */
+
+static inline void store_iplan2p8(void *dst, const CARD32 d[4])
+{
+ CARD32 *p = dst;
+
+ *p++ = d[1];
+ *p++ = d[3];
+ *p++ = d[0];
+ *p++ = d[2];
+}
+
+
+void
+shadowUpdateIplan2p8(ScreenPtr pScreen, shadowBufPtr pBuf)
+{
+ RegionPtr damage = shadowDamage(pBuf);
+ PixmapPtr pShadow = pBuf->pPixmap;
+ int nbox = RegionNumRects(damage);
+ BoxPtr pbox = RegionRects(damage);
+ FbBits *shaBase;
+ CARD16 *shaLine, *sha;
+ FbStride shaStride;
+ int scrLine;
+ _X_UNUSED int shaBpp, shaXoff, shaYoff;
+ int x, y, w, h;
+ int i, n;
+ CARD16 *win;
+ _X_UNUSED CARD32 winSize;
+ union {
+ CARD8 bytes[16];
+ CARD32 words[4];
+ } d;
+
+ fbGetDrawable(&pShadow->drawable, shaBase, shaStride, shaBpp, shaXoff,
+ shaYoff);
+ shaStride *= sizeof(FbBits) / sizeof(CARD16);
+
+ while (nbox--) {
+ x = pbox->x1;
+ y = pbox->y1;
+ w = pbox->x2 - pbox->x1;
+ h = pbox->y2 - pbox->y1;
+
+ scrLine = x & -16;
+ shaLine = (CARD16 *)shaBase + y * shaStride + scrLine / sizeof(CARD16);
+
+ n = ((x & 15) + w + 15) / 16; /* number of c2p units in scanline */
+
+ while (h--) {
+ sha = shaLine;
+ win = (CARD16 *) (*pBuf->window) (pScreen,
+ y,
+ scrLine,
+ SHADOW_WINDOW_WRITE,
+ &winSize,
+ pBuf->closure);
+ if (!win)
+ return;
+ for (i = 0; i < n; i++) {
+ memcpy(d.bytes, sha, sizeof(d.bytes));
+ c2p_16x8(d.words);
+ store_iplan2p8(win, d.words);
+ sha += sizeof(d.bytes) / sizeof(*sha);
+ win += sizeof(d.bytes) / sizeof(*win);
+ }
+ shaLine += shaStride;
+ y++;
+ }
+ pbox++;
+ }
+}
commit 3f7506b0fca72b2462b85bc4f613de809ae95859
Author: Geert Uytterhoeven <geert at linux-m68k.org>
Date: Sun Mar 10 21:01:02 2013 +0100
Shadow: Add support for Atari iplan2p4
Add support for Atari-style interleaved bitplanes, with 2 bytes interleave
and 4 bits per pixel.
Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
Acked-by: Keith Packard <keithp at keithp.com>
diff --git a/miext/shadow/Makefile.am b/miext/shadow/Makefile.am
index 30f7bda..adb10bf 100644
--- a/miext/shadow/Makefile.am
+++ b/miext/shadow/Makefile.am
@@ -10,6 +10,7 @@ libshadow_la_SOURCES = \
shadow.c \
shadow.h \
shalloc.c \
+ shiplan2p4.c \
shpacked.c \
shplanar8.c \
shplanar.c \
diff --git a/miext/shadow/shadow.h b/miext/shadow/shadow.h
index 83de22c..d62903c 100644
--- a/miext/shadow/shadow.h
+++ b/miext/shadow/shadow.h
@@ -96,6 +96,9 @@ shadowInit(ScreenPtr pScreen, ShadowUpdateProc update, ShadowWindowProc window);
extern _X_EXPORT void *shadowAlloc(int width, int height, int bpp);
extern _X_EXPORT void
+ shadowUpdateIplan2p4(ScreenPtr pScreen, shadowBufPtr pBuf);
+
+extern _X_EXPORT void
shadowUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf);
extern _X_EXPORT void
diff --git a/miext/shadow/shiplan2p4.c b/miext/shadow/shiplan2p4.c
new file mode 100644
index 0000000..79ada99
--- /dev/null
+++ b/miext/shadow/shiplan2p4.c
@@ -0,0 +1,136 @@
+/*
+ *
+ * Copyright © 2013 Geert Uytterhoeven
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Geert Uytterhoeven not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Geert Uytterhoeven makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * GEERT UYTTERHOEVEN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL GEERT UYTTERHOEVEN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Based on shpacked.c, which is Copyright © 2000 Keith Packard
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <stdlib.h>
+
+#include <X11/X.h>
+#include "scrnintstr.h"
+#include "windowstr.h"
+#include <X11/fonts/font.h>
+#include "dixfontstr.h"
+#include <X11/fonts/fontstruct.h>
+#include "mi.h"
+#include "regionstr.h"
+#include "globals.h"
+#include "gcstruct.h"
+#include "shadow.h"
+#include "fb.h"
+#include "c2p_core.h"
+
+
+ /*
+ * Perform a full C2P step on 16 4-bit pixels, stored in 2 32-bit words
+ * containing
+ * - 16 4-bit chunky pixels on input
+ * - permutated planar data (2 planes per 32-bit word) on output
+ */
+
+static void c2p_16x4(CARD32 d[2])
+{
+ transp2(d, 8);
+ transp2(d, 2);
+ transp2x(d, 1);
+ transp2(d, 16);
+ transp2(d, 4);
+ transp2(d, 1);
+}
+
+
+ /*
+ * Store a full block of iplan2p4 data after c2p conversion
+ */
+
+static inline void store_iplan2p4(void *dst, const CARD32 d[2])
+{
+ CARD32 *p = dst;
+
+ *p++ = d[0];
+ *p++ = d[1];
+}
+
+
+void
+shadowUpdateIplan2p4(ScreenPtr pScreen, shadowBufPtr pBuf)
+{
+ RegionPtr damage = shadowDamage(pBuf);
+ PixmapPtr pShadow = pBuf->pPixmap;
+ int nbox = RegionNumRects(damage);
+ BoxPtr pbox = RegionRects(damage);
+ FbBits *shaBase;
+ CARD16 *shaLine, *sha;
+ FbStride shaStride;
+ int scrLine;
+ _X_UNUSED int shaBpp, shaXoff, shaYoff;
+ int x, y, w, h;
+ int i, n;
+ CARD16 *win;
+ _X_UNUSED CARD32 winSize;
+ union {
+ CARD8 bytes[8];
+ CARD32 words[2];
+ } d;
+
+ fbGetDrawable(&pShadow->drawable, shaBase, shaStride, shaBpp, shaXoff,
+ shaYoff);
+ shaStride *= sizeof(FbBits) / sizeof(CARD16);
+
+ while (nbox--) {
+ x = pbox->x1;
+ y = pbox->y1;
+ w = pbox->x2 - pbox->x1;
+ h = pbox->y2 - pbox->y1;
+
+ scrLine = (x & -16) / 2;
+ shaLine = (CARD16 *)shaBase + y * shaStride + scrLine / sizeof(CARD16);
+
+ n = ((x & 15) + w + 15) / 16; /* number of c2p units in scanline */
+
+ while (h--) {
+ sha = shaLine;
+ win = (CARD16 *) (*pBuf->window) (pScreen,
+ y,
+ scrLine,
+ SHADOW_WINDOW_WRITE,
+ &winSize,
+ pBuf->closure);
+ if (!win)
+ return;
+ for (i = 0; i < n; i++) {
+ memcpy(d.bytes, sha, sizeof(d.bytes));
+ c2p_16x4(d.words);
+ store_iplan2p4(win, d.words);
+ sha += sizeof(d.bytes) / sizeof(*sha);
+ win += sizeof(d.bytes) / sizeof(*win);
+ }
+ shaLine += shaStride;
+ y++;
+ }
+ pbox++;
+ }
+}
commit 87af9ab7d52578b0ea315fc4f8dfd906d19755fb
Author: Geert Uytterhoeven <geert at linux-m68k.org>
Date: Sun Mar 10 17:15:05 2013 +0100
Shadow: Add c2p core
Add Chunky-to-Planar core functionality, to be used by the Atari and Amiga
(interleaved) bitplanes code.
Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
Acked-by: Keith Packard <keithp at keithp.com>
diff --git a/miext/shadow/c2p_core.h b/miext/shadow/c2p_core.h
new file mode 100644
index 0000000..252f93e
--- /dev/null
+++ b/miext/shadow/c2p_core.h
@@ -0,0 +1,184 @@
+/*
+ * Fast C2P (Chunky-to-Planar) Conversion
+ *
+ * Copyright (C) 2003-2008 Geert Uytterhoeven
+ *
+ * NOTES:
+ * - This code was inspired by Scout's C2P tutorial
+ * - It assumes to run on a big endian system
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Geert Uytterhoeven not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Geert Uytterhoeven makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * GEERT UYTTERHOEVEN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL GEERT UYTTERHOEVEN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+
+ /*
+ * Basic transpose step
+ */
+
+static inline void _transp(CARD32 d[], unsigned int i1, unsigned int i2,
+ unsigned int shift, CARD32 mask)
+{
+ CARD32 t = (d[i1] ^ (d[i2] >> shift)) & mask;
+
+ d[i1] ^= t;
+ d[i2] ^= t << shift;
+}
+
+
+extern void c2p_unsupported(void);
+
+static inline CARD32 get_mask(unsigned int n)
+{
+ switch (n) {
+ case 1:
+ return 0x55555555;
+
+ case 2:
+ return 0x33333333;
+
+ case 4:
+ return 0x0f0f0f0f;
+
+ case 8:
+ return 0x00ff00ff;
+
+ case 16:
+ return 0x0000ffff;
+ }
+
+ c2p_unsupported();
+ return 0;
+}
+
+
+ /*
+ * Transpose operations on 8 32-bit words
+ */
+
+static inline void transp8(CARD32 d[], unsigned int n, unsigned int m)
+{
+ CARD32 mask = get_mask(n);
+
+ switch (m) {
+ case 1:
+ /* First n x 1 block */
+ _transp(d, 0, 1, n, mask);
+ /* Second n x 1 block */
+ _transp(d, 2, 3, n, mask);
+ /* Third n x 1 block */
+ _transp(d, 4, 5, n, mask);
+ /* Fourth n x 1 block */
+ _transp(d, 6, 7, n, mask);
+ return;
+
+ case 2:
+ /* First n x 2 block */
+ _transp(d, 0, 2, n, mask);
+ _transp(d, 1, 3, n, mask);
+ /* Second n x 2 block */
+ _transp(d, 4, 6, n, mask);
+ _transp(d, 5, 7, n, mask);
+ return;
+
+ case 4:
+ /* Single n x 4 block */
+ _transp(d, 0, 4, n, mask);
+ _transp(d, 1, 5, n, mask);
+ _transp(d, 2, 6, n, mask);
+ _transp(d, 3, 7, n, mask);
+ return;
+ }
+
+ c2p_unsupported();
+}
+
+
+ /*
+ * Transpose operations on 4 32-bit words
+ */
+
+static inline void transp4(CARD32 d[], unsigned int n, unsigned int m)
+{
+ CARD32 mask = get_mask(n);
+
+ switch (m) {
+ case 1:
+ /* First n x 1 block */
+ _transp(d, 0, 1, n, mask);
+ /* Second n x 1 block */
+ _transp(d, 2, 3, n, mask);
+ return;
+
+ case 2:
+ /* Single n x 2 block */
+ _transp(d, 0, 2, n, mask);
+ _transp(d, 1, 3, n, mask);
+ return;
+ }
+
+ c2p_unsupported();
+}
+
+
+ /*
+ * Transpose operations on 4 32-bit words (reverse order)
+ */
+
+static inline void transp4x(CARD32 d[], unsigned int n, unsigned int m)
+{
+ CARD32 mask = get_mask(n);
+
+ switch (m) {
+ case 2:
+ /* Single n x 2 block */
+ _transp(d, 2, 0, n, mask);
+ _transp(d, 3, 1, n, mask);
+ return;
+ }
+
+ c2p_unsupported();
+}
+
+
+ /*
+ * Transpose operations on 2 32-bit words
+ */
+
+static inline void transp2(CARD32 d[], unsigned int n)
+{
+ CARD32 mask = get_mask(n);
+
+ /* Single n x 1 block */
+ _transp(d, 0, 1, n, mask);
+ return;
+}
+
+
+ /*
+ * Transpose operations on 2 32-bit words (reverse order)
+ */
+
+static inline void transp2x(CARD32 d[], unsigned int n)
+{
+ CARD32 mask = get_mask(n);
+
+ /* Single n x 1 block */
+ _transp(d, 1, 0, n, mask);
+ return;
+}
commit 4ee2566c3e420a717be36f79126a14e15edac30f
Author: Geert Uytterhoeven <geert at linux-m68k.org>
Date: Tue Mar 12 18:10:40 2013 +0100
Xfbdev: Treat 1 bpp pseudocolor as monochrome
miCreateDefColormap() only preallocates black and white pixels if
depth > 1.
Hence override the visual, so fbdevCreateColormap() takes care of it.
Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
Reviewed-by: Keith Packard <keithp at keithp.com>
diff --git a/hw/kdrive/fbdev/fbdev.c b/hw/kdrive/fbdev/fbdev.c
index 0082575..ebbfeb9 100644
--- a/hw/kdrive/fbdev/fbdev.c
+++ b/hw/kdrive/fbdev/fbdev.c
@@ -216,11 +216,13 @@ fbdevScreenInitialize(KdScreenInfo * screen, FbdevScrPriv * scrpriv)
screen->fb.visuals = (1 << StaticGray);
break;
case FB_VISUAL_PSEUDOCOLOR:
- if (gray) {
- screen->fb.visuals = (1 << StaticGray);
+ screen->fb.visuals = (1 << StaticGray);
+ if (priv->var.bits_per_pixel == 1) {
+ /* Override to monochrome, to have preallocated black/white */
+ priv->fix.visual = FB_VISUAL_MONO01;
+ } else if (gray) {
/* could also support GrayScale, but what's the point? */
- }
- else {
+ } else {
screen->fb.visuals = ((1 << StaticGray) |
(1 << GrayScale) |
(1 << StaticColor) |
commit 6dfb94a891ed445f47832ba1364fcbf1de018f4a
Author: Geert Uytterhoeven <geert at linux-m68k.org>
Date: Tue Mar 12 14:16:10 2013 +0100
Xfbdev: Add support for monochrome visuals
Monochrome supports StaticGray, with hardcoded black and white pixels.
Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
Reviewed-by: Keith Packard <keithp at keithp.com>
diff --git a/hw/kdrive/fbdev/fbdev.c b/hw/kdrive/fbdev/fbdev.c
index 7b29f42..0082575 100644
--- a/hw/kdrive/fbdev/fbdev.c
+++ b/hw/kdrive/fbdev/fbdev.c
@@ -211,6 +211,10 @@ fbdevScreenInitialize(KdScreenInfo * screen, FbdevScrPriv * scrpriv)
priv->fix.line_length = (priv->var.xres_virtual * depth + 7) / 8;
switch (priv->fix.visual) {
+ case FB_VISUAL_MONO01:
+ case FB_VISUAL_MONO10:
+ screen->fb.visuals = (1 << StaticGray);
+ break;
case FB_VISUAL_PSEUDOCOLOR:
if (gray) {
screen->fb.visuals = (1 << StaticGray);
@@ -577,6 +581,26 @@ fbdevCreateColormap(ColormapPtr pmap)
xColorItem *pdefs;
switch (priv->fix.visual) {
+ case FB_VISUAL_MONO01:
+ pScreen->whitePixel = 0;
+ pScreen->blackPixel = 1;
+ pmap->red[0].co.local.red = 65535;
+ pmap->red[0].co.local.green = 65535;
+ pmap->red[0].co.local.blue = 65535;
+ pmap->red[1].co.local.red = 0;
+ pmap->red[1].co.local.green = 0;
+ pmap->red[1].co.local.blue = 0;
+ return TRUE;
+ case FB_VISUAL_MONO10:
+ pScreen->blackPixel = 0;
+ pScreen->whitePixel = 1;
+ pmap->red[0].co.local.red = 0;
+ pmap->red[0].co.local.green = 0;
+ pmap->red[0].co.local.blue = 0;
+ pmap->red[1].co.local.red = 65535;
+ pmap->red[1].co.local.green = 65535;
+ pmap->red[1].co.local.blue = 65535;
+ return TRUE;
case FB_VISUAL_STATIC_PSEUDOCOLOR:
pVisual = pmap->pVisual;
nent = pVisual->ColormapEntries;
commit 1049b32166760bdc00106625e213d31a8fc60bad
Author: Geert Uytterhoeven <geert at linux-m68k.org>
Date: Tue Mar 12 14:19:25 2013 +0100
Xfbdev: Handle unset fix.line_length
Older frame buffer devices may not fill in fix.line_length, in which
case it must be calculated by the application.
Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
diff --git a/hw/kdrive/fbdev/fbdev.c b/hw/kdrive/fbdev/fbdev.c
index a8d36c6..7b29f42 100644
--- a/hw/kdrive/fbdev/fbdev.c
+++ b/hw/kdrive/fbdev/fbdev.c
@@ -206,6 +206,10 @@ fbdevScreenInitialize(KdScreenInfo * screen, FbdevScrPriv * scrpriv)
depth = priv->var.bits_per_pixel;
gray = priv->var.grayscale;
+ /* Calculate fix.line_length if it's zero */
+ if (!priv->fix.line_length)
+ priv->fix.line_length = (priv->var.xres_virtual * depth + 7) / 8;
+
switch (priv->fix.visual) {
case FB_VISUAL_PSEUDOCOLOR:
if (gray) {
commit 5c509c360d97bea78ef461596ab4b7bde69020ac
Author: Geert Uytterhoeven <geert at linux-m68k.org>
Date: Fri Feb 22 13:21:28 2013 +0100
Xfbdev: Make char *fbdevDevicePath const
This fixes:
hw/kdrive/fbdev/fbdev.c: In function 'fbdevInitialize':
hw/kdrive/fbdev/fbdev.c:41:25: warning: assignment discards 'const' qualifier from pointer target type [enabled by default]
Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
Reviewed-by: Keith Packard <keithp at keithp.com>
diff --git a/hw/kdrive/fbdev/fbdev.c b/hw/kdrive/fbdev/fbdev.c
index d6fcf1a..a8d36c6 100644
--- a/hw/kdrive/fbdev/fbdev.c
+++ b/hw/kdrive/fbdev/fbdev.c
@@ -30,7 +30,7 @@
extern int KdTsPhyScreen;
-char *fbdevDevicePath = NULL;
+const char *fbdevDevicePath = NULL;
static Bool
fbdevInitialize(KdCardInfo * card, FbdevPriv * priv)
diff --git a/hw/kdrive/fbdev/fbdev.h b/hw/kdrive/fbdev/fbdev.h
index 0706f4e..f3f7aec 100644
--- a/hw/kdrive/fbdev/fbdev.h
+++ b/hw/kdrive/fbdev/fbdev.h
@@ -49,7 +49,7 @@ typedef struct _fbdevScrPriv {
} FbdevScrPriv;
extern KdCardFuncs fbdevFuncs;
-extern char *fbdevDevicePath;
+extern const char *fbdevDevicePath;
Bool
fbdevCardInit(KdCardInfo * card);
commit b08afbc53c1d583c3913b92e67db44823077b112
Author: Geert Uytterhoeven <geert at linux-m68k.org>
Date: Tue Mar 12 15:20:00 2013 +0100
KDrive: Bail out if screen initialization failed
Else we may get a segmentation fault later.
Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
Reviewed-by: Keith Packard <keithp at keithp.com>
diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c
index 7d9bf9d..1899a27 100644
--- a/hw/kdrive/src/kdrive.c
+++ b/hw/kdrive/src/kdrive.c
@@ -943,7 +943,8 @@ KdInitScreen(ScreenInfo * pScreenInfo,
{
KdCardInfo *card = screen->card;
- (*card->cfuncs->scrinit) (screen);
+ if (!(*card->cfuncs->scrinit) (screen))
+ FatalError("Screen initialization failed!\n");
if (!card->cfuncs->initAccel)
screen->dumb = TRUE;
commit e7045c9dd208a1afe36526ab21ef15f8b01c8bd2
Author: Geert Uytterhoeven <geert at linux-m68k.org>
Date: Sat Feb 23 20:09:22 2013 +0100
test/input: Fix double-aligned test in dix_valuator_alloc() on m68k
On m68k, doubles are not 64-bit aligned, just like on i386 and sh.
Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
diff --git a/test/input.c b/test/input.c
index be988a4..df20f82 100644
--- a/test/input.c
+++ b/test/input.c
@@ -1384,7 +1384,7 @@ dix_valuator_alloc(void)
assert(v);
assert(v->numAxes == num_axes);
-#if !defined(__i386__) && !defined(__sh__)
+#if !defined(__i386__) && !defined(__m68k__) && !defined(__sh__)
/* must be double-aligned on 64 bit */
assert(((void *) v->axisVal - (void *) v) % sizeof(double) == 0);
assert(((void *) v->axes - (void *) v) % sizeof(double) == 0);
commit 8bb0616cc2799c2c34448da6337ea8cb9438cda7
Author: Geert Uytterhoeven <geert at linux-m68k.org>
Date: Fri Feb 22 21:10:07 2013 +0100
miext/shadow/shpacked.c: Remove unused PickBit() define
Signed-off-by: Geert Uytterhoeven <geert at linux-m68k.org>
Reviewed-by: Keith Packard <keithp at keithp.com>
diff --git a/miext/shadow/shpacked.c b/miext/shadow/shpacked.c
index d2b2e5e..5ef18f8 100644
--- a/miext/shadow/shpacked.c
+++ b/miext/shadow/shpacked.c
@@ -98,7 +98,6 @@ shadowUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf)
i = width;
width -= i;
scr += i;
-#define PickBit(a,i) (((a) >> (i)) & 1)
memcpy(win, sha, i * sizeof(FbBits));
sha += i;
}
More information about the xorg-commit
mailing list