summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorJakob Bornecrantz <[email protected]>2008-04-08 17:24:33 +0200
committerJakob Bornecrantz <[email protected]>2008-04-08 17:24:33 +0200
commit1d43a8b25513866d67b5b16ae1945d6e9d95743d (patch)
tree6bb0d0a238e5b8f522992629ac110ec798fb036f /src/gallium
parent2dd6022e65972b0706011734b68da4e9177b05c3 (diff)
i915: Fixed fence related problems
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/winsys/dri/intel/intel_batchbuffer.c4
-rw-r--r--src/gallium/winsys/dri/intel/intel_winsys_i915.c18
2 files changed, 13 insertions, 9 deletions
diff --git a/src/gallium/winsys/dri/intel/intel_batchbuffer.c b/src/gallium/winsys/dri/intel/intel_batchbuffer.c
index 05223bf700d..3a8ff5a4eba 100644
--- a/src/gallium/winsys/dri/intel/intel_batchbuffer.c
+++ b/src/gallium/winsys/dri/intel/intel_batchbuffer.c
@@ -386,8 +386,10 @@ intel_batchbuffer_flush(struct intel_batchbuffer *batch)
GLboolean was_locked = intel->locked;
struct _DriFenceObject *fence;
- if (used == 0)
+ if (used == 0) {
+ driFenceReference(batch->last_fence);
return batch->last_fence;
+ }
/* Add the MI_BATCH_BUFFER_END. Always add an MI_FLUSH - this is a
* performance drain that we would like to avoid.
diff --git a/src/gallium/winsys/dri/intel/intel_winsys_i915.c b/src/gallium/winsys/dri/intel/intel_winsys_i915.c
index ae3e9654d32..a35825d36ab 100644
--- a/src/gallium/winsys/dri/intel/intel_winsys_i915.c
+++ b/src/gallium/winsys/dri/intel/intel_winsys_i915.c
@@ -113,10 +113,10 @@ static void intel_i915_batch_reloc( struct i915_winsys *sws,
delta );
#else /* new */
intel_offset_relocation( intel->batch,
- delta,
- dri_bo( buf ),
- flags,
- mask );
+ delta,
+ dri_bo( buf ),
+ flags,
+ mask );
#endif
}
@@ -132,9 +132,13 @@ static void intel_i915_batch_flush( struct i915_winsys *sws,
struct pipe_fence_handle *pipe;
} fu;
+ if (fence)
+ assert(!*fence);
+
fu.dri = intel_batchbuffer_flush( intel->batch );
- if (!fu.dri && fence) {
+ if (!fu.dri) {
+ assert(0);
*fence = NULL;
return;
}
@@ -143,11 +147,9 @@ static void intel_i915_batch_flush( struct i915_winsys *sws,
if (fence)
*fence = fu.pipe;
else
- iws->pws->fence_reference(iws->pws, &fu.dri, NULL);
+ driFenceUnReference(&fu.dri);
}
-
-// if (0) intel_i915_batch_wait_idle( sws );
}