Module Name: xsrc
Committed By: macallan
Date: Sat Apr 11 20:43:04 UTC 2009
Modified Files:
xsrc/external/mit/xf86-video-crime/dist/src: crime.h crime_accel.c
Log Message:
clip MTE-drawn rectangles by hand, now pwm looks right again
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 xsrc/external/mit/xf86-video-crime/dist/src/crime.h
cvs rdiff -u -r1.8 -r1.9 \
xsrc/external/mit/xf86-video-crime/dist/src/crime_accel.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-crime/dist/src/crime.h
diff -u xsrc/external/mit/xf86-video-crime/dist/src/crime.h:1.4 xsrc/external/mit/xf86-video-crime/dist/src/crime.h:1.5
--- xsrc/external/mit/xf86-video-crime/dist/src/crime.h:1.4 Tue Mar 31 15:57:34 2009
+++ xsrc/external/mit/xf86-video-crime/dist/src/crime.h Sat Apr 11 20:43:04 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: crime.h,v 1.4 2009/03/31 15:57:34 macallan Exp $ */
+/* $NetBSD: crime.h,v 1.5 2009/04/11 20:43:04 macallan Exp $ */
/*
* Copyright (c) 2008 Michael Lorenz
* All rights reserved.
@@ -91,6 +91,7 @@
int start, xdir, ydir;
int format;
int use_mte;
+ int cxa, cxe, cya, cye;
uint32_t expand[2048];
uint32_t pattern[8];
uint32_t alpha_color;
Index: xsrc/external/mit/xf86-video-crime/dist/src/crime_accel.c
diff -u xsrc/external/mit/xf86-video-crime/dist/src/crime_accel.c:1.8 xsrc/external/mit/xf86-video-crime/dist/src/crime_accel.c:1.9
--- xsrc/external/mit/xf86-video-crime/dist/src/crime_accel.c:1.8 Tue Apr 7 23:11:44 2009
+++ xsrc/external/mit/xf86-video-crime/dist/src/crime_accel.c Sat Apr 11 20:43:04 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: crime_accel.c,v 1.8 2009/04/07 23:11:44 macallan Exp $ */
+/* $NetBSD: crime_accel.c,v 1.9 2009/04/11 20:43:04 macallan Exp $ */
/*
* Copyright (c) 2008 Michael Lorenz
* All rights reserved.
@@ -64,6 +64,9 @@
#define MAKE_ROOM(x) do {} while ((16 - \
CRIME_PIPE_LEVEL(*CRIMEREG(0x4000))) < x);
+#define MAX(a, b) (a > b ? a : b)
+#define MIN(a, b) (a < b ? a : b)
+
CARD32 CrimeAlphaTextureFormats[] = {PICT_a8, 0};
CARD32 CrimeTextureFormats[] = {PICT_a8b8g8r8, PICT_a8r8g8b8, 0};
@@ -264,13 +267,25 @@
)
{
CrimePtr fPtr = CRIMEPTR(pScrn);
+ int xa, xe, ya, ye;
LOG(CRIME_DEBUG_RECTFILL);
if (fPtr->use_mte) {
- MAKE_ROOM(2);
- WRITE4(CRIME_MTE_DST0, (x << 18) | (y & 0xffff));
- WRITE4ST(CRIME_MTE_DST1,
- ((((x + w) << 2) - 1 ) << 16) | ((y + h - 1) & 0xffff));
+
+ /*
+ * the MTE doesn't support clipping so we have to do it
+ * ourselves - luckily it's trivial with rectangles
+ */
+ xa = MAX(fPtr->cxa, x);
+ ya = MAX(fPtr->cya, y);
+ xe = MIN(fPtr->cxe, x + w);
+ ye = MIN(fPtr->cye, y + h);
+ if ((xa < xe) && (ya < ye)) {
+ MAKE_ROOM(2);
+ WRITE4(CRIME_MTE_DST0, (xa << 18) | (ya & 0xffff));
+ WRITE4ST(CRIME_MTE_DST1,
+ (((xe << 2) - 1 ) << 16) | ((ye - 1) & 0xffff));
+ }
} else {
MAKE_ROOM(2);
WRITE4(CRIME_DE_X_VERTEX_0, (x << 16) | (y & 0xffff));
@@ -644,6 +659,10 @@
MAKE_ROOM(2);
WRITE4(CRIME_DE_SCISSOR, (left << 16) | top);
WRITE4(CRIME_DE_SCISSOR + 4, ((right + 1) << 16) | (bottom + 1));
+ fPtr->cxa = left;
+ fPtr->cxe = right;
+ fPtr->cya = top;
+ fPtr->cye = bottom;
SYNC;
DONE(CRIME_DEBUG_CLIPPING);
}
@@ -657,6 +676,10 @@
MAKE_ROOM(2);
WRITE4(CRIME_DE_SCISSOR, 0);
WRITE4(CRIME_DE_SCISSOR + 4, 0x3fff3fff);
+ fPtr->cxa = 0;
+ fPtr->cxe = 2047;
+ fPtr->cya = 0;
+ fPtr->cye = 2047;
SYNC;
DONE(CRIME_DEBUG_CLIPPING);
}
@@ -2000,7 +2023,8 @@
/* clipping */
pXAAInfo->ClippingFlags = HARDWARE_CLIP_SCREEN_TO_SCREEN_COPY |
- HARDWARE_CLIP_SOLID_FILL | HARDWARE_CLIP_SOLID_LINE |
+ HARDWARE_CLIP_SOLID_FILL |
+ HARDWARE_CLIP_SOLID_LINE |
HARDWARE_CLIP_MONO_8x8_FILL | HARDWARE_CLIP_DASHED_LINE;
pXAAInfo->SetClippingRectangle = CrimeSetClippingRectangle;
pXAAInfo->DisableClipping = CrimeDisableClipping;