aboutsummaryrefslogtreecommitdiff
path: root/xorg-server
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server')
-rw-r--r--xorg-server/glx/glxext.c21
-rw-r--r--xorg-server/hw/dmx/dmxfont.c2
-rw-r--r--xorg-server/hw/dmx/glxProxy/glxcmds.c2
-rw-r--r--xorg-server/hw/xfree86/common/compiler.h4
-rw-r--r--xorg-server/hw/xfree86/dri2/dri2.c6
-rw-r--r--xorg-server/hw/xfree86/os-support/linux/lnx_video.c3
-rw-r--r--xorg-server/hw/xfree86/shadowfb/shadow.c26
-rw-r--r--xorg-server/include/servermd.h13
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.