summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2009-05-15 23:21:05 -0700
committerEric Anholt <eric@anholt.net>2009-05-18 10:44:34 -0700
commit34660fd2df5d61b77ed7041d32ac29053fc94f5a (patch)
tree6e012632db4ac531e7b514d7e1d6d1b46e7a8406
parent87332a7cc16af82aa47e07fbf90da3635b071dbf (diff)
Only sync XV to vblank when drawing to the frontbuffer.
This fixes emitting syncs to random pipes with boxes bigger than that pipe's vertical, leading to GPU hangs. Bug #21738
-rw-r--r--src/i830_video.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/i830_video.c b/src/i830_video.c
index 1c3a5b7c..6fec8ff5 100644
--- a/src/i830_video.c
+++ b/src/i830_video.c
@@ -2495,13 +2495,15 @@ I830PutImage(ScrnInfoPtr pScrn,
if (sync) {
BoxPtr box;
int y1, y2;
- int pipe, event, load_scan_lines_pipe;
-
- if (pI830->use_drm_mode)
- pipe = drmmode_get_pipe_from_crtc_id(pI830->bufmgr, crtc);
- else {
- I830CrtcPrivatePtr intel_crtc = crtc->driver_private;
- pipe = intel_crtc->pipe;
+ int pipe = -1, event, load_scan_lines_pipe;
+
+ if (pPixmap != pScreen->GetScreenPixmap(pScreen)) {
+ if (pI830->use_drm_mode)
+ pipe = drmmode_get_pipe_from_crtc_id(pI830->bufmgr, crtc);
+ else {
+ I830CrtcPrivatePtr intel_crtc = crtc->driver_private;
+ pipe = intel_crtc->pipe;
+ }
}
if (pipe >= 0) {