diff options
author | Arthur Huillet <arthur.huillet@free.fr> | 2007-08-06 01:37:17 +0200 |
---|---|---|
committer | Arthur Huillet <arthur.huillet@free.fr> | 2007-08-06 01:37:17 +0200 |
commit | 59d073c9b01a8f61675b8d74f5c55f134ddfb8bf (patch) | |
tree | 61681bae32b9d8901a236d9fd748cf889edbf8da | |
parent | 047aa7e0a6ecce59c9be8d36c51f082c0ddaafe8 (diff) | |
download | xorg-driver-xf86-video-nouveau-59d073c9b01a8f61675b8d74f5c55f134ddfb8bf.tar.gz |
Xv: waiting for last transfers to finish before freeing notifiers
-rw-r--r-- | src/nv_video.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/nv_video.c b/src/nv_video.c index 52a2e2f..67a231f 100644 --- a/src/nv_video.c +++ b/src/nv_video.c @@ -349,6 +349,16 @@ NVFreePortMemory(ScrnInfoPtr pScrn, NVPortPrivPtr pPriv) pPriv->video_mem = NULL; } + if ( pPriv->TT_mem_chunk[ 0 ] && pPriv->DMANotifier [ 0 ] ) + { + NVNotifierWaitStatus(pScrn, pPriv->DMANotifier [ 0 ] , 0, 1000); + } + + if ( pPriv->TT_mem_chunk[ 1 ] && pPriv->DMANotifier [ 1 ] ) + { + NVNotifierWaitStatus(pScrn, pPriv->DMANotifier [ 1 ] , 0, 1000); + } + if(pPriv->TT_mem_chunk[0]) { NVFreeMemory(pNv, pPriv->TT_mem_chunk[0]); pPriv->TT_mem_chunk[0] = NULL; @@ -1364,13 +1374,14 @@ NVPutImage(ScrnInfoPtr pScrn, short src_x, short src_y, NVDmaStart(pNv, NvSubMemFormat, 0x100, 1); NVDmaNext (pNv, 0); - NVDmaKickoff(pNv); - + //Put back NvDmaNotifier0 for EXA NVDmaStart(pNv, NvSubMemFormat, NV_MEMORY_TO_MEMORY_FORMAT_DMA_NOTIFY, 1); NVDmaNext (pNv, NvDmaNotifier0); - + + NVDmaKickoff(pNv); + if ( destination_buffer == pNv->GARTScratch ) if (!NVNotifierWaitStatus(pScrn, pNv->Notifier0, 0, 0)) return FALSE; |