summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Skeggs <skeggsb@gmail.com>2007-07-01 18:22:37 +1000
committerBen Skeggs <skeggsb@gmail.com>2007-07-01 18:22:37 +1000
commitdff1cce299df636813e8f85109f4556f520620c0 (patch)
tree7eb846f714a36a87afe9d9b658d421742b3a7536
parent2e0e7e3856573fbbcb5fe5c96cadcde4d33db68f (diff)
downloadxorg-driver-xf86-video-nouveau-dff1cce299df636813e8f85109f4556f520620c0.tar.gz
Always provide UTS, fallback to memcpy if no GART.
-rw-r--r--src/nv_exa.c25
1 files 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;