summaryrefslogtreecommitdiff
path: root/src/mesa
diff options
context:
space:
mode:
authorMichel Dänzer <michel@tungstengraphics.com>2007-03-09 17:41:04 +0100
committerMichel Dänzer <michel@tungstengraphics.com>2007-03-09 17:42:55 +0100
commit81536789d2d2d92c687e9037cbb6f86b633ef839 (patch)
treee2f342b14e43410b5a04e1bafce5af7e2de599a3 /src/mesa
parentfb3410297bb21a0eeda4d32698c2612f4e3cf40e (diff)
i915tex: Do not wait for pending flips on both pipes at the same time.
The MI_WAIT_FOR_EVENT instruction does not support waiting for several events at once, so this should fix the lockups with page flipping when both pipes are enabled.
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/drivers/dri/i915tex/intel_buffers.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/src/mesa/drivers/dri/i915tex/intel_buffers.c b/src/mesa/drivers/dri/i915tex/intel_buffers.c
index 9f1b25ef38..35236edc0c 100644
--- a/src/mesa/drivers/dri/i915tex/intel_buffers.c
+++ b/src/mesa/drivers/dri/i915tex/intel_buffers.c
@@ -662,20 +662,15 @@ intel_wait_flips(struct intel_context *intel, GLuint batch_flags)
BUFFER_BACK_LEFT);
if (intel_fb->Base.Name == 0 && intel_rb->pf_pending == intel_fb->pf_seq) {
- GLuint mi_wait = MI_WAIT_FOR_EVENT;
GLint pf_pipes = intel_fb->pf_pipes;
BATCH_LOCALS;
- if (pf_pipes & 0x1)
- mi_wait |= MI_WAIT_FOR_PLANE_A_FLIP;
-
- if (pf_pipes & 0x2)
- mi_wait |= MI_WAIT_FOR_PLANE_B_FLIP;
-
/* Wait for pending flips to take effect */
BEGIN_BATCH(2, batch_flags);
- OUT_BATCH(mi_wait);
- OUT_BATCH(0);
+ OUT_BATCH(pf_pipes & 0x1 ? (MI_WAIT_FOR_EVENT | MI_WAIT_FOR_PLANE_A_FLIP)
+ : 0);
+ OUT_BATCH(pf_pipes & 0x2 ? (MI_WAIT_FOR_EVENT | MI_WAIT_FOR_PLANE_B_FLIP)
+ : 0);
ADVANCE_BATCH();
intel_rb->pf_pending--;