xf86-video-ati: Branch 'master' - 2 commits

Michel Dänzer daenzer at kemper.freedesktop.org
Wed Jun 6 03:35:39 PDT 2012


 src/drmmode_display.c |    7 ++++---
 src/drmmode_display.h |    1 +
 src/radeon_dri2.c     |    1 +
 src/radeon_video.c    |   16 ++++++++++++++++
 4 files changed, 22 insertions(+), 3 deletions(-)

New commits:
commit 77a056c1725c9c44a328ed324687bdf35144e9e2
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed Jun 6 12:29:37 2012 +0200

    Don't page-flip or wait on a CRTC while we're VT-switched away.
    
    We don't know what the CRTC state is.
    
    Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>

diff --git a/src/radeon_dri2.c b/src/radeon_dri2.c
index 7a9b625..43514b7 100644
--- a/src/radeon_dri2.c
+++ b/src/radeon_dri2.c
@@ -744,6 +744,7 @@ can_flip(ScrnInfoPtr pScrn, DrawablePtr draw,
 {
     return draw->type == DRAWABLE_WINDOW &&
 	   RADEONPTR(pScrn)->allowPageFlip &&
+	   pScrn->vtSema &&
 	   DRI2CanFlip(draw) &&
 	   can_exchange(pScrn, draw, front, back);
 }
diff --git a/src/radeon_video.c b/src/radeon_video.c
index d602735..01703a0 100644
--- a/src/radeon_video.c
+++ b/src/radeon_video.c
@@ -153,6 +153,9 @@ radeon_pick_best_crtc(ScrnInfoPtr pScrn,
     RROutputPtr         primary_output = NULL;
     xf86CrtcPtr         best_crtc = NULL, primary_crtc = NULL;
 
+    if (!pScrn->vtSema)
+	return NULL;
+
     box.x1 = x1;
     box.x2 = x2;
     box.y1 = y1;
commit 1d9f1eb7e65c57c52759ccbfa51e8bdd5a10acac
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed Jun 6 12:16:08 2012 +0200

    Don't wait on a CRTC which has been disabled via DPMS (bug #49761).
    
    Fixes https://bugs.freedesktop.org/show_bug.cgi?id=49761 .
    
    Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index fad13db..3a08d8a 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -179,11 +179,12 @@ drmmode_ConvertToKMode(ScrnInfoPtr	scrn,
 static void
 drmmode_crtc_dpms(xf86CrtcPtr crtc, int mode)
 {
-#if 0
-	xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(crtc->scrn);
-//	drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
+	drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
 //	drmmode_ptr drmmode = drmmode_crtc->drmmode;
 
+	drmmode_crtc->dpms_mode = mode;
+
+#if 0
 	/* bonghits in the randr 1.2 - uses dpms to disable crtc - bad buzz */
 	if (mode == DPMSModeOff) {
 //		drmModeSetCrtc(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id,
diff --git a/src/drmmode_display.h b/src/drmmode_display.h
index 44fac16..04a8688 100644
--- a/src/drmmode_display.h
+++ b/src/drmmode_display.h
@@ -73,6 +73,7 @@ typedef struct {
     struct radeon_bo *cursor_bo;
     struct radeon_bo *rotate_bo;
     unsigned rotate_fb_id;
+    int dpms_mode;
     uint16_t lut_r[256], lut_g[256], lut_b[256];
 } drmmode_crtc_private_rec, *drmmode_crtc_private_ptr;
 
diff --git a/src/radeon_video.c b/src/radeon_video.c
index 4eb01dc..d602735 100644
--- a/src/radeon_video.c
+++ b/src/radeon_video.c
@@ -19,6 +19,14 @@
 #include "atipciids.h"
 #include "xf86fbman.h"
 
+/* DPMS */
+#ifdef HAVE_XEXTPROTO_71
+#include <X11/extensions/dpmsconst.h>
+#else
+#define DPMS_SERVER
+#include <X11/extensions/dpms.h>
+#endif
+
 #include <X11/extensions/Xv.h>
 #include "fourcc.h"
 
@@ -160,6 +168,11 @@ radeon_pick_best_crtc(ScrnInfoPtr pScrn,
 
     for (c = 0; c < xf86_config->num_crtc; c++) {
 	xf86CrtcPtr crtc = xf86_config->crtc[c];
+	drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
+
+	if (drmmode_crtc->dpms_mode == DPMSModeOff)
+	    continue;
+
 	radeon_crtc_box(crtc, &crtc_box);
 	radeon_box_intersect(&cover_box, &crtc_box, &box);
 	coverage = radeon_box_area(&cover_box);


More information about the xorg-commit mailing list