On 05/06/2013 05:39 PM, Eric Anholt wrote:
Ever since fake front was introduced in
63b51b5cf17ddde09b72a2811296f37b9a4c5ad2, we were skipping the XSync() in
the non-fake-front path, so compositors like Firefox's GL canvas were
having to manually put it in outside of glXWaitX().

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=52930

Both patches are

Reviewed-by: Ian Romanick <ian.d.roman...@intel.com>

and

NOTE: This is a candidate for the stable branches.

It might be worth adding the bit about pixmaps from the second commit message to this one as well. I was unsure how you'd hit this problem until I read the second patch.

---
  src/glx/dri2_glx.c | 21 +++++++++++++++++----
  1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c
index 7ce5775..3cdd249 100644
--- a/src/glx/dri2_glx.c
+++ b/src/glx/dri2_glx.c
@@ -639,10 +639,23 @@ dri2_wait_x(struct glx_context *gc)
     struct dri2_drawable *priv = (struct dri2_drawable *)
        GetGLXDRIDrawable(gc->currentDpy, gc->currentDrawable);

-   if (priv == NULL || !priv->have_fake_front)
-      return;
-
-   dri2_copy_drawable(priv, DRI2BufferFakeFrontLeft, DRI2BufferFrontLeft);
+   if (priv != NULL && priv->have_fake_front) {
+      /* Ask the server to update our copy of the front buffer from the real
+       * front buffer.  This will round-trip with the server, so we can skip
+       * the XSync().
+       */
+      dri2_copy_drawable(priv, DRI2BufferFakeFrontLeft, DRI2BufferFrontLeft);
+   } else {
+      /* From the GLX 1.4 spec, page 33:
+       *
+       *     "X rendering calls made prior to glXWaitX are guaranteed to be
+       *      executed before OpenGL rendering calls made after
+       *      glXWaitX. While the same result can be achieved using XSync,
+       *      glXWaitX does not require a round trip to the server, and may
+       *      therefore be more efficient."
+       */
+      XSync(gc->currentDpy, False);
+   }
  }

  static void


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to