[PATCH 1/2] xf86-video-geode: fix up cursor size (again)

Andres Salomon dilinger at queued.net
Thu Dec 4 18:33:22 PST 2008


The geode hardware (and cimarron) expects cursor memory size to be 48x64,
and cimarron will zero out the excess when a smaller cursor is used.  It
would be nice to be able to use the full cursor size, but xorg's interleaving
stuff requires a cursor width that's a multiple of 32.  Thus, we're stuck
back at 32x32 for cursor size, but we allocate enough memory for a 48x64
cursor.

This fixes misc interleaving corruption that we see with 2bpp cursors (when
converting to ARGB).

Signed-off-by: Andres Salomon <dilinger at debian.org>
---
 src/geode.h     |   10 ++++++++--
 src/lx_memory.c |    4 ++--
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/geode.h b/src/geode.h
index 0ba32fe..b8ff455 100644
--- a/src/geode.h
+++ b/src/geode.h
@@ -92,8 +92,14 @@
 
 #define DEFAULT_EXA_SCRATCH_BFRSZ 0x40000
 
-#define LX_CURSOR_MAX_WIDTH  48
-#define LX_CURSOR_MAX_HEIGHT 64
+/* the LX hardware (and Cimarron) require a cursor memory size of 48x64.. */
+#define LX_CURSOR_HW_WIDTH 48
+#define LX_CURSOR_HW_HEIGHT 64
+
+/* ...but xorg requires the cursor width to be a multiple of 32.  This is
+the size of the *actual* cursor. */
+#define LX_CURSOR_MAX_WIDTH 32
+#define LX_CURSOR_MAX_HEIGHT 32
 
 /* FIXME: Get rid of this from GX */
 
diff --git a/src/lx_memory.c b/src/lx_memory.c
index 92fa3fb..3f853d4 100644
--- a/src/lx_memory.c
+++ b/src/lx_memory.c
@@ -209,7 +209,7 @@ LXInitOffscreen(ScrnInfoPtr pScrni)
 
     if (pGeode->tryHWCursor) {
 	ptr = GeodeAllocOffscreen(pGeode,
-		LX_CURSOR_MAX_WIDTH * 4 * LX_CURSOR_MAX_HEIGHT, 4);
+		LX_CURSOR_HW_WIDTH * 4 * LX_CURSOR_HW_HEIGHT, 4);
 
 	if (ptr != NULL) {
 	    pGeode->CursorStartOffset = ptr->offset;
@@ -285,7 +285,7 @@ LXInitOffscreen(ScrnInfoPtr pScrni)
 
     if (pGeode->HWCursor)
 	xf86DrvMsg(pScrni->scrnIndex, X_INFO, " Cursor: 0x%x bytes\n",
-	    LX_CURSOR_MAX_WIDTH * 4 * LX_CURSOR_MAX_HEIGHT);
+	    LX_CURSOR_HW_WIDTH * 4 * LX_CURSOR_HW_HEIGHT);
 
     if (pGeode->pExa->offScreenBase)
 	xf86DrvMsg(pScrni->scrnIndex, X_INFO, " EXA: 0x%x bytes\n",
-- 
1.5.6.5




More information about the xorg mailing list