@@ -79,6 +79,21 @@ typedef struct {
unsigned int attachment;
} I830DRI2BufferPrivateRec, *I830DRI2BufferPrivatePtr;
+/* If the drawable is one that might have GLX_texture_from_pixmap done
+ * to it, flush rendering before handing a reference to it back to
+ * GLX.
+ */
+static void
+do_tfp_flush(DrawablePtr drawable)
+{
+ if (drawable->type == DRAWABLE_PIXMAP) {
+ ScreenPtr screen = drawable->pScreen;
+ ScrnInfoPtr scrn = xf86Screens[screen->myNum];
+
+ intel_batch_submit(scrn);
+ }
+}
+
#ifndef USE_DRI2_1_1_0
static DRI2BufferPtr
I830DRI2CreateBuffers(DrawablePtr drawable, unsigned int *attachments,
@@ -105,6 +120,7 @@ I830DRI2CreateBuffers(DrawablePtr drawable, unsigned int *attachments,
pDepthPixmap = NULL;
for (i = 0; i < count; i++) {
if (attachments[i] == DRI2BufferFrontLeft) {
+ do_tfp_flush(drawable);
pixmap = get_drawable_pixmap(drawable);
pixmap->refcnt++;
} else if (attachments[i] == DRI2BufferStencil && pDepthPixmap) {
@@ -184,6 +200,7 @@ I830DRI2CreateBuffer(DrawablePtr drawable, unsigned int attachment,
}
if (attachment == DRI2BufferFrontLeft) {
+ do_tfp_flush(drawable);
pixmap = get_drawable_pixmap(drawable);
pixmap->refcnt++;
} else {