From dff1cce299df636813e8f85109f4556f520620c0 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Sun, 1 Jul 2007 18:22:37 +1000 Subject: Always provide UTS, fallback to memcpy if no GART. --- src/nv_exa.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/nv_exa.c b/src/nv_exa.c index 50306ee..4ce44ce 100644 --- a/src/nv_exa.c +++ b/src/nv_exa.c @@ -263,7 +263,7 @@ static void NVExaDoneCopy (PixmapPtr pDstPixmap) {} Bool NVAccelMemcpyRect(char *dst, const char *src, int height, int dst_pitch, int src_pitch, int line_len) { - if ((src_pitch == line_len) && (src_pitch == dst_pitch)) { + if ((src_pitch == line_len) && (src_pitch == dst_pitch)) { memcpy(dst, src, line_len*height); } else { while (height--) { @@ -431,20 +431,27 @@ static Bool NVUploadToScreen(PixmapPtr pDst, char *src, int src_pitch) { ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum]; + NVPtr pNv = NVPTR(pScrn); int dst_offset, dst_pitch, cpp; - Bool ret; + char *dst; dst_offset = NVAccelGetPixmapOffset(pDst); dst_pitch = exaGetPixmapPitch(pDst); cpp = pDst->drawable.bitsPerPixel >> 3; - if (1) { + if (pNv->AGPScratch) { dst_offset += (y * dst_pitch) + (x * cpp); - ret = NVAccelUploadM2MF(pScrn, dst_offset, src, - dst_pitch, src_pitch, - w * cpp, h); + if (NVAccelUploadM2MF(pScrn, dst_offset, src, dst_pitch, + src_pitch, w * cpp, h)) + return TRUE; } - return ret; + + dst = pDst->devPrivate.ptr + (y * dst_pitch) + (x * cpp); + exaWaitSync(pDst->drawable.pScreen); + if (NVAccelMemcpyRect(dst, src, h, dst_pitch, src_pitch, w*cpp)) + return TRUE; + + return FALSE; } @@ -599,9 +606,7 @@ Bool NVExaInit(ScreenPtr pScreen) /* Install default hooks */ pNv->EXADriverPtr->DownloadFromScreen = NVDownloadFromScreen; - if (pNv->AGPScratch) { - pNv->EXADriverPtr->UploadToScreen = NVUploadToScreen; - } + pNv->EXADriverPtr->UploadToScreen = NVUploadToScreen; pNv->EXADriverPtr->PrepareCopy = NVExaPrepareCopy; pNv->EXADriverPtr->Copy = NVExaCopy; -- cgit v1.2.1