Module Name: xsrc
Committed By: snj
Date: Wed Apr 1 03:18:08 UTC 2009
Modified Files:
xsrc/external/mit/xf86-video-crime/dist/src [netbsd-5]: crime.h
crime_accel.c
Log Message:
Pull up following revision(s) (requested by macallan in ticket #626):
external/mit/xf86-video-crime/dist/src/crime.h: revision 1.4
external/mit/xf86-video-crime/dist/src/crime_accel.c: revision 1.6
implement pattern fills
To generate a diff of this commit:
cvs rdiff -u -r1.2.2.4 -r1.2.2.5 \
xsrc/external/mit/xf86-video-crime/dist/src/crime.h
cvs rdiff -u -r1.3.2.6 -r1.3.2.7 \
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.2.2.4 xsrc/external/mit/xf86-video-crime/dist/src/crime.h:1.2.2.5
--- xsrc/external/mit/xf86-video-crime/dist/src/crime.h:1.2.2.4 Wed Apr 1 03:13:54 2009
+++ xsrc/external/mit/xf86-video-crime/dist/src/crime.h Wed Apr 1 03:18:07 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: crime.h,v 1.2.2.4 2009/04/01 03:13:54 snj Exp $ */
+/* $NetBSD: crime.h,v 1.2.2.5 2009/04/01 03:18:07 snj Exp $ */
/*
* Copyright (c) 2008 Michael Lorenz
* All rights reserved.
@@ -92,6 +92,7 @@
int format;
int use_mte;
uint32_t expand[2048];
+ uint32_t pattern[8];
uint32_t alpha_color;
int texture_depth;
unsigned char *alpha_texture;
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.3.2.6 xsrc/external/mit/xf86-video-crime/dist/src/crime_accel.c:1.3.2.7
--- xsrc/external/mit/xf86-video-crime/dist/src/crime_accel.c:1.3.2.6 Wed Apr 1 03:13:54 2009
+++ xsrc/external/mit/xf86-video-crime/dist/src/crime_accel.c Wed Apr 1 03:18:07 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: crime_accel.c,v 1.3.2.6 2009/04/01 03:13:54 snj Exp $ */
+/* $NetBSD: crime_accel.c,v 1.3.2.7 2009/04/01 03:18:07 snj Exp $ */
/*
* Copyright (c) 2008 Michael Lorenz
* All rights reserved.
@@ -237,8 +237,6 @@
DE_DRAWMODE_SCISSOR_EN);
WRITE4(CRIME_DE_PRIMITIVE,
DE_PRIM_RECTANGLE | DE_PRIM_LR | DE_PRIM_TB);
- WRITE4(CRIME_DE_MODE_SRC, DE_MODE_TLB_A | DE_MODE_BUFDEPTH_32 |
- DE_MODE_TYPE_RGBA | DE_MODE_PIXDEPTH_32);
WRITE4(CRIME_DE_MODE_DST, DE_MODE_TLB_A | DE_MODE_BUFDEPTH_32 |
DE_MODE_TYPE_RGBA | DE_MODE_PIXDEPTH_32);
SYNC;
@@ -265,7 +263,95 @@
DONE(CRIME_DEBUG_RECTFILL);
}
-void
+static void
+CrimeSetupForMono8x8PatternFill(ScrnInfoPtr pScrn, int patx, int paty,
+ int fg, int bg, int rop, unsigned int planemask)
+{
+ CrimePtr fPtr = CRIMEPTR(pScrn);
+ uint32_t pat;
+
+ LOG(CRIME_DEBUG_RECTFILL);
+ MAKE_ROOM(7);
+ WRITE4(CRIME_DE_PLANEMASK, planemask);
+ WRITE4(CRIME_DE_ROP, rop);
+ WRITE4(CRIME_DE_FG, fg << 8);
+ if (bg == -1) {
+ WRITE4(CRIME_DE_DRAWMODE,
+ DE_DRAWMODE_PLANEMASK | DE_DRAWMODE_BYTEMASK |
+ DE_DRAWMODE_ROP | DE_DRAWMODE_POLY_STIP |
+ DE_DRAWMODE_SCISSOR_EN);
+ } else {
+ WRITE4(CRIME_DE_BG, bg << 8);
+ WRITE4(CRIME_DE_DRAWMODE,
+ DE_DRAWMODE_PLANEMASK | DE_DRAWMODE_BYTEMASK |
+ DE_DRAWMODE_ROP | DE_DRAWMODE_POLY_STIP |
+ DE_DRAWMODE_OPAQUE_STIP | DE_DRAWMODE_SCISSOR_EN);
+ }
+ WRITE4(CRIME_DE_PRIMITIVE,
+ DE_PRIM_RECTANGLE | DE_PRIM_LR | DE_PRIM_TB);
+ WRITE4(CRIME_DE_MODE_DST, DE_MODE_TLB_A | DE_MODE_BUFDEPTH_32 |
+ DE_MODE_TYPE_RGBA | DE_MODE_PIXDEPTH_32);
+
+ /*
+ * we need to store the pattern so we can just hammer it into the
+ * stipple register later on
+ */
+ pat = patx & 0xff000000;
+ pat |= pat >> 8;
+ fPtr->pattern[0] = pat | (pat >> 16);
+ pat = patx & 0x00ff0000;
+ pat |= pat << 8;
+ fPtr->pattern[1] = pat | (pat >> 16);
+ pat = patx & 0x0000ff00;
+ pat |= pat >> 8;
+ fPtr->pattern[2] = pat | (pat << 16);
+ pat = patx & 0x000000ff;
+ pat |= pat << 8;
+ fPtr->pattern[3] = pat | (pat << 16);
+
+ pat = paty & 0xff000000;
+ pat |= pat >> 8;
+ fPtr->pattern[4] = pat | (pat >> 16);
+ pat = paty & 0x00ff0000;
+ pat |= pat << 8;
+ fPtr->pattern[5] = pat | (pat >> 16);
+ pat = paty & 0x0000ff00;
+ pat |= pat >> 8;
+ fPtr->pattern[6] = pat | (pat << 16);
+ pat = paty & 0x000000ff;
+ pat |= pat << 8;
+ fPtr->pattern[7] = pat | (pat << 16);
+ SYNC;
+ DONE(CRIME_DEBUG_RECTFILL);
+}
+
+static void
+CrimeSubsequentMono8x8PatternFillRect( ScrnInfoPtr pScrn,
+ int patx, int paty, int x, int y, int w, int h)
+{
+ CrimePtr fPtr = CRIMEPTR(pScrn);
+ int i, pat;
+
+ LOG(CRIME_DEBUG_RECTFILL);
+
+ /* first setup the stipple stuff */
+
+ MAKE_ROOM(1);
+ WRITE4(CRIME_DE_STIPPLE_MODE, 0x001f0000 | (patx << 24));
+ pat = paty;
+
+ for (i = 0; i < h; i++) {
+ MAKE_ROOM(3);
+ WRITE4(CRIME_DE_STIPPLE_PAT, fPtr->pattern[pat]);
+ WRITE4(CRIME_DE_X_VERTEX_0, (x << 16) | ((y + i) & 0xffff));
+ WRITE4ST(CRIME_DE_X_VERTEX_1,
+ ((x + w - 1) << 16) | ((y + i) & 0xffff));
+ pat = (pat + 1) & 7;
+ }
+ DONE(CRIME_DEBUG_RECTFILL);
+}
+
+static void
CrimeSetupForScanlineImageWrite(ScrnInfoPtr pScrn, int rop,
unsigned int planemask, int trans_color,
int bpp, int depth)
@@ -294,7 +380,7 @@
DONE(CRIME_DEBUG_IMAGEWRITE);
}
-void
+static void
CrimeSubsequentImageWriteRect(ScrnInfoPtr pScrn,
int x, int y, int w, int h, int skipleft)
{
@@ -322,7 +408,7 @@
DONE(CRIME_DEBUG_IMAGEWRITE);
}
-void
+static void
CrimeSubsequentImageWriteScanline(ScrnInfoPtr pScrn, int bufno)
{
CrimePtr fPtr = CRIMEPTR(pScrn);
@@ -591,11 +677,12 @@
fPtr->us = alphaPitch;
fPtr->alpha_texture = alphaPtr;
fPtr->format = alphaType;
+#ifdef CRIME_DEBUG_LOUD
if (alphaType != PICT_a8) {
xf86Msg(X_ERROR, "ARGB mask %08x %d\n", (uint32_t)alphaPtr,
alphaPitch);
-
}
+#endif
MAKE_ROOM(7);
WRITE4(CRIME_DE_MODE_DST, DE_MODE_TLB_A | DE_MODE_BUFDEPTH_32 |
DE_MODE_TYPE_RGBA | DE_MODE_PIXDEPTH_32);
@@ -1057,7 +1144,7 @@
int sr, sg, sb, sa, rr, gg, bb, aa;
LOG(CRIME_DEBUG_XRENDER);
-#ifndef CRIME_DEBUG_LOUD
+#ifdef CRIME_DEBUG_LOUD
xf86Msg(X_ERROR, "%s: %d %d %d %d %d %d\n", __func__,
srcx, srcy, dstx, dsty, width, height);
#endif
@@ -1894,7 +1981,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;
@@ -1902,7 +1990,7 @@
pXAAInfo->SetupForSolidLine = CrimeSetupForSolidLine;
pXAAInfo->SubsequentSolidTwoPointLine =
CrimeSubsequentSolidTwoPointLine;
- pXAAInfo->SolidLineFlags = BIT_ORDER_IN_BYTE_MSBFIRST;
+ pXAAInfo->SolidLineFlags = 0;
/* dashed line drawing */
pXAAInfo->SetupForDashedLine = CrimeSetupForDashedLine;
@@ -1911,6 +1999,13 @@
pXAAInfo->DashedLineFlags = LINE_PATTERN_MSBFIRST_MSBJUSTIFIED;
pXAAInfo->DashPatternMaxLength = 32;
+ /* mono pattern fills */
+ pXAAInfo->Mono8x8PatternFillFlags = HARDWARE_PATTERN_PROGRAMMED_BITS |
+ HARDWARE_PATTERN_PROGRAMMED_ORIGIN | BIT_ORDER_IN_BYTE_MSBFIRST;
+ pXAAInfo->SetupForMono8x8PatternFill = CrimeSetupForMono8x8PatternFill;
+ pXAAInfo->SubsequentMono8x8PatternFillRect =
+ CrimeSubsequentMono8x8PatternFillRect;
+
/* XRender acceleration */
#ifdef RENDER
pXAAInfo->CPUToScreenAlphaTextureFlags = 0;