Mesa (master): glx/dri3: Implement the flush_swapbuffers method
Thomas Hellstrom
thomash at kemper.freedesktop.org
Thu Aug 3 06:05:22 UTC 2017
Module: Mesa
Branch: master
Commit: ad5136ac826a9e34d1f789398016a018c42a27ca
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ad5136ac826a9e34d1f789398016a018c42a27ca
Author: Thomas Hellstrom <thellstrom at vmware.com>
Date: Wed Aug 2 13:53:54 2017 +0200
glx/dri3: Implement the flush_swapbuffers method
Provide a dri3 implementation for the image loader extension method.
Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
Reviewed-by: Sinclair Yeh <syeh at vmware.com>
Reviewed-by: Emil Velikov <emil.velikov at collabora.com>
---
src/glx/dri3_glx.c | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c
index cc110370d3..64c0b9e7b9 100644
--- a/src/glx/dri3_glx.c
+++ b/src/glx/dri3_glx.c
@@ -495,6 +495,33 @@ dri3_flush_front_buffer(__DRIdrawable *driDrawable, void *loaderPrivate)
loader_dri3_wait_gl(draw);
}
+/**
+ * Make sure all pending swapbuffers have been submitted to hardware
+ *
+ * \param driDrawable[in] Pointer to the dri drawable whose swaps we are
+ * flushing.
+ * \param loaderPrivate[in] Pointer to the corresponding struct
+ * loader_dri_drawable.
+ */
+static void
+dri3_flush_swap_buffers(__DRIdrawable *driDrawable, void *loaderPrivate)
+{
+ struct loader_dri3_drawable *draw = loaderPrivate;
+ struct dri3_drawable *pdraw = loader_drawable_to_dri3_drawable(draw);
+ struct dri3_screen *psc;
+
+ if (!pdraw)
+ return;
+
+ if (!pdraw->base.psc)
+ return;
+
+ psc = (struct dri3_screen *) pdraw->base.psc;
+
+ (void) __glXInitialize(psc->base.dpy);
+ loader_dri3_swapbuffer_barrier(draw);
+}
+
static void
dri_set_background_context(void *loaderPrivate)
{
@@ -514,10 +541,11 @@ dri_is_thread_safe(void *loaderPrivate)
/* The image loader extension record for DRI3
*/
static const __DRIimageLoaderExtension imageLoaderExtension = {
- .base = { __DRI_IMAGE_LOADER, 1 },
+ .base = { __DRI_IMAGE_LOADER, 3 },
.getBuffers = loader_dri3_get_buffers,
.flushFrontBuffer = dri3_flush_front_buffer,
+ .flushSwapBuffers = dri3_flush_swap_buffers,
};
const __DRIuseInvalidateExtension dri3UseInvalidate = {
More information about the mesa-commit
mailing list