Merge remote-tracking branch 'jturney/master'

This commit is contained in:
Keith Packard 2012-06-28 10:38:26 -07:00
commit 8b4f0a4fdd
3 changed files with 42 additions and 19 deletions

View File

@ -1879,8 +1879,9 @@ if test "x$XWIN" = xyes; then
XWIN_SYS_LIBS=-lws2_32 XWIN_SYS_LIBS=-lws2_32
;; ;;
esac esac
XWIN_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $RANDR_LIB $RENDER_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $OS_LIB" XWIN_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $RANDR_LIB $RENDER_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $OS_LIB"
XWIN_SYS_LIBS="$XWIN_SYS_LIBS $XWINMODULES_LIBS" XWIN_SYS_LIBS="$XWIN_SYS_LIBS $XWINMODULES_LIBS $GLX_SYS_LIBS"
AC_SUBST(XWIN_LIBS) AC_SUBST(XWIN_LIBS)
AC_SUBST(XWIN_SERVER_NAME) AC_SUBST(XWIN_SERVER_NAME)
AC_SUBST(XWIN_SYS_LIBS) AC_SUBST(XWIN_SYS_LIBS)

View File

@ -67,7 +67,7 @@ if dispatchheader :
fh = open(dispatchheader) fh = open(dispatchheader)
dispatchh = fh.readlines() dispatchh = fh.readlines()
dispatch_regex = re.compile(r'#define\sSET_(\S*)\(') dispatch_regex = re.compile(r'^SET_(\S*)\(')
for line in dispatchh : for line in dispatchh :
line = line.strip() line = line.strip()
@ -308,12 +308,20 @@ for w in sorted(wrappers.keys()) :
if dispatchheader : if dispatchheader :
print 'void glWinSetupDispatchTable(void)' print 'void glWinSetupDispatchTable(void)'
print '{' print '{'
print ' struct _glapi_table *disp = _glapi_get_dispatch();' print ' static struct _glapi_table *disp = NULL;'
print ''
print ' if (!disp)'
print ' {'
print ' disp = calloc(sizeof(void *), _glapi_get_dispatch_table_size());'
print ' assert(disp);'
for d in sorted(dispatch.keys()) : for d in sorted(dispatch.keys()) :
if wrappers.has_key(d) : if wrappers.has_key(d) :
print ' SET_'+ d + '(disp, (void *)' + prefix + d + 'Wrapper);' print ' SET_'+ d + '(disp, (void *)' + prefix + d + 'Wrapper);'
else : else :
print '#warning No wrapper for ' + prefix + d + ' !' print '#warning No wrapper for ' + prefix + d + ' !'
print ' }'
print ''
print ' _glapi_set_dispatch(disp);'
print '}' print '}'

View File

@ -398,7 +398,9 @@ fbConfigsDump(unsigned int n, __GLXconfig * c)
static __GLXscreen *glxWinScreenProbe(ScreenPtr pScreen); static __GLXscreen *glxWinScreenProbe(ScreenPtr pScreen);
static __GLXcontext *glxWinCreateContext(__GLXscreen * screen, static __GLXcontext *glxWinCreateContext(__GLXscreen * screen,
__GLXconfig * modes, __GLXconfig * modes,
__GLXcontext * baseShareContext); __GLXcontext * baseShareContext,
unsigned num_attribs,
const uint32_t * attribs, int *error);
static __GLXdrawable *glxWinCreateDrawable(ClientPtr client, static __GLXdrawable *glxWinCreateDrawable(ClientPtr client,
__GLXscreen * screen, __GLXscreen * screen,
DrawablePtr pDraw, DrawablePtr pDraw,
@ -473,7 +475,7 @@ static void
glxLogExtensions(const char *prefix, const char *extensions) glxLogExtensions(const char *prefix, const char *extensions)
{ {
int length = 0; int length = 0;
char *strl; const char *strl;
char *str = strdup(extensions); char *str = strdup(extensions);
if (str == NULL) { if (str == NULL) {
@ -482,6 +484,8 @@ glxLogExtensions(const char *prefix, const char *extensions)
} }
strl = strtok(str, " "); strl = strtok(str, " ");
if (strl == NULL)
strl = "";
ErrorF("%s%s", prefix, strl); ErrorF("%s%s", prefix, strl);
length = strlen(prefix) + strlen(strl); length = strlen(prefix) + strlen(strl);
@ -515,6 +519,7 @@ glxWinScreenProbe(ScreenPtr pScreen)
{ {
glxWinScreen *screen; glxWinScreen *screen;
const char *gl_extensions; const char *gl_extensions;
const char *gl_renderer;
const char *wgl_extensions; const char *wgl_extensions;
HWND hwnd; HWND hwnd;
HDC hdc; HDC hdc;
@ -538,14 +543,6 @@ glxWinScreenProbe(ScreenPtr pScreen)
if (NULL == screen) if (NULL == screen)
return NULL; return NULL;
/* Wrap RealizeWindow, UnrealizeWindow and CopyWindow on this screen */
screen->RealizeWindow = pScreen->RealizeWindow;
pScreen->RealizeWindow = glxWinRealizeWindow;
screen->UnrealizeWindow = pScreen->UnrealizeWindow;
pScreen->UnrealizeWindow = glxWinUnrealizeWindow;
screen->CopyWindow = pScreen->CopyWindow;
pScreen->CopyWindow = glxWinCopyWindow;
/* Dump out some useful information about the native renderer */ /* Dump out some useful information about the native renderer */
// create window class // create window class
@ -595,7 +592,8 @@ glxWinScreenProbe(ScreenPtr pScreen)
ErrorF("GL_VERSION: %s\n", glGetStringWrapperNonstatic(GL_VERSION)); ErrorF("GL_VERSION: %s\n", glGetStringWrapperNonstatic(GL_VERSION));
ErrorF("GL_VENDOR: %s\n", glGetStringWrapperNonstatic(GL_VENDOR)); ErrorF("GL_VENDOR: %s\n", glGetStringWrapperNonstatic(GL_VENDOR));
ErrorF("GL_RENDERER: %s\n", glGetStringWrapperNonstatic(GL_RENDERER)); gl_renderer = (const char *) glGetStringWrapperNonstatic(GL_RENDERER);
ErrorF("GL_RENDERER: %s\n", gl_renderer);
gl_extensions = (const char *) glGetStringWrapperNonstatic(GL_EXTENSIONS); gl_extensions = (const char *) glGetStringWrapperNonstatic(GL_EXTENSIONS);
glxLogExtensions("GL_EXTENSIONS: ", gl_extensions); glxLogExtensions("GL_EXTENSIONS: ", gl_extensions);
wgl_extensions = wglGetExtensionsStringARBWrapper(hdc); wgl_extensions = wglGetExtensionsStringARBWrapper(hdc);
@ -603,6 +601,13 @@ glxWinScreenProbe(ScreenPtr pScreen)
wgl_extensions = ""; wgl_extensions = "";
glxLogExtensions("WGL_EXTENSIONS: ", wgl_extensions); glxLogExtensions("WGL_EXTENSIONS: ", wgl_extensions);
if (strcasecmp(gl_renderer, "GDI Generic") == 0) {
free(screen);
LogMessage(X_ERROR,
"AIGLX: Won't use generic native renderer as it is not accelerated\n");
return NULL;
}
// Can you see the problem here? The extensions string is DC specific // Can you see the problem here? The extensions string is DC specific
// Different DCs for windows on a multimonitor system driven by multiple cards // Different DCs for windows on a multimonitor system driven by multiple cards
// might have completely different capabilities. Of course, good luck getting // might have completely different capabilities. Of course, good luck getting
@ -720,9 +725,6 @@ glxWinScreenProbe(ScreenPtr pScreen)
__glXScreenInit(&screen->base, pScreen); __glXScreenInit(&screen->base, pScreen);
// dump out fbConfigs now fbConfigIds and visualIDs have been assigned
fbConfigsDump(screen->base.numFBConfigs, screen->base.fbconfigs);
// Override the GL extensions string set by __glXScreenInit() // Override the GL extensions string set by __glXScreenInit()
screen->base.GLextensions = strdup(gl_extensions); screen->base.GLextensions = strdup(gl_extensions);
@ -765,6 +767,17 @@ glxWinScreenProbe(ScreenPtr pScreen)
ReleaseDC(hwnd, hdc); ReleaseDC(hwnd, hdc);
DestroyWindow(hwnd); DestroyWindow(hwnd);
// dump out fbConfigs now fbConfigIds and visualIDs have been assigned
fbConfigsDump(screen->base.numFBConfigs, screen->base.fbconfigs);
/* Wrap RealizeWindow, UnrealizeWindow and CopyWindow on this screen */
screen->RealizeWindow = pScreen->RealizeWindow;
pScreen->RealizeWindow = glxWinRealizeWindow;
screen->UnrealizeWindow = pScreen->UnrealizeWindow;
pScreen->UnrealizeWindow = glxWinUnrealizeWindow;
screen->CopyWindow = pScreen->CopyWindow;
pScreen->CopyWindow = glxWinCopyWindow;
return &screen->base; return &screen->base;
} }
@ -1571,7 +1584,8 @@ glxWinContextDestroy(__GLXcontext * base)
static __GLXcontext * static __GLXcontext *
glxWinCreateContext(__GLXscreen * screen, glxWinCreateContext(__GLXscreen * screen,
__GLXconfig * modes, __GLXcontext * baseShareContext) __GLXconfig * modes, __GLXcontext * baseShareContext,
unsigned num_attribs, const uint32_t * attribs, int *error)
{ {
__GLXWinContext *context; __GLXWinContext *context;
__GLXWinContext *shareContext = (__GLXWinContext *) baseShareContext; __GLXWinContext *shareContext = (__GLXWinContext *) baseShareContext;