Module Name: xsrc Committed By: jdc Date: Sun Nov 5 17:01:05 UTC 2023
Modified Files: xsrc/external/mit/xf86-video-pnozz/dist/src: pnozz_exa.c Log Message: Revert r1.4. The changes are minimal and they cause redraw problems (as reported by Maxim Devaev on port-sparc). To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 \ xsrc/external/mit/xf86-video-pnozz/dist/src/pnozz_exa.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-pnozz/dist/src/pnozz_exa.c diff -u xsrc/external/mit/xf86-video-pnozz/dist/src/pnozz_exa.c:1.4 xsrc/external/mit/xf86-video-pnozz/dist/src/pnozz_exa.c:1.5 --- xsrc/external/mit/xf86-video-pnozz/dist/src/pnozz_exa.c:1.4 Wed Jun 9 07:25:57 2021 +++ xsrc/external/mit/xf86-video-pnozz/dist/src/pnozz_exa.c Sun Nov 5 17:01:05 2023 @@ -1,6 +1,7 @@ /* * SBus Weitek P9100 EXA support - * + */ +/*- * Copyright (c) 2021 The NetBSD Foundation, Inc. * All rights reserved. * @@ -78,9 +79,11 @@ static CARD32 PnozzDrawROP[] = { #define waitReady(pPnozz) while((pnozz_read_4(pPnozz, ENGINE_STATUS) & \ (ENGINE_BUSY | BLITTER_BUSY)) !=0 ) -/* From pnozz_accel.c */ +void PnozzInitEngine(PnozzPtr); void pnozz_write_colour(PnozzPtr pPnozz, int reg, CARD32 colour); +extern CARD32 MaxClip, junk; + static void PnozzWaitMarker(ScreenPtr pScreen, int Marker) { @@ -107,10 +110,8 @@ PnozzPrepareCopy waitReady(pPnozz); pnozz_write_4(pPnozz, RASTER_OP, (PnozzCopyROP[alu] & 0xff)); pnozz_write_4(pPnozz, PLANE_MASK, planemask); - pPnozz->srcoff = exaGetPixmapOffset(pSrcPixmap); + pPnozz->srcoff = exaGetPixmapOffset(pSrcPixmap) / pPnozz->width; - if (exaGetPixmapPitch(pSrcPixmap) != exaGetPixmapPitch(pDstPixmap)) - return FALSE; return TRUE; } @@ -129,25 +130,24 @@ PnozzCopy ScrnInfoPtr pScrn = xf86Screens[pDstPixmap->drawable.pScreen->myNum]; PnozzPtr pPnozz = GET_PNOZZ_FROM_SCRN(pScrn); CARD32 src, dst, srcw, dstw; - int soff = pPnozz->srcoff / exaGetPixmapPitch(pDstPixmap); - int doff = exaGetPixmapOffset(pDstPixmap) / exaGetPixmapPitch(pDstPixmap); + int doff = exaGetPixmapOffset(pDstPixmap) / pPnozz->width; src = (((xSrc << pPnozz->depthshift) & 0x1fff) << 16) | - ((ySrc + soff) & 0x1fff); + ((ySrc + pPnozz->srcoff) & 0x1fff); dst = (((xDst << pPnozz->depthshift) & 0x1fff) << 16) | ((yDst + doff) & 0x1fff); - srcw = ((((xSrc + w) << pPnozz->depthshift) - 1) << 16) | - ((ySrc + soff + h) & 0x1fff); + srcw = ((((xSrc + w) << pPnozz->depthshift) - 1) << 16) | + ((ySrc + pPnozz->srcoff + h - 1) & 0x1fff); dstw = ((((xDst + w) << pPnozz->depthshift) - 1) << 16) | - ((yDst + doff + h) & 0x1fff); + ((yDst + doff + h - 1) & 0x1fff); waitReady(pPnozz); + pnozz_write_4(pPnozz, ABS_XY0, src); pnozz_write_4(pPnozz, ABS_XY1, srcw); pnozz_write_4(pPnozz, ABS_XY2, dst); pnozz_write_4(pPnozz, ABS_XY3, dstw); - pnozz_read_4(pPnozz, COMMAND_BLIT); - + junk = pnozz_read_4(pPnozz, COMMAND_BLIT); exaMarkSync(pDstPixmap->drawable.pScreen); } @@ -172,8 +172,7 @@ PnozzPrepareSolid( waitReady(pPnozz); pnozz_write_colour(pPnozz, FOREGROUND_COLOR, fg); - pnozz_write_colour(pPnozz, BACKGROUND_COLOR, fg); - pnozz_write_4(pPnozz, RASTER_OP, ROP_PAT); + pnozz_write_4(pPnozz, RASTER_OP, PnozzDrawROP[alu] & 0xff); pnozz_write_4(pPnozz, PLANE_MASK, planemask); pnozz_write_4(pPnozz, COORD_INDEX, 0); @@ -190,18 +189,15 @@ PnozzSolid( { ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; PnozzPtr pPnozz = GET_PNOZZ_FROM_SCRN(pScrn); - int doff = exaGetPixmapOffset(pPixmap); + int w = x2 - x - 1; + int h = y2 - y - 1; waitReady(pPnozz); - pnozz_write_4(pPnozz, ABS_XY0, (((x + doff) & 0x1fff) << 16) | - (y & 0x1fff)); - pnozz_write_4(pPnozz, ABS_XY1, (((x + doff) & 0x1fff) << 16) | - (y2 & 0x1fff)); - pnozz_write_4(pPnozz, ABS_XY2, (((x2 + doff) & 0x1fff) << 16) | - (y2 & 0x1fff)); - pnozz_write_4(pPnozz, ABS_XY3, (((x2 + doff) & 0x1fff) << 16) | - (y & 0x1fff)); - pnozz_read_4(pPnozz, COMMAND_QUAD); + pnozz_write_4(pPnozz, RECT_RTW_XY, ((x & 0x1fff) << 16) | + (y & 0x1fff)); + pnozz_write_4(pPnozz, RECT_RTP_XY, (((w & 0x1fff) << 16) | + (h & 0x1fff))); + junk = pnozz_read_4(pPnozz, COMMAND_QUAD); exaMarkSync(pPixmap->drawable.pScreen); } @@ -212,6 +208,8 @@ PnozzEXAInit(ScreenPtr pScreen) PnozzPtr pPnozz = GET_PNOZZ_FROM_SCRN(pScrn); ExaDriverPtr pExa; + PnozzInitEngine(pPnozz); + pExa = exaDriverAlloc(); if (!pExa) return FALSE; @@ -225,8 +223,7 @@ PnozzEXAInit(ScreenPtr pScreen) /* round to multiple of pixmap pitch */ pExa->memorySize = (pPnozz->vidmem / pPnozz->width) * pPnozz->width; - pExa->offScreenBase = pPnozz->width * pPnozz->height * - (pScrn->bitsPerPixel / 8); + pExa->offScreenBase = pPnozz->width * pPnozz->height; /* * our blitter can't deal with variable pitches @@ -234,10 +231,10 @@ PnozzEXAInit(ScreenPtr pScreen) pExa->pixmapOffsetAlign = pPnozz->width; pExa->pixmapPitchAlign = pPnozz->width; - pExa->flags = EXA_MIXED_PIXMAPS | EXA_OFFSCREEN_PIXMAPS | EXA_SUPPORTS_OFFSCREEN_OVERLAPS; + pExa->flags = EXA_MIXED_PIXMAPS; - pExa->maxX = 1600; - pExa->maxY = 1200; + pExa->maxX = 4096; + pExa->maxY = 4096; pExa->WaitMarker = PnozzWaitMarker; @@ -249,18 +246,5 @@ PnozzEXAInit(ScreenPtr pScreen) pExa->Copy = PnozzCopy; pExa->DoneCopy = PnozzDoneCopy; - /* Drawing engine defaults */ - pnozz_write_4(pPnozz, DRAW_MODE, 0); - pnozz_write_4(pPnozz, PLANE_MASK, 0xffffffff); - pnozz_write_4(pPnozz, PATTERN0, 0xffffffff); - pnozz_write_4(pPnozz, PATTERN1, 0xffffffff); - pnozz_write_4(pPnozz, PATTERN2, 0xffffffff); - pnozz_write_4(pPnozz, PATTERN3, 0xffffffff); - pnozz_write_4(pPnozz, WINDOW_OFFSET, 0); - pnozz_write_4(pPnozz, WINDOW_MIN, 0); - pnozz_write_4(pPnozz, WINDOW_MAX, CLIP_MAX); - pnozz_write_4(pPnozz, BYTE_CLIP_MIN, 0); - pnozz_write_4(pPnozz, BYTE_CLIP_MAX, CLIP_MAX); - return exaDriverInit(pScreen, pExa);; }