i915: Fixed fence related problems

This commit is contained in:
Jakob Bornecrantz
2008-04-08 17:24:33 +02:00
parent 2dd6022e65
commit 1d43a8b255
2 changed files with 13 additions and 9 deletions
@@ -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.
@@ -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 );
}