diff options
Diffstat (limited to 'xorg-server')
-rw-r--r-- | xorg-server/dix/main.c | 18 | ||||
-rw-r--r-- | xorg-server/fb/fbseg.c | 18 | ||||
-rw-r--r-- | xorg-server/glx/glxscreens.c | 3 | ||||
-rw-r--r-- | xorg-server/hw/xfree86/modes/xf86Crtc.c | 11 | ||||
-rw-r--r-- | xorg-server/hw/xquartz/quartz.c | 1 | ||||
-rw-r--r-- | xorg-server/render/filter.c | 5 |
6 files changed, 33 insertions, 23 deletions
diff --git a/xorg-server/dix/main.c b/xorg-server/dix/main.c index 42f517dfd..fb935c969 100644 --- a/xorg-server/dix/main.c +++ b/xorg-server/dix/main.c @@ -331,6 +331,15 @@ main(int argc, char *argv[], char *envp[]) CloseDownEvents(); + for (i = screenInfo.numGPUScreens - 1; i >= 0; i--) { + ScreenPtr pScreen = screenInfo.gpuscreens[i]; + FreeScratchPixmapsForScreen(pScreen); + (*pScreen->CloseScreen) (pScreen); + dixFreePrivates(pScreen->devPrivates, PRIVATE_SCREEN); + free(pScreen); + screenInfo.numGPUScreens = i; + } + for (i = screenInfo.numScreens - 1; i >= 0; i--) { FreeScratchPixmapsForScreen(screenInfo.screens[i]); FreeGCperDepth(i); @@ -342,15 +351,6 @@ main(int argc, char *argv[], char *envp[]) screenInfo.numScreens = i; } - for (i = screenInfo.numGPUScreens - 1; i >= 0; i--) { - ScreenPtr pScreen = screenInfo.gpuscreens[i]; - FreeScratchPixmapsForScreen(pScreen); - (*pScreen->CloseScreen) (pScreen); - dixFreePrivates(pScreen->devPrivates, PRIVATE_SCREEN); - free(pScreen); - screenInfo.numGPUScreens = i; - } - ReleaseClientIds(serverClient); dixFreePrivates(serverClient->devPrivates, PRIVATE_CLIENT); serverClient->devPrivates = NULL; diff --git a/xorg-server/fb/fbseg.c b/xorg-server/fb/fbseg.c index 0e4e0a9f7..1848387f6 100644 --- a/xorg-server/fb/fbseg.c +++ b/xorg-server/fb/fbseg.c @@ -65,6 +65,12 @@ fbBresSolid(DrawablePtr pDrawable, if (axis == X_AXIS) { bits = 0; while (len--) { + if (e >= 0) { + WRITE(dst, FbDoMaskRRop (READ(dst), and, xor, bits)); + bits = 0; + dst += dstStride; + e += e3; + } bits |= mask; mask = fbBresShiftMask(mask, signdx, dstBpp); if (!mask) { @@ -74,21 +80,12 @@ fbBresSolid(DrawablePtr pDrawable, mask = mask0; } e += e1; - if (e >= 0) { - WRITE(dst, FbDoMaskRRop(READ(dst), and, xor, bits)); - bits = 0; - dst += dstStride; - e += e3; - } } if (bits) WRITE(dst, FbDoMaskRRop(READ(dst), and, xor, bits)); } else { while (len--) { - WRITE(dst, FbDoMaskRRop(READ(dst), and, xor, mask)); - dst += dstStride; - e += e1; if (e >= 0) { e += e3; mask = fbBresShiftMask(mask, signdx, dstBpp); @@ -97,6 +94,9 @@ fbBresSolid(DrawablePtr pDrawable, mask = mask0; } } + WRITE(dst, FbDoMaskRRop(READ(dst), and, xor, mask)); + dst += dstStride; + e += e1; } } diff --git a/xorg-server/glx/glxscreens.c b/xorg-server/glx/glxscreens.c index 037b03765..61d590cc8 100644 --- a/xorg-server/glx/glxscreens.c +++ b/xorg-server/glx/glxscreens.c @@ -288,6 +288,9 @@ pickFBConfig(__GLXscreen * pGlxScreen, VisualPtr visual) continue; if (config->visualRating != GLX_NONE) continue; + /* Ignore multisampled configs */ + if (config->sampleBuffers) + continue; if (glxConvertToXVisualType(config->visualType) != visual->class) continue; /* If it's the 32-bit RGBA visual, demand a 32-bit fbconfig. */ diff --git a/xorg-server/hw/xfree86/modes/xf86Crtc.c b/xorg-server/hw/xfree86/modes/xf86Crtc.c index 154f684c4..1947c5be9 100644 --- a/xorg-server/hw/xfree86/modes/xf86Crtc.c +++ b/xorg-server/hw/xfree86/modes/xf86Crtc.c @@ -726,6 +726,12 @@ xf86CrtcCloseScreen(ScreenPtr screen) xf86RotateCloseScreen(screen); + xf86RandR12CloseScreen(screen); + + free(config->name); + + screen->CloseScreen(screen); + for (o = 0; o < config->num_output; o++) { xf86OutputPtr output = config->output[o]; @@ -749,10 +755,7 @@ xf86CrtcCloseScreen(ScreenPtr screen) else if (screen->current_master) DetachUnboundGPU(screen); } - xf86RandR12CloseScreen(screen); - - free(config->name); - return screen->CloseScreen(screen); + return TRUE; } /* diff --git a/xorg-server/hw/xquartz/quartz.c b/xorg-server/hw/xquartz/quartz.c index d74fc6446..31b0e619a 100644 --- a/xorg-server/hw/xquartz/quartz.c +++ b/xorg-server/hw/xquartz/quartz.c @@ -43,6 +43,7 @@ #include "darwinEvents.h" #include "pseudoramiX.h" #include "extension.h" +#include "glx_extinit.h" #define _APPLEWM_SERVER_ #include "applewmExt.h" diff --git a/xorg-server/render/filter.c b/xorg-server/render/filter.c index 8c401ee5d..019ea7f94 100644 --- a/xorg-server/render/filter.c +++ b/xorg-server/render/filter.c @@ -273,7 +273,10 @@ PictureResetFilters(ScreenPtr pScreen) free(ps->filters); free(ps->filterAliases); - PictureFreeFilterIds(); + + /* Free the filters when the last screen is closed */ + if (pScreen->myNum == 0) + PictureFreeFilterIds(); } int |