summaryrefslogtreecommitdiff
path: root/src/i965_exa_render.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/i965_exa_render.c')
-rw-r--r--src/i965_exa_render.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/i965_exa_render.c b/src/i965_exa_render.c
index 68293cd2..dc3d7bfe 100644
--- a/src/i965_exa_render.c
+++ b/src/i965_exa_render.c
@@ -404,6 +404,9 @@ I965EXAPrepareComposite(int op, PicturePtr pSrcPicture,
binding_table_entries = 2; /* default no mask */
+ /* Wait for sync before we start setting up our new state */
+ i830WaitSync(pScrn);
+
/* Set up our layout of state in framebuffer. First the general state: */
next_offset = 0;
vs_offset = ALIGN(next_offset, 64);
@@ -1024,6 +1027,11 @@ I965EXAComposite(PixmapPtr pDst, int srcX, int srcY, int maskX, int maskY,
"dstX %d, dstY %d\n", srcX, srcY, srcXend, srcYend,
maskX, maskY, maskXend, maskYend, dstX, dstY);
+ /* Wait for any existing composite rectangles to land before we overwrite
+ * the VB with the next one.
+ */
+ i830WaitSync(pScrn);
+
i = 0;
/* rect (x2,y2) */
vb[i++] = (float)(srcXend) / pI830->scale_units[0][0];
@@ -1088,4 +1096,9 @@ I965EXAComposite(PixmapPtr pDst, int srcX, int srcY, int maskX, int maskY,
OUT_RING(0); /* Immediate data high DW */
ADVANCE_LP_RING();
}
+
+ /* Mark sync so we can wait for it before setting up the VB on the next
+ * rectangle.
+ */
+ i830MarkSync(pScrn);
}