Module Name: xsrc Committed By: macallan Date: Sat Nov 21 22:22:27 UTC 2009
Modified Files: xsrc/external/mit/xf86-video-igs/dist/src: igs_accel.c Log Message: Make IgsDownloadFromScreen() and IgsUploadToScreen() actually work. While there clean up some cargo-culted comments that no longer apply. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 \ xsrc/external/mit/xf86-video-igs/dist/src/igs_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-igs/dist/src/igs_accel.c diff -u xsrc/external/mit/xf86-video-igs/dist/src/igs_accel.c:1.1 xsrc/external/mit/xf86-video-igs/dist/src/igs_accel.c:1.2 --- xsrc/external/mit/xf86-video-igs/dist/src/igs_accel.c:1.1 Tue Nov 10 21:39:45 2009 +++ xsrc/external/mit/xf86-video-igs/dist/src/igs_accel.c Sat Nov 21 22:22:27 2009 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/* $NetBSD: igs_accel.c,v 1.1 2009/11/10 21:39:45 macallan Exp $ */ +/* $NetBSD: igs_accel.c,v 1.2 2009/11/21 22:22:27 macallan Exp $ */ #include <sys/types.h> @@ -69,6 +69,7 @@ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; IgsPtr fPtr = IGSPTR(pScrn); int bail = 0x0fffffff; + ENTER; IgsWrite1(fPtr, IGS_COP_MAP_FMT_REG, (fPtr->info.depth >> 3) - 1); while ((IgsRead1(fPtr, @@ -89,14 +90,15 @@ static int IgsMarkSync(ScreenPtr pScreenInfo) { - ENTER; - return 0; + ENTER; + return 0; } static void IgsWaitReady(IgsPtr fPtr) { int bail = 0x0fffffff; + ENTER; IgsWrite1(fPtr, IGS_COP_MAP_FMT_REG, (fPtr->info.depth >> 3) - 1); while (((IgsRead1(fPtr, @@ -253,23 +255,25 @@ IgsUploadToScreen(PixmapPtr pDst, int x, int y, int w, int h, char *src, int src_pitch) { - char *dst = pDst->devPrivate.ptr; - int dst_pitch = exaGetPixmapPitch(pDst); + ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum]; + IgsPtr fPtr = IGSPTR(pScrn); + char *dst = fPtr->fbmem + exaGetPixmapOffset(pDst); + int dst_pitch = exaGetPixmapPitch(pDst); - int bpp = pDst->drawable.bitsPerPixel; - int cpp = (bpp + 7) / 8; - int wBytes = w * cpp; + int bpp = pDst->drawable.bitsPerPixel; + int cpp = (bpp + 7) / 8; + int wBytes = w * cpp; - ENTER; - dst += (x * cpp) + (y * dst_pitch); + ENTER; + dst += (x * cpp) + (y * dst_pitch); - while (h--) { - memcpy(dst, src, wBytes); - src += src_pitch; - dst += dst_pitch; - } - LEAVE; - return TRUE; + while (h--) { + memcpy(dst, src, wBytes); + src += src_pitch; + dst += dst_pitch; + } + LEAVE; + return TRUE; } /* @@ -279,66 +283,62 @@ IgsDownloadFromScreen(PixmapPtr pSrc, int x, int y, int w, int h, char *dst, int dst_pitch) { - char *src = pSrc->devPrivate.ptr; - int src_pitch = exaGetPixmapPitch(pSrc); + ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum]; + IgsPtr fPtr = IGSPTR(pScrn); + char *src = fPtr->fbmem + exaGetPixmapOffset(pSrc); + int src_pitch = exaGetPixmapPitch(pSrc); - int bpp = pSrc->drawable.bitsPerPixel; - int cpp = (bpp + 7) / 8; - int wBytes = w * cpp; + int bpp = pSrc->drawable.bitsPerPixel; + int cpp = (bpp + 7) / 8; + int wBytes = w * cpp; - ENTER; - src += (x * cpp) + (y * src_pitch); + ENTER; + src += (x * cpp) + (y * src_pitch); - while (h--) { - memcpy(dst, src, wBytes); - src += src_pitch; - dst += dst_pitch; - } - LEAVE; - return TRUE; + while (h--) { + memcpy(dst, src, wBytes); + src += src_pitch; + dst += dst_pitch; + } + LEAVE; + return TRUE; } Bool IgsInitAccel(ScreenPtr pScreen) { - ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; - IgsPtr fPtr = IGSPTR(pScrn); - ExaDriverPtr pExa; - - pExa = exaDriverAlloc(); - if (!pExa) - return FALSE; - - fPtr->pExa = pExa; - - pExa->exa_major = EXA_VERSION_MAJOR; - pExa->exa_minor = EXA_VERSION_MINOR; - - /* - * The S24 can display both 8 and 24bit data at the same time, and in - * 24bit we can choose between gamma corrected ad direct. No idea how that - * would map to EXA - we'd have to pick the right framebuffer to draw into - * and Solid() would need to know what kind of pixels to write - */ - pExa->memoryBase = fPtr->fbmem; + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + IgsPtr fPtr = IGSPTR(pScrn); + ExaDriverPtr pExa; + + pExa = exaDriverAlloc(); + if (!pExa) + return FALSE; + + fPtr->pExa = pExa; + + pExa->exa_major = EXA_VERSION_MAJOR; + pExa->exa_minor = EXA_VERSION_MINOR; + + pExa->memoryBase = fPtr->fbmem; pExa->memorySize = fPtr->fbmem_len; pExa->offScreenBase = fPtr->linebytes * fPtr->info.height; pExa->pixmapOffsetAlign = 4; pExa->pixmapPitchAlign = 4; - pExa->flags = EXA_OFFSCREEN_PIXMAPS; + pExa->flags = EXA_OFFSCREEN_PIXMAPS; - pExa->maxX = 2048; - pExa->maxY = 2048; /* dummy, available VRAM is the limit */ + pExa->maxX = 2048; + pExa->maxY = 2048; - pExa->MarkSync = IgsMarkSync; - pExa->WaitMarker = IgsWaitMarker; - pExa->PrepareSolid = IgsPrepareSolid; - pExa->Solid = IgsSolid; - pExa->DoneSolid = IgsDoneCopy; - pExa->PrepareCopy = IgsPrepareCopy; - pExa->Copy = IgsCopy; - pExa->DoneCopy = IgsDoneCopy; + pExa->MarkSync = IgsMarkSync; + pExa->WaitMarker = IgsWaitMarker; + pExa->PrepareSolid = IgsPrepareSolid; + pExa->Solid = IgsSolid; + pExa->DoneSolid = IgsDoneCopy; + pExa->PrepareCopy = IgsPrepareCopy; + pExa->Copy = IgsCopy; + pExa->DoneCopy = IgsDoneCopy; switch(fPtr->info.depth) { case 8: @@ -351,12 +351,11 @@ fPtr->shift = 2; break; } - /* EXA hits more optimized paths when it does not have to fallback because - * of missing UTS/DFS, hook memcpy-based UTS/DFS. - */ -if (0) { - pExa->UploadToScreen = IgsUploadToScreen; - pExa->DownloadFromScreen = IgsDownloadFromScreen; -} - return exaDriverInit(pScreen, pExa); + /* EXA hits more optimized paths when it does not have to fallback + * because of missing UTS/DFS, hook memcpy-based UTS/DFS. + */ + pExa->UploadToScreen = IgsUploadToScreen; + pExa->DownloadFromScreen = IgsDownloadFromScreen; + + return exaDriverInit(pScreen, pExa); }