xf86-video-intel: 2 commits - src/sna/sna_display.c

Chris Wilson ickle at kemper.freedesktop.org
Tue Jun 14 00:24:21 PDT 2011


 src/sna/sna_display.c |   39 +++++++++++++++++++++++++--------------
 1 file changed, 25 insertions(+), 14 deletions(-)

New commits:
commit 2f675cf402a6d158448a9300779829a10ca991fd
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Jun 14 08:13:58 2011 +0100

    sna: Split zaphod across the crtcs
    
    Since we have no global resource allocator for zaphod mode, that's what
    RandR-1.4 solves, we have to further constrain zaphod mode to only use
    one crtc per screen. This also means that you must match the output
    restrictions within the Screen definitions, noting that the crtc pipe id
    corresponds with the screen number.
    
    Reportede-by: Phillp Haddad <phillip.haddad at gmail.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 170f692..8587922 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -345,7 +345,7 @@ sna_crtc_apply(xf86CrtcPtr crtc)
 	struct sna *sna = to_sna(scrn);
 	struct sna_crtc *sna_crtc = crtc->driver_private;
 	struct sna_mode *mode = &sna->mode;
-	xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(crtc->scrn);
+	xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(crtc->scrn);
 	uint32_t output_ids[16];
 	int output_count = 0;
 	int fb_id, x, y;
@@ -467,7 +467,7 @@ sna_crtc_dpms(xf86CrtcPtr crtc, int mode)
 
 static Bool
 sna_crtc_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
-			  Rotation rotation, int x, int y)
+			Rotation rotation, int x, int y)
 {
 	ScrnInfoPtr scrn = crtc->scrn;
 	struct sna *sna = to_sna(scrn);
@@ -695,12 +695,6 @@ sna_crtc_init(ScrnInfoPtr scrn, struct sna_mode *mode, int num)
 	if (sna_crtc == NULL)
 		return;
 
-	crtc = xf86CrtcCreate(scrn, &sna_crtc_funcs);
-	if (crtc == NULL) {
-		free(sna_crtc);
-		return;
-	}
-
 	sna_crtc->mode_crtc = drmModeGetCrtc(sna->kgem.fd,
 					     mode->mode_res->crtcs[num]);
 	get_pipe.pipe = 0;
@@ -710,6 +704,18 @@ sna_crtc_init(ScrnInfoPtr scrn, struct sna_mode *mode, int num)
 		 &get_pipe);
 	sna_crtc->pipe = get_pipe.pipe;
 
+	if (xf86IsEntityShared(scrn->entityList[0]) &&
+	    scrn->confScreen->device->screen != sna_crtc->pipe) {
+		free(sna_crtc);
+		return;
+	}
+
+	crtc = xf86CrtcCreate(scrn, &sna_crtc_funcs);
+	if (crtc == NULL) {
+		free(sna_crtc);
+		return;
+	}
+
 	crtc->driver_private = sna_crtc;
 
 	sna_crtc->cursor = gem_create(sna->kgem.fd, 64*64*4);
@@ -717,6 +723,9 @@ sna_crtc_init(ScrnInfoPtr scrn, struct sna_mode *mode, int num)
 	sna_crtc->sna = sna;
 	sna_crtc->crtc = crtc;
 	list_add(&sna_crtc->link, &mode->crtcs);
+
+	DBG(("%s: attached crtc[%d] id=%d, pipe=%d\n",
+	     __FUNCTION__, num, sna_crtc->mode_crtc->crtc_id, sna_crtc->pipe));
 }
 
 static Bool
commit 49f265915a4bca52724c345f04cddfeaca972655
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Jun 14 07:59:50 2011 +0100

    sna: Compile fix for debugging enabled
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 4b7fc3f..170f692 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -417,11 +417,16 @@ sna_crtc_restore(struct sna *sna)
 	struct kgem_bo *bo;
 	int i;
 
+	if (sna->mode.fb_pixmap == sna->front->drawable.serialNumber)
+		return;
+
 	bo = sna_pixmap_pin(sna->front);
 	if (!bo)
 		return;
 
 	assert(bo->tiling != I915_TILING_Y);
+
+	sna_mode_remove_fb(sna);
 	if (drmModeAddFB(sna->kgem.fd,
 			 sna->front->drawable.width,
 			 sna->front->drawable.height,
@@ -431,7 +436,7 @@ sna_crtc_restore(struct sna *sna)
 		return;
 
 	DBG(("%s: handle %d attached to fb %d\n",
-	     __FUNCTION__, bo->handle, mode->fb_id));
+	     __FUNCTION__, bo->handle, sna->mode.fb_id));
 
 	for (i = 0; i < xf86_config->num_crtc; i++) {
 		xf86CrtcPtr crtc = xf86_config->crtc[i];
@@ -456,11 +461,8 @@ sna_crtc_dpms(xf86CrtcPtr crtc, int mode)
 	     __FUNCTION__, sna_crtc->pipe, mode, mode == DPMSModeOn));
 
 	sna_crtc->active = mode == DPMSModeOn;
-	if (mode == DPMSModeOn) {
-		struct sna *sna = sna_crtc->sna;
-		if (sna->front->drawable.serialNumber != sna->mode.fb_pixmap)
-			sna_crtc_restore(sna);
-	}
+	if (mode == DPMSModeOn)
+		sna_crtc_restore(sna_crtc->sna);
 }
 
 static Bool


More information about the xorg-commit mailing list