xserver: Branch 'server-1.6-branch' - 6 commits

Keith Packard keithp at kemper.freedesktop.org
Tue Sep 22 21:09:40 PDT 2009


 Xext/dpms.c                    |   17 +----
 dix/dixfonts.c                 |   29 ++++++++-
 hw/xfree86/common/xf86Config.c |   16 -----
 hw/xfree86/dri2/dri2.c         |   12 +++-
 hw/xfree86/fbdevhw/fbdevhw.c   |    8 ++
 hw/xfree86/modes/xf86Crtc.c    |    7 ++
 hw/xfree86/modes/xf86DiDGA.c   |  119 +++++++----------------------------------
 hw/xfree86/modes/xf86RandR12.c |    4 -
 render/render.c                |    7 +-
 9 files changed, 81 insertions(+), 138 deletions(-)

New commits:
commit 507e57381fea6334f7dc8da6925e53d2c76fddcb
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Sep 18 21:12:17 2009 -0700

    xfree86/modes: Remove all framebuffer support from DGA
    
    This removes all rendering and mapping code from xf86DiDGA, leaving
    just mode setting and raw input device access. The mapping code didn't
    have the offset within /dev/mem for the frame buffer and the pixmap
    support assumed that the framebuffer was never reallocated.
    (cherry picked from 0b7c6c728c2e2d8433a188315cc591308a89cd85)
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index e9bde36..899cea5 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -769,6 +769,9 @@ xf86CrtcScreenInit (ScreenPtr screen)
     config->CloseScreen = screen->CloseScreen;
     screen->CloseScreen = xf86CrtcCloseScreen;
     
+#ifdef XFreeXDGA
+    xf86DiDGAInit(screen, 0);
+#endif
 #ifdef RANDR_13_INTERFACE
     return RANDR_INTERFACE_VERSION;
 #else
@@ -1882,6 +1885,10 @@ xf86SetScrnInfoModes (ScrnInfoPtr scrn)
 	}
     }
     scrn->currentMode = scrn->modes;
+#ifdef XFreeXDGA
+    if (scrn->pScreen)
+	    xf86DiDGAReInit(scrn->pScreen);
+#endif
 }
 
 static void
diff --git a/hw/xfree86/modes/xf86DiDGA.c b/hw/xfree86/modes/xf86DiDGA.c
index f40d0ab..3992c09 100644
--- a/hw/xfree86/modes/xf86DiDGA.c
+++ b/hw/xfree86/modes/xf86DiDGA.c
@@ -72,8 +72,7 @@ xf86_dga_get_modes (ScreenPtr pScreen)
 	mode = modes + num++;
 
 	mode->mode = display_mode;
-	mode->flags = DGA_CONCURRENT_ACCESS | DGA_PIXMAP_AVAILABLE;
-        mode->flags |= DGA_FILL_RECT | DGA_BLIT_RECT;
+	mode->flags = DGA_CONCURRENT_ACCESS;
 	if (display_mode->Flags & V_DBLSCAN)
 	    mode->flags |= DGA_DOUBLESCAN;
 	if (display_mode->Flags & V_INTERLACE)
@@ -91,14 +90,14 @@ xf86_dga_get_modes (ScreenPtr pScreen)
 	mode->yViewportStep = 1;
 	mode->viewportFlags = DGA_FLIP_RETRACE;
 	mode->offset = 0;
-	mode->address = (unsigned char *) xf86_config->dga_address;
-	mode->bytesPerScanline = xf86_config->dga_stride;
-	mode->imageWidth = xf86_config->dga_width;
-	mode->imageHeight = xf86_config->dga_height;
+	mode->address = 0;
+	mode->imageWidth = mode->viewportWidth;
+	mode->imageHeight = mode->viewportHeight;
+	mode->bytesPerScanline = (mode->imageWidth * scrn->bitsPerPixel) >> 3;
 	mode->pixmapWidth = mode->imageWidth;
 	mode->pixmapHeight = mode->imageHeight;
-	mode->maxViewportX = mode->imageWidth -	mode->viewportWidth;
-	mode->maxViewportY = mode->imageHeight - mode->viewportHeight;
+	mode->maxViewportX = 0;
+	mode->maxViewportY = 0;
 
 	display_mode = display_mode->next;
 	if (display_mode == scrn->modes)
@@ -149,93 +148,11 @@ xf86_dga_set_viewport(ScrnInfoPtr scrn, int x, int y, int flags)
 }
 
 static Bool
-xf86_dga_get_drawable_and_gc (ScrnInfoPtr scrn, DrawablePtr *ppDrawable, GCPtr *ppGC)
-{
-    ScreenPtr		pScreen = scrn->pScreen;
-    xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
-    PixmapPtr		pPixmap;
-    GCPtr		pGC;
-    
-    pPixmap = GetScratchPixmapHeader (pScreen, xf86_config->dga_width, xf86_config->dga_height,
-				      scrn->depth, scrn->bitsPerPixel, xf86_config->dga_stride, 
-				      (char *) scrn->memPhysBase + scrn->fbOffset);
-    if (!pPixmap)
-	return FALSE;
-    pGC  = GetScratchGC (scrn->depth, pScreen);
-    if (!pGC)
-    {
-	FreeScratchPixmapHeader (pPixmap);
-	return FALSE;
-    }
-    *ppDrawable = &pPixmap->drawable;
-    *ppGC = pGC;
-    return TRUE;
-}
-
-static void
-xf86_dga_release_drawable_and_gc (ScrnInfoPtr scrn, DrawablePtr pDrawable, GCPtr pGC)
-{
-    FreeScratchGC (pGC);
-    FreeScratchPixmapHeader ((PixmapPtr) pDrawable);
-}
-
-static void
-xf86_dga_fill_rect(ScrnInfoPtr scrn, int x, int y, int w, int h, unsigned long color)
-{
-    GCPtr		pGC;
-    DrawablePtr		pDrawable;
-    XID			vals[1];
-    xRectangle		r;
-
-    if (!xf86_dga_get_drawable_and_gc (scrn, &pDrawable, &pGC))
-	return;
-    vals[0] = color;
-    ChangeGC (pGC, GCForeground, vals);
-    ValidateGC (pDrawable, pGC);
-    r.x = x;
-    r.y = y;
-    r.width = w;
-    r.height = h;
-    pGC->ops->PolyFillRect (pDrawable, pGC, 1, &r);
-    xf86_dga_release_drawable_and_gc (scrn, pDrawable, pGC);
-}
-
-static void
-xf86_dga_sync(ScrnInfoPtr scrn)
-{
-    ScreenPtr	pScreen = scrn->pScreen;
-    WindowPtr	pRoot = WindowTable [pScreen->myNum];
-    char	buffer[4];
-
-    pScreen->GetImage (&pRoot->drawable, 0, 0, 1, 1, ZPixmap, ~0L, buffer);
-}
-
-static void
-xf86_dga_blit_rect(ScrnInfoPtr scrn, int srcx, int srcy, int w, int h, int dstx, int dsty)
-{
-    DrawablePtr	pDrawable;
-    GCPtr	pGC;
-
-    if (!xf86_dga_get_drawable_and_gc (scrn, &pDrawable, &pGC))
-	return;
-    ValidateGC (pDrawable, pGC);
-    pGC->ops->CopyArea (pDrawable, pDrawable, pGC, srcx, srcy, w, h, dstx, dsty);
-    xf86_dga_release_drawable_and_gc (scrn, pDrawable, pGC);
-}
-
-static Bool
 xf86_dga_open_framebuffer(ScrnInfoPtr scrn,
 			  char **name,
 			  unsigned char **mem, int *size, int *offset, int *flags)
 {
-    xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
-    
-    *size = xf86_config->dga_stride * xf86_config->dga_height;
-    *mem = (unsigned char *) (xf86_config->dga_address);
-    *offset = 0;
-    *flags = DGA_NEED_ROOT;
-
-    return TRUE;
+    return FALSE;
 }
 
 static void
@@ -249,9 +166,9 @@ static DGAFunctionRec xf86_dga_funcs = {
    xf86_dga_set_mode,
    xf86_dga_set_viewport,
    xf86_dga_get_viewport,
-   xf86_dga_sync,
-   xf86_dga_fill_rect,
-   xf86_dga_blit_rect,
+   NULL,
+   NULL,
+   NULL,
    NULL
 };
 
@@ -261,6 +178,9 @@ xf86DiDGAReInit (ScreenPtr pScreen)
     ScrnInfoPtr		scrn = xf86Screens[pScreen->myNum];
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
     
+    if (!DGAAvailable(pScreen->myNum))
+	return TRUE;
+
     if (!xf86_dga_get_modes (pScreen))
 	return FALSE;
     
@@ -273,11 +193,14 @@ xf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address)
     ScrnInfoPtr		scrn = xf86Screens[pScreen->myNum];
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
 
+    if (DGAAvailable(pScreen->myNum))
+	return TRUE;
+
     xf86_config->dga_flags = 0;
-    xf86_config->dga_address = dga_address;
-    xf86_config->dga_width = scrn->virtualX;
-    xf86_config->dga_height = scrn->virtualY;
-    xf86_config->dga_stride = scrn->displayWidth * scrn->bitsPerPixel >> 3;
+    xf86_config->dga_address = 0;
+    xf86_config->dga_width = 0;
+    xf86_config->dga_height = 0;
+    xf86_config->dga_stride = 0;
     
     if (!xf86_dga_get_modes (pScreen))
 	return FALSE;
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index 4546492..0637ed5 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
+ * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -460,7 +460,6 @@ xf86RandR12GetInfo (ScreenPtr pScreen, Rotation *rotations)
     {
 	xf86ProbeOutputModes (scrp, 0, 0);
 	xf86SetScrnInfoModes (scrp);
-	xf86DiDGAReInit (pScreen);
     }
 
     for (mode = scrp->modes; ; mode = mode->next)
@@ -1481,7 +1480,6 @@ xf86RandR12GetInfo12 (ScreenPtr pScreen, Rotation *rotations)
 	return TRUE;
     xf86ProbeOutputModes (pScrn, 0, 0);
     xf86SetScrnInfoModes (pScrn);
-    xf86DiDGAReInit (pScreen);
     return xf86RandR12SetInfo12 (pScreen);
 }
 
commit c3d182a47902d02f9e64f933b8565ae336f73f54
Author: Rémi Cardona <remi at gentoo.org>
Date:   Mon Sep 14 17:09:59 2009 +0200

    dix: append "built-ins" to the font path in SetDefaultFontPath
    
    49b93df8a3002db7196aa3fc1fd8dca1c12a55d6 made the hard dependency on
    a "fixed" font go away but only Xorg could use the built-ins fonts by
    default.
    
    With this commit, all DDXs get "built-ins" appended to their FontPath, not
    just Xorg.
    
    Tested with Xorg, Xvfb and Xnest.
    (cherry picked from commit f56cbe1ef24415d0142b9a7d0ab0a031069ccb52)
    
    Signed-off-by: Rémi Cardona <remi at gentoo.org>
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Tested-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/dix/dixfonts.c b/dix/dixfonts.c
index 719bca4..174372e 100644
--- a/dix/dixfonts.c
+++ b/dix/dixfonts.c
@@ -1815,6 +1815,9 @@ SetFontPath(ClientPtr client, int npaths, unsigned char *paths, int *error)
 int
 SetDefaultFontPath(char *path)
 {
+    char       *temp_path,
+               *start,
+               *end;
     unsigned char *cp,
                *pp,
                *nump,
@@ -1825,12 +1828,31 @@ SetDefaultFontPath(char *path)
                 size = 0,
                 bad;
 
+    /* ensure temp_path contains "built-ins" */
+    start = path;
+    while (1) {
+	start = strstr(start, "built-ins");
+	if (start == NULL)
+	    break;
+	end = start + strlen("built-ins");
+	if ((start == path || start[-1] == ',') && (!*end || *end == ','))
+	    break;
+	start = end;
+    }
+    if (!start) {
+	temp_path = Xprintf("%s%sbuilt-ins", path, *path ? "," : "");
+    } else {
+	temp_path = Xstrdup(path);
+    }
+    if (!temp_path)
+        return BadAlloc;
+
     /* get enough for string, plus values -- use up commas */
-    len = strlen(path) + 1;
-    nump = cp = newpath = (unsigned char *) xalloc(len);
+    len = strlen(temp_path) + 1;
+    nump = cp = newpath = xalloc(len);
     if (!newpath)
 	return BadAlloc;
-    pp = (unsigned char *) path;
+    pp = (unsigned char *) temp_path;
     cp++;
     while (*pp) {
 	if (*pp == ',') {
@@ -1849,6 +1871,7 @@ SetDefaultFontPath(char *path)
     err = SetFontPathElements(num, newpath, &bad, TRUE);
 
     xfree(newpath);
+    xfree(temp_path);
 
     return err;
 }
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 9376119..ddf4745 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -612,22 +612,6 @@ configFiles(XF86ConfFilesPtr fileconf)
 	pathFrom = X_DEFAULT;
     temp_path = defaultFontPath ? defaultFontPath : "";
 
-    /* ensure defaultFontPath contains "built-ins" */
-    start = strstr(temp_path, "built-ins");
-    end = start + strlen("built-ins");
-    if (start == NULL ||
-	!((start == temp_path || start[-1] == ',') && (!*end || *end == ','))) {
-	defaultFontPath = Xprintf("%s%sbuilt-ins",
-				  temp_path, *temp_path ? "," : "");
-	if (must_copy == TRUE) {
-	    if (defaultFontPath != NULL) {
-		must_copy = FALSE;
-	    }
-	} else {
-	    /* already made a copy of the font path */
-	    xfree(temp_path);
-	}
-    }
     /* xf86ValidateFontPath modifies its argument, but returns a copy of it. */
     temp_path = must_copy ? XNFstrdup(defaultFontPath) : defaultFontPath;
     defaultFontPath = xf86ValidateFontPath(temp_path);
commit 9bc4a69040493e589a3811ca5e085e323438996d
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Wed Sep 9 15:48:33 2009 +1000

    fbdevhw: Test for graphics:fb%d as well as graphics/fb%d
    
    Apparently the kernel can't decide on an API to expose to userspace, so
    let's just try both in the hope that one will work.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Acked-by: Michel Dänzer <michel at daenzer.net>
    (cherry picked from commit f4350c66b493d63fa06be87caa958d7033232ea4)

diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index 5269277..d6e78b9 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -318,7 +318,13 @@ fbdev_open_pci(struct pci_device * pPci, char **namep)
 		pPci->domain, pPci->bus, pPci->dev, pPci->func, i);
 
 	fd = open(filename, O_RDONLY, 0);
-	if (fd != -1) {
+        if (fd < 0) {
+            sprintf(filename,
+                    "/sys/bus/pci/devices/%04x:%02x:%02x.%d/graphics:fb%d",
+                    pPci->domain, pPci->bus, pPci->dev, pPci->func, i);
+            fd = open(filename, O_RDONLY, 0);
+        }
+	if (fd >= 0) {
 	    close(fd);
 	    sprintf(filename, "/dev/fb%d", i);
 
commit d78669c92d751464bc3c8f79f2aa21ca0951e3a9
Author: Keith Packard <keithp at keithp.com>
Date:   Tue Sep 22 12:09:48 2009 -0700

    render: return the supported version rather than just passing the proto's version
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/render/render.c b/render/render.c
index e3d76d2..d1020d5 100644
--- a/render/render.c
+++ b/render/render.c
@@ -54,6 +54,9 @@
 #define UINT32_MAX 0xffffffffU
 #endif
 
+#define SERVER_RENDER_MAJOR 0
+#define SERVER_RENDER_MINOR 10
+
 static int ProcRenderQueryVersion (ClientPtr pClient);
 static int ProcRenderQueryPictFormats (ClientPtr pClient);
 static int ProcRenderQueryPictIndexValues (ClientPtr pClient);
@@ -271,8 +274,8 @@ ProcRenderQueryVersion (ClientPtr client)
     rep.type = X_Reply;
     rep.length = 0;
     rep.sequenceNumber = client->sequence;
-    rep.majorVersion = RENDER_MAJOR;
-    rep.minorVersion = RENDER_MINOR;
+    rep.majorVersion = SERVER_RENDER_MAJOR;
+    rep.minorVersion = SERVER_RENDER_MINOR;
     if (client->swapped) {
     	swaps(&rep.sequenceNumber, n);
     	swapl(&rep.length, n);
commit f5d1da499c3d64f0a4ac217eb19911b8e35cb49b
Author: Michel Dänzer <daenzer at vmware.com>
Date:   Tue Jun 23 16:45:39 2009 +0200

    dri2: Don't crash if pPriv is NULL.
    (cherry picked from commit df597709d71f47b8516e27c6fb1bfffd59de5e48)
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index 580383d..3e8a7d4 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -190,10 +190,18 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height,
     int need_fake_front = 0;
     int have_fake_front = 0;
     int front_format = 0;
-    const int dimensions_match = (pDraw->width == pPriv->width)
-	&& (pDraw->height == pPriv->height);
+    int dimensions_match;
     int i;
 
+    if (!pPriv) {
+	*width = pDraw->width;
+	*height = pDraw->height;
+	*out_count = 0;
+	return NULL;
+    }
+
+    dimensions_match = (pDraw->width == pPriv->width)
+	&& (pDraw->height == pPriv->height);
 
     buffers = xalloc((count + 1) * sizeof(buffers[0]));
 
commit 468787bdd2c34f9edf46da76b6357034c216fa7b
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Aug 14 11:44:35 2009 +0100

    Don't reset the lastDeviceEventTime when doing DPMS actions
    
    When we change the DPMS mode, don't play games with the last event time as
    this breaks applications using IDLETIME to turn the backlight off after a
    preset time.
    
    This patch fixes gnome-power-manager and xfce-power-manager
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    (cherry picked from commit c1d901d723c3bee523736eacc15b44a7dff484fe)
    
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/dpms.c b/Xext/dpms.c
index bad7aa6..d3e0dde 100644
--- a/Xext/dpms.c
+++ b/Xext/dpms.c
@@ -219,19 +219,10 @@ ProcDPMSForceLevel(client)
     if (!DPMSEnabled)
 	return BadMatch;
 
-    if (stuff->level == DPMSModeOn) {
-      lastDeviceEventTime.milliseconds =
-          GetTimeInMillis();
-    } else if (stuff->level == DPMSModeStandby) {
-      lastDeviceEventTime.milliseconds =
-          GetTimeInMillis() -  DPMSStandbyTime;
-    } else if (stuff->level == DPMSModeSuspend) {
-      lastDeviceEventTime.milliseconds =
-          GetTimeInMillis() -  DPMSSuspendTime;
-    } else if (stuff->level == DPMSModeOff) {
-      lastDeviceEventTime.milliseconds =
-          GetTimeInMillis() -  DPMSOffTime;
-    } else {
+    if (stuff->level != DPMSModeOn &&
+        stuff->level != DPMSModeStandby &&
+        stuff->level != DPMSModeSuspend &&
+        stuff->level != DPMSModeOff) {
 	client->errorValue = stuff->level;
 	return BadValue;
     }


More information about the xorg-commit mailing list