summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@linux.ie>2008-07-11 07:28:55 +1000
committerDave Airlie <airlied@linux.ie>2008-07-11 07:28:55 +1000
commitb52398571b7f5c537c2f5e1c87f1b8bdf3d8ea9b (patch)
tree702a62d9d6eefe21e73a5b1cd86a9bfca29ce625
parentac05da56ec1dd14876dbf3fde37aa951b9215f5b (diff)
intel: fix batch flushing problem with cliprects handling.
pointed out and debugged by stringfellow on #dri-devel
-rw-r--r--src/mesa/drivers/dri/intel/intel_batchbuffer.h4
-rw-r--r--src/mesa/drivers/dri/intel/intel_blit.c5
2 files changed, 7 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_batchbuffer.h b/src/mesa/drivers/dri/intel/intel_batchbuffer.h
index 2d636df2ce..0da602010e 100644
--- a/src/mesa/drivers/dri/intel/intel_batchbuffer.h
+++ b/src/mesa/drivers/dri/intel/intel_batchbuffer.h
@@ -118,8 +118,10 @@ intel_batchbuffer_require_space(struct intel_batchbuffer *batch,
if (batch->cliprect_mode == IGNORE_CLIPRECTS) {
batch->cliprect_mode = cliprect_mode;
} else {
- if (batch->cliprect_mode != cliprect_mode)
+ if (batch->cliprect_mode != cliprect_mode) {
intel_batchbuffer_flush(batch);
+ batch->cliprect_mode = cliprect_mode;
+ }
}
}
}
diff --git a/src/mesa/drivers/dri/intel/intel_blit.c b/src/mesa/drivers/dri/intel/intel_blit.c
index d9dbbb2482..25ac609f13 100644
--- a/src/mesa/drivers/dri/intel/intel_blit.c
+++ b/src/mesa/drivers/dri/intel/intel_blit.c
@@ -123,7 +123,8 @@ intelCopyBuffer(const __DRIdrawablePrivate * dPriv,
dst_pitch /= 4;
}
#endif
-
+ /* do space/cliprects check before going any further */
+ intel_batchbuffer_require_space(intel->batch, 8 * 4, REFERENCES_CLIPRECTS);
again:
ret = dri_bufmgr_check_aperture_space(dst->buffer);
ret |= dri_bufmgr_check_aperture_space(src->buffer);
@@ -278,6 +279,8 @@ intelEmitCopyBlit(struct intel_context *intel,
int ret;
BATCH_LOCALS;
+ /* do space/cliprects check before going any further */
+ intel_batchbuffer_require_space(intel->batch, 8 * 4, NO_LOOP_CLIPRECTS);
again:
ret = dri_bufmgr_check_aperture_space(dst_buffer);
ret |= dri_bufmgr_check_aperture_space(src_buffer);