diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2010-12-03 02:05:05 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2010-12-03 14:05:30 +0000 |
commit | 55c5f1876e2329a938955967f5d45c814e50beb5 (patch) | |
tree | f2de8d31a03da940a9bd940db81bd788ae9f0dfb | |
parent | 3cc74044ce3546cc7dc2e918cbabbb41a77f4026 (diff) |
Wait on the current buffer to complete when running synchronously.
And remove the vestigal wait upon changing crtc as this is more properly
done in the kernel.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/intel.h | 1 | ||||
-rw-r--r-- | src/intel_batchbuffer.c | 32 | ||||
-rw-r--r-- | src/intel_batchbuffer.h | 1 | ||||
-rw-r--r-- | src/intel_display.c | 3 |
4 files changed, 3 insertions, 34 deletions
diff --git a/src/intel.h b/src/intel.h index 57ce2cfd..97fc497e 100644 --- a/src/intel.h +++ b/src/intel.h @@ -316,7 +316,6 @@ typedef struct intel_screen_private { /** Number of bytes to be emitted in the current BEGIN_BATCH. */ uint32_t batch_emitting; dri_bo *batch_bo; - dri_bo *last_batch_bo; /** Whether we're in a section of code that can't tolerate flushing */ Bool in_batch_atomic; /** Ending batch_used that was verified by intel_start_batch_atomic() */ diff --git a/src/intel_batchbuffer.c b/src/intel_batchbuffer.c index 378a78c7..8c7ab3d8 100644 --- a/src/intel_batchbuffer.c +++ b/src/intel_batchbuffer.c @@ -102,11 +102,6 @@ void intel_batch_teardown(ScrnInfoPtr scrn) intel->batch_bo = NULL; } - if (intel->last_batch_bo != NULL) { - dri_bo_unreference(intel->last_batch_bo); - intel->last_batch_bo = NULL; - } - if (intel->vertex_bo) { dri_bo_unreference(intel->vertex_bo); intel->vertex_bo = NULL; @@ -267,39 +262,18 @@ void intel_batch_submit(ScrnInfoPtr scrn, int flush) free(entry); } - /* Save a ref to the last batch emitted, which we use for syncing - * in debug code. - */ - dri_bo_unreference(intel->last_batch_bo); - intel->last_batch_bo = intel->batch_bo; - intel->batch_bo = NULL; + if (intel->debug_flush & DEBUG_FLUSH_WAIT) + drm_intel_bo_wait_rendering(intel->batch_bo); + dri_bo_unreference(intel->batch_bo); intel_next_batch(scrn); - if (intel->debug_flush & DEBUG_FLUSH_WAIT) - intel_batch_wait_last(scrn); - if (intel->batch_commit_notify) intel->batch_commit_notify(intel); intel->current_batch = 0; } -/** Waits on the last emitted batchbuffer to be completed. */ -void intel_batch_wait_last(ScrnInfoPtr scrn) -{ - intel_screen_private *intel = intel_get_screen_private(scrn); - - if (intel->last_batch_bo == NULL) - return; - - /* Map it CPU write, which guarantees it's done. This is a completely - * non performance path, so we don't need anything better. - */ - drm_intel_gem_bo_map_gtt(intel->last_batch_bo); - drm_intel_gem_bo_unmap_gtt(intel->last_batch_bo); -} - void intel_debug_flush(ScrnInfoPtr scrn) { intel_screen_private *intel = intel_get_screen_private(scrn); diff --git a/src/intel_batchbuffer.h b/src/intel_batchbuffer.h index 5b9ff5ed..3f783b00 100644 --- a/src/intel_batchbuffer.h +++ b/src/intel_batchbuffer.h @@ -38,7 +38,6 @@ void intel_batch_teardown(ScrnInfoPtr scrn); void intel_batch_emit_flush(ScrnInfoPtr scrn); void intel_batch_do_flush(ScrnInfoPtr scrn); void intel_batch_submit(ScrnInfoPtr scrn, int flush); -void intel_batch_wait_last(ScrnInfoPtr scrn); static inline int intel_batch_space(intel_screen_private *intel) { diff --git a/src/intel_display.c b/src/intel_display.c index 10bc5fd8..b5ccfe9b 100644 --- a/src/intel_display.c +++ b/src/intel_display.c @@ -362,9 +362,6 @@ intel_crtc_apply(xf86CrtcPtr crtc) crtc->gamma_blue, crtc->gamma_size); #endif - /* drain any pending waits on the current framebuffer */ - intel_batch_wait_last(crtc->scrn); - x = crtc->x; y = crtc->y; fb_id = mode->fb_id; |