summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2009-05-05 01:05:50 +0200
committerLars-Peter Clausen <lars@metafoo.de>2009-05-05 01:05:50 +0200
commit20bb485f4a27c16b6faaf8a2ebc6067480889c50 (patch)
treec6bfbe0f8618ff63cf729539ae8de69b2ad19ee5
parent6778d354a73f177ecde305a2b8977ccfc352f2bd (diff)
Sync graphics pipeline before uploading/downloading data to/from the graphics
memory.
-rw-r--r--src/glamo-draw.c71
1 files changed, 37 insertions, 34 deletions
diff --git a/src/glamo-draw.c b/src/glamo-draw.c
index ac801df..c7be92b 100644
--- a/src/glamo-draw.c
+++ b/src/glamo-draw.c
@@ -496,24 +496,26 @@ GLAMOExaUploadToScreen(PixmapPtr pDst,
char *src,
int src_pitch)
{
- ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
- GlamoPtr pGlamo = GlamoPTR(pScrn);
- int bpp, i;
- CARD8 *dst_offset;
- int dst_pitch;
+ ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+ GlamoPtr pGlamo = GlamoPTR(pScrn);
+ int bpp, i;
+ CARD8 *dst_offset;
+ int dst_pitch;
- bpp = pDst->drawable.bitsPerPixel / 8;
- dst_pitch = exaGetPixmapPitch(pDst);
- dst_offset = pGlamo->exa->memoryBase + exaGetPixmapOffset(pDst)
- + x*bpp + y*dst_pitch;
+ exaWaitSync(pScrn->pScreen);
- for (i = 0; i < h; i++) {
- memcpy(dst_offset, src, w*bpp);
- dst_offset += dst_pitch;
- src += src_pitch;
- }
+ bpp = pDst->drawable.bitsPerPixel / 8;
+ dst_pitch = exaGetPixmapPitch(pDst);
+ dst_offset = pGlamo->exa->memoryBase + exaGetPixmapOffset(pDst)
+ + x*bpp + y*dst_pitch;
- return TRUE;
+ for (i = 0; i < h; i++) {
+ memcpy(dst_offset, src, w*bpp);
+ dst_offset += dst_pitch;
+ src += src_pitch;
+ }
+
+ return TRUE;
}
Bool
@@ -523,26 +525,27 @@ GLAMOExaDownloadFromScreen(PixmapPtr pSrc,
char *dst,
int dst_pitch)
{
- ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum];
- GlamoPtr pGlamo = GlamoPTR(pScrn);
- int bpp, i;
- CARD8 *dst_offset, *src;
- int src_pitch;
-
- bpp = pSrc->drawable.bitsPerPixel;
- bpp /= 8;
- src_pitch = exaGetPixmapPitch(pSrc);
- src = pGlamo->exa->memoryBase + exaGetPixmapOffset(pSrc) +
- x*bpp + y*src_pitch;
- dst_offset = (unsigned char*)dst;
-
- for (i = 0; i < h; i++) {
- memcpy(dst_offset, src, w*bpp);
- dst_offset += dst_pitch;
- src += src_pitch;
- }
+ ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum];
+ GlamoPtr pGlamo = GlamoPTR(pScrn);
+ int bpp, i;
+ CARD8 *dst_offset, *src;
+ int src_pitch;
+
+ exaWaitSync(pScrn->pScreen);
+
+ bpp = pSrc->drawable.bitsPerPixel / 8;
+ src_pitch = exaGetPixmapPitch(pSrc);
+ src = pGlamo->exa->memoryBase + exaGetPixmapOffset(pSrc) +
+ x*bpp + y*src_pitch;
+ dst_offset = (unsigned char*)dst;
+
+ for (i = 0; i < h; i++) {
+ memcpy(dst_offset, src, w*bpp);
+ dst_offset += dst_pitch;
+ src += src_pitch;
+ }
- return TRUE;
+ return TRUE;
}
void