diff options
-rw-r--r-- | src/i830_dri.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/i830_dri.c b/src/i830_dri.c index 61abd36f..5d510733 100644 --- a/src/i830_dri.c +++ b/src/i830_dri.c @@ -72,6 +72,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); + } +} + #if DRI2INFOREC_VERSION < 2 static DRI2BufferPtr @@ -99,6 +114,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) { @@ -197,6 +213,7 @@ I830DRI2CreateBuffer(DrawablePtr drawable, unsigned int attachment, } if (attachment == DRI2BufferFrontLeft) { + do_tfp_flush(drawable); pixmap = get_drawable_pixmap(drawable); pixmap->refcnt++; } else { |