diff options
Diffstat (limited to 'xorg-server')
-rw-r--r-- | xorg-server/glx/glxext.c | 21 | ||||
-rw-r--r-- | xorg-server/hw/dmx/dmxfont.c | 2 | ||||
-rw-r--r-- | xorg-server/hw/dmx/glxProxy/glxcmds.c | 2 | ||||
-rw-r--r-- | xorg-server/hw/xfree86/common/compiler.h | 4 | ||||
-rw-r--r-- | xorg-server/hw/xfree86/dri2/dri2.c | 6 | ||||
-rw-r--r-- | xorg-server/hw/xfree86/os-support/linux/lnx_video.c | 3 | ||||
-rw-r--r-- | xorg-server/hw/xfree86/shadowfb/shadow.c | 26 | ||||
-rw-r--r-- | xorg-server/include/servermd.h | 13 |
8 files changed, 58 insertions, 19 deletions
diff --git a/xorg-server/glx/glxext.c b/xorg-server/glx/glxext.c index c0142fe2e..c2de3cedd 100644 --- a/xorg-server/glx/glxext.c +++ b/xorg-server/glx/glxext.c @@ -316,6 +316,23 @@ GlxPushProvider(__GLXprovider * provider) __glXProviderStack = provider; } +static Bool +checkScreenVisuals(void) +{ + int i, j; + + for (i = 0; i < screenInfo.numScreens; i++) { + ScreenPtr screen = screenInfo.screens[i]; + for (j = 0; j < screen->numVisuals; j++) { + if (screen->visuals[j].class == TrueColor || + screen->visuals[j].class == DirectColor) + return True; + } + } + + return False; +} + /* ** Initialize the GLX extension. */ @@ -334,6 +351,10 @@ GlxExtensionInit(void) *stack = &__glXDRISWRastProvider; } + /* Mesa requires at least one True/DirectColor visual */ + if (!checkScreenVisuals()) + return; + __glXContextRes = CreateNewResourceType((DeleteType) ContextGone, "GLXContext"); __glXDrawableRes = CreateNewResourceType((DeleteType) DrawableGone, diff --git a/xorg-server/hw/dmx/dmxfont.c b/xorg-server/hw/dmx/dmxfont.c index 6b81826c9..115422d41 100644 --- a/xorg-server/hw/dmx/dmxfont.c +++ b/xorg-server/hw/dmx/dmxfont.c @@ -397,12 +397,12 @@ dmxBELoadFont(ScreenPtr pScreen, FontPtr pFont) "font-path-related options, see the Xdmx man page.\n"); } + free(goodfps); if (!dmxIgnoreBadFontPaths || (dmxIgnoreBadFontPaths && dmxSetFontPath(dmxScreen))) { /* We still have errors so return with error */ dmxFreeFontPath(fp); XFreeFontPath(oldFontPath); - free(goodfps); return FALSE; } } diff --git a/xorg-server/hw/dmx/glxProxy/glxcmds.c b/xorg-server/hw/dmx/glxProxy/glxcmds.c index 964db4069..23c3366bd 100644 --- a/xorg-server/hw/dmx/glxProxy/glxcmds.c +++ b/xorg-server/hw/dmx/glxProxy/glxcmds.c @@ -2009,6 +2009,7 @@ CreateGLXPixmap(__GLXclientState * cl, } else { client->errorValue = (visual ? visual : fbconfigId); + free(pGlxPixmap->be_xids); free(pGlxPixmap); return BadValue; } @@ -2017,6 +2018,7 @@ CreateGLXPixmap(__GLXclientState * cl, } if (!(AddResource(glxpixmapId, __glXPixmapRes, pGlxPixmap))) { + free(pGlxPixmap->be_xids); free(pGlxPixmap); return BadAlloc; } diff --git a/xorg-server/hw/xfree86/common/compiler.h b/xorg-server/hw/xfree86/common/compiler.h index fb95f58bf..0319de06b 100644 --- a/xorg-server/hw/xfree86/common/compiler.h +++ b/xorg-server/hw/xfree86/common/compiler.h @@ -1352,7 +1352,7 @@ stl_u(unsigned long val, unsigned int *p) #else /* ix86 */ #if !defined(__SUNPRO_C) -#if !defined(FAKEIT) && !defined(__mc68000__) && !defined(__arm__) && !defined(__sh__) && !defined(__hppa__) && !defined(__s390__) && !defined(__m32r__) && !defined(__aarch64__) +#if !defined(FAKEIT) && !defined(__mc68000__) && !defined(__arm__) && !defined(__sh__) && !defined(__hppa__) && !defined(__s390__) && !defined(__m32r__) && !defined(__aarch64__) && !defined(__arc__) #ifdef GCCUSESGAS /* @@ -1454,7 +1454,7 @@ inl(unsigned short port) #endif /* GCCUSESGAS */ -#else /* !defined(FAKEIT) && !defined(__mc68000__) && !defined(__arm__) && !defined(__sh__) && !defined(__hppa__) && !defined(__m32r__) */ +#else /* !defined(FAKEIT) && !defined(__mc68000__) && !defined(__arm__) && !defined(__sh__) && !defined(__hppa__) && !defined(__m32r__) && !defined(__arc__) */ static __inline__ void outb(unsigned short port, unsigned char val) diff --git a/xorg-server/hw/xfree86/dri2/dri2.c b/xorg-server/hw/xfree86/dri2/dri2.c index 76708cabc..6dd77963c 100644 --- a/xorg-server/hw/xfree86/dri2/dri2.c +++ b/xorg-server/hw/xfree86/dri2/dri2.c @@ -156,11 +156,9 @@ GetScreenPrime(ScreenPtr master, int prime_id) ds = DRI2GetScreen(slave); if (ds->prime_id == prime_id) - break; + return slave; } - if (!slave) - return master; - return slave; + return master; } static DRI2ScreenPtr diff --git a/xorg-server/hw/xfree86/os-support/linux/lnx_video.c b/xorg-server/hw/xfree86/os-support/linux/lnx_video.c index 47f5abc2c..40765fccf 100644 --- a/xorg-server/hw/xfree86/os-support/linux/lnx_video.c +++ b/xorg-server/hw/xfree86/os-support/linux/lnx_video.c @@ -59,7 +59,8 @@ static Bool ExtendedEnabled = FALSE; !defined(__mips__) && \ !defined(__nds32__) && \ !defined(__arm__) && \ - !defined(__aarch64__) + !defined(__aarch64__) && \ + !defined(__arc__) /* * Due to conflicts with "compiler.h", don't rely on <sys/io.h> to declare diff --git a/xorg-server/hw/xfree86/shadowfb/shadow.c b/xorg-server/hw/xfree86/shadowfb/shadow.c index 10f72cc99..d2481ed8a 100644 --- a/xorg-server/hw/xfree86/shadowfb/shadow.c +++ b/xorg-server/hw/xfree86/shadowfb/shadow.c @@ -29,14 +29,14 @@ #include "picturestr.h" static Bool ShadowCloseScreen(ScreenPtr pScreen); -static Bool ShadowCreateScreenResources(ScreenPtr pScreen); +static Bool ShadowCreateRootWindow(WindowPtr pWin); typedef struct { ScrnInfoPtr pScrn; RefreshAreaFuncPtr preRefresh; RefreshAreaFuncPtr postRefresh; CloseScreenProcPtr CloseScreen; - CreateScreenResourcesProcPtr CreateScreenResources; + CreateWindowProcPtr CreateWindow; } ShadowScreenRec, *ShadowScreenPtr; static DevPrivateKeyRec ShadowScreenKeyRec; @@ -71,10 +71,10 @@ ShadowFBInit2(ScreenPtr pScreen, pPriv->postRefresh = postRefreshArea; pPriv->CloseScreen = pScreen->CloseScreen; - pPriv->CreateScreenResources = pScreen->CreateScreenResources; + pPriv->CreateWindow = pScreen->CreateWindow; pScreen->CloseScreen = ShadowCloseScreen; - pScreen->CreateScreenResources = ShadowCreateScreenResources; + pScreen->CreateWindow = ShadowCreateRootWindow; return TRUE; } @@ -117,16 +117,21 @@ shadowfbReportPost(DamagePtr damage, RegionPtr reg, void *closure) } static Bool -ShadowCreateScreenResources(ScreenPtr pScreen) +ShadowCreateRootWindow(WindowPtr pWin) { Bool ret; - WindowPtr pWin = pScreen->root; + ScreenPtr pScreen = pWin->drawable.pScreen; ShadowScreenPtr pPriv = shadowfbGetScreenPrivate(pScreen); - pScreen->CreateScreenResources = pPriv->CreateScreenResources; - ret = pScreen->CreateScreenResources(pScreen); - pPriv->CreateScreenResources = pScreen->CreateScreenResources; - pScreen->CreateScreenResources = ShadowCreateScreenResources; + /* paranoia */ + if (pWin != pScreen->root) + ErrorF("ShadowCreateRootWindow called unexpectedly\n"); + + /* call down, but don't hook ourselves back in; we know the first time + * we're called it's for the root window. + */ + pScreen->CreateWindow = pPriv->CreateWindow; + ret = pScreen->CreateWindow(pWin); /* this might look like it leaks, but the damage code reaps listeners * when their drawable disappears. @@ -159,7 +164,6 @@ ShadowCloseScreen(ScreenPtr pScreen) ShadowScreenPtr pPriv = shadowfbGetScreenPrivate(pScreen); pScreen->CloseScreen = pPriv->CloseScreen; - pScreen->CreateScreenResources = pPriv->CreateScreenResources; free(pPriv); diff --git a/xorg-server/include/servermd.h b/xorg-server/include/servermd.h index 11f6c1022..2d1ccb19f 100644 --- a/xorg-server/include/servermd.h +++ b/xorg-server/include/servermd.h @@ -300,6 +300,19 @@ SOFTWARE. #endif /* __aarch64__ */ +#if defined(__arc__) + +#if defined(__BIG_ENDIAN__) +#define IMAGE_BYTE_ORDER MSBFirst +#define BITMAP_BIT_ORDER MSBFirst +#else +#define IMAGE_BYTE_ORDER LSBFirst +#define BITMAP_BIT_ORDER LSBFirst +#endif +#define GLYPHPADBYTES 4 + +#endif /* ARC */ + /* size of buffer to use with GetImage, measured in bytes. There's obviously * a trade-off between the amount of heap used and the number of times the * ddx routine has to be called. |