intel: Fix the client-side swapbuffers throttling.
authorEric Anholt <eric@anholt.net>
Tue, 9 Nov 2010 21:30:27 +0000 (13:30 -0800)
committerEric Anholt <eric@anholt.net>
Tue, 9 Nov 2010 21:30:27 +0000 (13:30 -0800)
We were asking for a wait to GTT read (all GPU rendering to it
complete), instead of asking for all GPU reading from it to be
complete.  Prevents swapbuffers-based apps from running away with
rendering, and produces a better input experience.

src/mesa/drivers/dri/intel/intel_context.c

index de4bcde20b61e68148a0a94338f962190c9e26c5..60c401b75bcba6d3e9ffacc156a3fa13e143486c 100644 (file)
@@ -470,7 +470,11 @@ intel_prepare_render(struct intel_context *intel)
     * so we just us the first batch we emitted after the last swap.
     */
    if (intel->need_throttle && intel->first_post_swapbuffers_batch) {
-      drm_intel_bo_wait_rendering(intel->first_post_swapbuffers_batch);
+      /* Can't use drm_intel_bo_wait_rendering, since that only waits
+       * for rendering *to* the buffer, not from it.
+       */
+      drm_intel_gem_bo_map_gtt(intel->first_post_swapbuffers_batch);
+      drm_intel_gem_bo_unmap_gtt(intel->first_post_swapbuffers_batch);
       drm_intel_bo_unreference(intel->first_post_swapbuffers_batch);
       intel->first_post_swapbuffers_batch = NULL;
       intel->need_throttle = GL_FALSE;