commit c4ac230f486cc31fdb303777e23049910c92df74 Author: Michel Dänzer Date: Wed Oct 22 18:41:07 2014 +0900 Add some debugging output about why page flipping isn't possible diff --git a/src/radeon_dri2.c b/src/radeon_dri2.c index 93ed950..2d3740c 100644 --- a/src/radeon_dri2.c +++ b/src/radeon_dri2.c @@ -717,25 +717,40 @@ can_exchange(ScrnInfoPtr pScrn, DrawablePtr draw, for (i = 0; i < xf86_config->num_crtc; i++) { xf86CrtcPtr crtc = xf86_config->crtc[i]; if (crtc->enabled && crtc->rotatedData) + ErrorF("Can't exchange because CRTC %d is rotated\n", i); return FALSE; } - if (!update_front(draw, front)) + if (!update_front(draw, front)) { + ErrorF("Can't exchange because update_front failed\n"); return FALSE; + } front_pixmap = front_priv->pixmap; - if (front_pixmap->drawable.width != back_pixmap->drawable.width) + if (front_pixmap->drawable.width != back_pixmap->drawable.width) { + ErrorF("Can't exchange because pixmap widths don't match: %u != %u\n", + front_pixmap->drawable.width, back_pixmap->drawable.width); return FALSE; + } - if (front_pixmap->drawable.height != back_pixmap->drawable.height) + if (front_pixmap->drawable.height != back_pixmap->drawable.height) { + ErrorF("Can't exchange because pixmap heights don't match: %u != %u\n", + front_pixmap->drawable.height, back_pixmap->drawable.height); return FALSE; + } - if (front_pixmap->drawable.bitsPerPixel != back_pixmap->drawable.bitsPerPixel) + if (front_pixmap->drawable.bitsPerPixel != back_pixmap->drawable.bitsPerPixel) { + ErrorF("Can't exchange because pixmap bpps don't match: %u != %u\n", + front_pixmap->drawable.bitsPerPixel, back_pixmap->drawable.bitsPerPixel); return FALSE; + } - if (front_pixmap->devKind != back_pixmap->devKind) + if (front_pixmap->devKind != back_pixmap->devKind) { + ErrorF("Can't exchange because pixmap pitches don't match: %u != %u\n", + front_pixmap->devKind, back_pixmap->devKind); return FALSE; + } return TRUE; } @@ -744,11 +759,32 @@ static Bool can_flip(ScrnInfoPtr pScrn, DrawablePtr draw, DRI2BufferPtr front, DRI2BufferPtr back) { - return draw->type == DRAWABLE_WINDOW && - RADEONPTR(pScrn)->allowPageFlip && - pScrn->vtSema && - DRI2CanFlip(draw) && - can_exchange(pScrn, draw, front, back); + if (draw->type != DRAWABLE_WINDOW) { + ErrorF("Can't flip because drawable isn't a window\n"); + return FALSE; + } + + if (!RADEONPTR(pScrn)->allowPageFlip) { + ErrorF("Can't flip because Option \"EnablePageFlip\" is disabled\n"); + return FALSE; + } + + if (!pScrn->vtSema) { + ErrorF("Can't flip because pScrn->vtSema is FALSE\n"); + return FALSE; + } + + if (!DRI2CanFlip(draw)) { + ErrorF("Can't flip because DRI2CanFlip failed\n"); + return FALSE; + } + + if (!can_exchange(pScrn, draw, front, back)) { + ErrorF("Can't flip because can_exchange failed\n"); + return FALSE; + } + + return TRUE; } static void