summaryrefslogtreecommitdiff
path: root/src/mesa/pipe
diff options
context:
space:
mode:
authorJosé Fonseca <jrfonseca@tungstengraphics.com>2007-11-16 17:36:35 +0000
committerJosé Fonseca <jrfonseca@tungstengraphics.com>2007-11-17 15:39:36 +0000
commitdec60d33b2570cf2bdce72a00a1539ee93133f91 (patch)
treefa153cff2b98e93d56958faf165d99c523786241 /src/mesa/pipe
parent34a00276c7b2ee8ab88a56905352023f8a435a53 (diff)
Proper fence reference counting.
Diffstat (limited to 'src/mesa/pipe')
-rw-r--r--src/mesa/pipe/i915simple/i915_batch.h2
-rw-r--r--src/mesa/pipe/i915simple/i915_context.c2
-rw-r--r--src/mesa/pipe/i915simple/i915_winsys.h9
3 files changed, 11 insertions, 2 deletions
diff --git a/src/mesa/pipe/i915simple/i915_batch.h b/src/mesa/pipe/i915simple/i915_batch.h
index 99b03c37db..603d193f62 100644
--- a/src/mesa/pipe/i915simple/i915_batch.h
+++ b/src/mesa/pipe/i915simple/i915_batch.h
@@ -46,7 +46,7 @@
#define FLUSH_BATCH() do { \
if (0) i915_dump_batchbuffer( i915 ); \
- i915->last_fence = i915->winsys->batch_flush( i915->winsys ); \
+ i915->winsys->batch_flush( i915->winsys, &i915->last_fence ); \
i915->batch_start = NULL; \
i915->hardware_dirty = ~0; \
} while (0)
diff --git a/src/mesa/pipe/i915simple/i915_context.c b/src/mesa/pipe/i915simple/i915_context.c
index e43274dc66..f5d770ce0d 100644
--- a/src/mesa/pipe/i915simple/i915_context.c
+++ b/src/mesa/pipe/i915simple/i915_context.c
@@ -175,6 +175,8 @@ static void i915_destroy( struct pipe_context *pipe )
draw_destroy( i915->draw );
+ i915->winsys->fence_reference( i915->winsys, &i915->last_fence, NULL );
+
free( i915 );
}
diff --git a/src/mesa/pipe/i915simple/i915_winsys.h b/src/mesa/pipe/i915simple/i915_winsys.h
index 03457c1d61..386ed745d3 100644
--- a/src/mesa/pipe/i915simple/i915_winsys.h
+++ b/src/mesa/pipe/i915simple/i915_winsys.h
@@ -98,7 +98,14 @@ struct i915_winsys {
unsigned access_flags,
unsigned delta );
- struct pipe_fence *(*batch_flush)( struct i915_winsys *sws );
+ /**
+ * Flush the batch buffer.
+ *
+ * Fence argument must point to NULL or to a previous fence, and the caller
+ * must call fence_reference when done with the fence.
+ */
+ void (*batch_flush)( struct i915_winsys *sws,
+ struct pipe_fence **fence );
/* Fence