From 3fe055ec9218a8745d9a53f75f4abd4760fcce28 Mon Sep 17 00:00:00 2001 From: Brian Date: Wed, 7 Nov 2007 17:16:47 -0700 Subject: Remove winsys->wait_idle(), subsumed by pipe->flush(). Connect intel_i915_batch_finish() into i915_winsys, just like intel_i915_batch_flush(). Call i915_winsys->batch_finish() in response to pipe->flush(PIPE_FLUSH_WAIT). Now all the batchbuffer/fence code is in one place and a little cleaner. --- src/mesa/drivers/dri/intel_winsys/intel_winsys_i915.c | 8 ++++++++ src/mesa/drivers/dri/intel_winsys/intel_winsys_pipe.c | 15 --------------- src/mesa/pipe/i915simple/i915_flush.c | 2 +- src/mesa/pipe/i915simple/i915_winsys.h | 1 + src/mesa/pipe/p_winsys.h | 3 --- src/mesa/pipe/xlib/xm_winsys.c | 6 ------ 6 files changed, 10 insertions(+), 25 deletions(-) diff --git a/src/mesa/drivers/dri/intel_winsys/intel_winsys_i915.c b/src/mesa/drivers/dri/intel_winsys/intel_winsys_i915.c index d6ba6024b2..8e0eea4392 100644 --- a/src/mesa/drivers/dri/intel_winsys/intel_winsys_i915.c +++ b/src/mesa/drivers/dri/intel_winsys/intel_winsys_i915.c @@ -120,6 +120,13 @@ static void intel_i915_batch_flush( struct i915_winsys *sws ) } +static void intel_i915_batch_finish( struct i915_winsys *sws ) +{ + struct intel_context *intel = intel_i915_winsys(sws)->intel; + intel_batchbuffer_finish( intel->batch ); +} + + /** * Create i915 hardware rendering context. */ @@ -136,6 +143,7 @@ intel_create_i915simple( struct intel_context *intel, iws->winsys.batch_dword = intel_i915_batch_dword; iws->winsys.batch_reloc = intel_i915_batch_reloc; iws->winsys.batch_flush = intel_i915_batch_flush; + iws->winsys.batch_finish = intel_i915_batch_finish; iws->intel = intel; /* Create the i915simple context: diff --git a/src/mesa/drivers/dri/intel_winsys/intel_winsys_pipe.c b/src/mesa/drivers/dri/intel_winsys/intel_winsys_pipe.c index 16fff77af4..ae02f98a78 100644 --- a/src/mesa/drivers/dri/intel_winsys/intel_winsys_pipe.c +++ b/src/mesa/drivers/dri/intel_winsys/intel_winsys_pipe.c @@ -157,20 +157,6 @@ intel_user_buffer_create(struct pipe_winsys *winsys, void *ptr, unsigned bytes) } -static void -intel_wait_idle( struct pipe_winsys *winsys, void *context_private ) -{ - struct intel_context *intel = (struct intel_context *) context_private; - - if (intel->batch->last_fence) { - driFenceFinish(intel->batch->last_fence, - DRM_FENCE_TYPE_EXE | DRM_I915_FENCE_TYPE_RW, GL_FALSE); - driFenceUnReference(intel->batch->last_fence); - intel->batch->last_fence = NULL; - } -} - - /* The state tracker (should!) keep track of whether the fake * frontbuffer has been touched by any rendering since the last time * we copied its contents to the real frontbuffer. Our task is easy: @@ -311,7 +297,6 @@ intel_create_pipe_winsys( int fd ) iws->winsys.buffer_subdata = intel_buffer_subdata; iws->winsys.buffer_get_subdata = intel_buffer_get_subdata; iws->winsys.flush_frontbuffer = intel_flush_frontbuffer; - iws->winsys.wait_idle = intel_wait_idle; iws->winsys.printf = intel_printf; iws->winsys.get_name = intel_get_name; iws->winsys.region_alloc = intel_i915_region_alloc; diff --git a/src/mesa/pipe/i915simple/i915_flush.c b/src/mesa/pipe/i915simple/i915_flush.c index 5a80ed5e2f..51cf9960aa 100644 --- a/src/mesa/pipe/i915simple/i915_flush.c +++ b/src/mesa/pipe/i915simple/i915_flush.c @@ -69,7 +69,7 @@ static void i915_flush( struct pipe_context *pipe, FLUSH_BATCH(); if (flags & PIPE_FLUSH_WAIT) { - i915->pipe.winsys->wait_idle(i915->pipe.winsys, i915->pipe.private); + i915->winsys->batch_finish(i915->winsys); } } diff --git a/src/mesa/pipe/i915simple/i915_winsys.h b/src/mesa/pipe/i915simple/i915_winsys.h index cbb851a932..2c0f335d34 100644 --- a/src/mesa/pipe/i915simple/i915_winsys.h +++ b/src/mesa/pipe/i915simple/i915_winsys.h @@ -98,6 +98,7 @@ struct i915_winsys { unsigned delta ); void (*batch_flush)( struct i915_winsys *sws ); + void (*batch_finish)( struct i915_winsys *sws ); }; #define I915_BUFFER_ACCESS_WRITE 0x1 diff --git a/src/mesa/pipe/p_winsys.h b/src/mesa/pipe/p_winsys.h index ee10e30559..41d522e11e 100644 --- a/src/mesa/pipe/p_winsys.h +++ b/src/mesa/pipe/p_winsys.h @@ -63,9 +63,6 @@ struct pipe_winsys /** Returns name of this winsys interface */ const char *(*get_name)( struct pipe_winsys *sws ); - /** Wait for any buffered rendering to finish */ - void (*wait_idle)( struct pipe_winsys *sws, void *context_private ); - /** * Do any special operations to ensure frontbuffer contents are * displayed, eg copy fake frontbuffer. diff --git a/src/mesa/pipe/xlib/xm_winsys.c b/src/mesa/pipe/xlib/xm_winsys.c index ea6b06a93c..df90a807d4 100644 --- a/src/mesa/pipe/xlib/xm_winsys.c +++ b/src/mesa/pipe/xlib/xm_winsys.c @@ -167,11 +167,6 @@ xm_flush_frontbuffer(struct pipe_winsys *pws, */ } -static void -xm_wait_idle(struct pipe_winsys *pws, void *context_private) -{ - /* no-op */ -} static void xm_printf(struct pipe_winsys *pws, const char *fmtString, ...) @@ -343,7 +338,6 @@ xmesa_get_pipe_winsys(void) ws->surface_release = xm_surface_release; ws->flush_frontbuffer = xm_flush_frontbuffer; - ws->wait_idle = xm_wait_idle; ws->printf = xm_printf; ws->get_name = xm_get_name; } -- cgit v1.2.3