Mesa (master): Revert "intel: Use the new DRI2 flush invalidate entrypoint to signal frame done."

Eric Anholt anholt at kemper.freedesktop.org
Tue Jan 26 06:59:05 UTC 2010


Module: Mesa
Branch: master
Commit: c7fc9bfb2207638a479ddaff3ad108ffd9cd294a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c7fc9bfb2207638a479ddaff3ad108ffd9cd294a

Author: Eric Anholt <eric at anholt.net>
Date:   Mon Jan 25 14:48:57 2010 -0800

Revert "intel: Use the new DRI2 flush invalidate entrypoint to signal frame done."

This reverts commit 7d4e674b212c9dc6408c13913a399bd4a2b9a1e3.  It broke
throttling in the non-new-DRI2 case.

---

 src/mesa/drivers/dri/intel/intel_context.c |   20 ++++++++++++++++++++
 src/mesa/drivers/dri/intel/intel_screen.c  |   21 ---------------------
 2 files changed, 20 insertions(+), 21 deletions(-)

diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c
index 5f2a473..cac9b7e 100644
--- a/src/mesa/drivers/dri/intel/intel_context.c
+++ b/src/mesa/drivers/dri/intel/intel_context.c
@@ -505,7 +505,27 @@ intelFlush(GLcontext * ctx)
 static void
 intel_glFlush(GLcontext *ctx)
 {
+   struct intel_context *intel = intel_context(ctx);
+
    intel_flush(ctx, GL_TRUE);
+
+   /* We're using glFlush as an indicator that a frame is done, which is
+    * what DRI2 does before calling SwapBuffers (and means we should catch
+    * people doing front-buffer rendering, as well)..
+    *
+    * Wait for the swapbuffers before the one we just emitted, so we don't
+    * get too many swaps outstanding for apps that are GPU-heavy but not
+    * CPU-heavy.
+    *
+    * Unfortunately, we don't have a handle to the batch containing the swap,
+    * and getting our hands on that doesn't seem worth it, so we just us the
+    * first batch we emitted after the last swap.
+    */
+   if (intel->first_post_swapbuffers_batch != NULL) {
+      drm_intel_bo_wait_rendering(intel->first_post_swapbuffers_batch);
+      drm_intel_bo_unreference(intel->first_post_swapbuffers_batch);
+      intel->first_post_swapbuffers_batch = NULL;
+   }
 }
 
 void
diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c
index fe50416..a98600b 100644
--- a/src/mesa/drivers/dri/intel/intel_screen.c
+++ b/src/mesa/drivers/dri/intel/intel_screen.c
@@ -126,29 +126,8 @@ intelDRI2Flush(__DRIdrawable *drawable)
 static void
 intelDRI2FlushInvalidate(__DRIdrawable *drawable)
 {
-   struct intel_context *intel = drawable->driContextPriv->driverPrivate;
-
    intelDRI2Flush(drawable);
    drawable->validBuffers = GL_FALSE;
-
-   /* We're using FlushInvalidate as an indicator that a frame is
-    * done.  It's only called immediately after SwapBuffers, so it
-    * won't affect front-buffer rendering or applications explicitly
-    * managing swap regions using MESA_copy_buffer.
-    *
-    * Wait for the swapbuffers before the one we just emitted, so we don't
-    * get too many swaps outstanding for apps that are GPU-heavy but not
-    * CPU-heavy.
-    *
-    * Unfortunately, we don't have a handle to the batch containing the swap,
-    * and getting our hands on that doesn't seem worth it, so we just use the
-    * first batch we emitted after the last swap.
-    */
-   if (intel->first_post_swapbuffers_batch != NULL) {
-      drm_intel_bo_wait_rendering(intel->first_post_swapbuffers_batch);
-      drm_intel_bo_unreference(intel->first_post_swapbuffers_batch);
-      intel->first_post_swapbuffers_batch = NULL;
-   }
 }
 
 static const struct __DRI2flushExtensionRec intelFlushExtension = {




More information about the mesa-commit mailing list