From c5a612fc18a7f5c542fca580494e2c66ecfc2159 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Fri, 16 Apr 2010 21:55:01 +0100 Subject: [PATCH 1/3] configure: Let configure --enable/disable-aiglx control building of AIGLX for all DDXs Let configure --enable/disable-aiglx control building of AIGLX for all DDXs. Currently we can't use --enable/disable-aiglx to control if Xwin DDX is built with AIGLX enabled, as at the moment it's forced off if we aren't building the X.Org DDX DRI or DRI2 loader Rearrange things a bit, introducing a new automake conditional, AIGLX_DRI_LOADER to specifically indicate if the X.Org DDX DRI/DRI2 loader convenience library should be built, and replace the previous X.Org DDX-specific uses of the AIGLX conditional with that As before, AIGLX_DRI_LOADER is only enabled if --enable-glx, --enable-aiglx and at least one of --enable-dri or --enable-dri2 are enabled This allows the general conditional AIGLX to control if AIGLX is built for the XWin DDX as well The C #define AIGLX set by AC_DEFINE(AIGLX) seems to be obsolete, I can't find anything which checks it Updated for ajax's "glx: Make --disable-dri not disable AIGLX" patch, which allows DRI2 to be enabled independently of DRI1 Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison Reviewed-by: Ian Romanick --- configure.ac | 14 ++++++++------ glx/Makefile.am | 2 +- hw/xfree86/dixmods/Makefile.am | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/configure.ac b/configure.ac index 56e51a407..30701b0cf 100644 --- a/configure.ac +++ b/configure.ac @@ -1008,12 +1008,14 @@ else fi AM_CONDITIONAL(GLX, test "x$GLX" = xyes) -if test "x$AIGLX" = xyes -a "x$GLX" = xyes -a \( "x$DRI" = xyes -o "x$DRI2" = xyes \); then - AC_DEFINE(AIGLX, 1, [Build AIGLX loader]) -else - AIGLX=no +if test "x$GLX" = xno; then + AIGLX=no fi -AM_CONDITIONAL(AIGLX, test "x$AIGLX" = xyes) + +if test "x$AIGLX" = xyes -a \( "x$DRI" = xyes -o "x$DRI2" = xyes \); then + AC_DEFINE(AIGLX, 1, [Build AIGLX loader]) +fi +AM_CONDITIONAL(AIGLX_DRI_LOADER, { test "x$DRI" = xyes || test "x$DRI2" = xyes; } && test "x$AIGLX" = xyes) if test "x$GLX_USE_TLS" = xyes ; then GLX_DEFINES="-DGLX_USE_TLS -DPTHREADS" @@ -1857,7 +1859,7 @@ AM_CONDITIONAL(XWIN, [test "x$XWIN" = xyes]) AM_CONDITIONAL(XWIN_MULTIWINDOW, [test "x$XWIN" = xyes]) AM_CONDITIONAL(XWIN_MULTIWINDOWEXTWM, [test "x$XWIN" = xyes && test "x$WINDOWSWM" = xyes]) AM_CONDITIONAL(XWIN_CLIPBOARD, [test "x$XWIN" = xyes]) -AM_CONDITIONAL(XWIN_GLX_WINDOWS, [test "x$XWIN" = xyes && false]) +AM_CONDITIONAL(XWIN_GLX_WINDOWS, [test "x$XWIN" = xyes && test "x$AIGLX" = xyes]) AM_CONDITIONAL(XWIN_NATIVEGDI, [test "x$XWIN" = xyes]) AM_CONDITIONAL(XWIN_PRIMARYFB, [test "x$XWIN" = xyes]) AM_CONDITIONAL(XWIN_RANDR, [test "x$XWIN" = xyes]) diff --git a/glx/Makefile.am b/glx/Makefile.am index ef8677a7c..5f74ab890 100644 --- a/glx/Makefile.am +++ b/glx/Makefile.am @@ -1,4 +1,4 @@ -if AIGLX +if AIGLX_DRI_LOADER GLXDRI_LIBRARY = libglxdri.la endif diff --git a/hw/xfree86/dixmods/Makefile.am b/hw/xfree86/dixmods/Makefile.am index 365f00671..1a162ab1c 100644 --- a/hw/xfree86/dixmods/Makefile.am +++ b/hw/xfree86/dixmods/Makefile.am @@ -45,7 +45,7 @@ libwfb_la_SOURCES = $(top_builddir)/fb/fbcmap_mi.c fbmodule.c libwfb_la_CFLAGS = $(AM_CFLAGS) -DFB_ACCESS_WRAPPER libglx_la_LDFLAGS = -avoid-version -if AIGLX +if AIGLX_DRI_LOADER GLXDRI_LIBRARY = $(top_builddir)/glx/libglxdri.la endif libglx_la_LIBADD = \ From a50878682cda541766c830e49ab406c78b38d903 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Wed, 6 Apr 2011 16:23:45 +0100 Subject: [PATCH 2/3] configure: Look for Khronos OpenGL spec files using pkg-config Look for Khronos OpenGL spec files using pkg-config, rather than downloading them Also add a --with-khronos-spec-dir=PATH configure option so XWin can be directed where to find these files without using the khronos-spec-files package XWin with AIGLX requires OpenGL spec files in order to generate wrapper code which: (1) thunks from the glapi dispatch table which uses the default cdecl calling convention to native GL functions using the stdcall calling convention. (2) performs function address lookup for OpenGL 1.2+ functions, which are treated as extensions and so not directly linkable. v2: KHRONOS_SPEC_DIR is only valid when XWIN_GLX_WINDOWS is defined. Avoid 'make dist' seeing invalid dependencies by only including rules using KHRONOS_SPEC_DIR if XWIN_GLX_WINDOWS is defined Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison Reviewed-by: Ian Romanick --- configure.ac | 13 +++++++++++++ hw/xwin/glx/.gitignore | 4 ---- hw/xwin/glx/Makefile.am | 33 ++++++++------------------------- 3 files changed, 21 insertions(+), 29 deletions(-) diff --git a/configure.ac b/configure.ac index 30701b0cf..df2f9b62a 100644 --- a/configure.ac +++ b/configure.ac @@ -598,6 +598,9 @@ AC_ARG_ENABLE(glx-tls, AS_HELP_STRING([--enable-glx-tls], [Build GLX with GLX_USE_TLS=yes fi]) AC_SUBST(GLX_TLS, ${GLX_USE_TLS}) +AC_ARG_WITH(khronos-spec-dir, AS_HELP_STRING([--with-khronos-spec-dir=PATH], [Path to Khronos OpenGL registry database files (default: auto)]), + [KHRONOS_SPEC_DIR="${withval}"], + [KHRONOS_SPEC_DIR=auto]) dnl Extensions. AC_ARG_ENABLE(registry, AS_HELP_STRING([--disable-registry], [Build string registry module (default: enabled)]), [XREGISTRY=$enableval], [XREGISTRY=yes]) @@ -1854,6 +1857,16 @@ if test "x$XWIN" = xyes; then AC_DEFINE(DDXOSVERRORF, 1, [Use OsVendorVErrorF]) AC_DEFINE(DDXBEFORERESET, 1, [Use ddxBeforeReset ]) + +dnl XWin with AIGLX requires OpenGL spec files in order to generate wrapper code for native GL functions + if [test "x$XWIN" = xyes && test "x$AIGLX" = xyes] ; then + if test "x$KHRONOS_SPEC_DIR" = "xauto" ; then + PKG_CHECK_MODULES([KHRONOS_OPENGL_REGISTRY], [khronos-opengl-registry]) + KHRONOS_SPEC_DIR=`pkg-config khronos-opengl-registry --variable=specdir` + fi + AC_SUBST(KHRONOS_SPEC_DIR) + fi + fi AM_CONDITIONAL(XWIN, [test "x$XWIN" = xyes]) AM_CONDITIONAL(XWIN_MULTIWINDOW, [test "x$XWIN" = xyes]) diff --git a/hw/xwin/glx/.gitignore b/hw/xwin/glx/.gitignore index e7c7617e9..20d1c1e19 100644 --- a/hw/xwin/glx/.gitignore +++ b/hw/xwin/glx/.gitignore @@ -1,8 +1,4 @@ # ignore downloaded and generated files generated_gl_wrappers.c generated_wgl_wrappers.c -gl.spec -gl.tm -wgl.tm -wglext.spec wglext.h diff --git a/hw/xwin/glx/Makefile.am b/hw/xwin/glx/Makefile.am index 303ff53f2..499e3cb82 100644 --- a/hw/xwin/glx/Makefile.am +++ b/hw/xwin/glx/Makefile.am @@ -25,36 +25,19 @@ AM_CFLAGS = -DHAVE_XWIN_CONFIG_H $(DIX_CFLAGS) \ -I$(top_srcdir) \ -I$(top_srcdir)/hw/xwin/ -glwrap.c: generated_gl_wrappers.c -wgl_ext_api.c: generated_wgl_wrappers.c wglext.h -wgl_ext_api.h: wglext.h -indirect.c: wgl_ext_api.h +if XWIN_GLX_WINDOWS +generated_gl_wrappers.c: gen_gl_wrappers.py $(KHRONOS_SPEC_DIR)/gl.spec $(KHRONOS_SPEC_DIR)/gl.tm + $(srcdir)/gen_gl_wrappers.py --spec=$(KHRONOS_SPEC_DIR)/gl.spec --typemap=$(KHRONOS_SPEC_DIR)/gl.tm --dispatch-header=$(top_srcdir)/glx/dispatch.h --staticwrappers >generated_gl_wrappers.c -SPEC_FILES = gl.spec gl.tm wglext.spec wgl.tm - -gl.spec: - wget http://www.opengl.org/registry/api/gl.spec - -gl.tm: - wget http://www.opengl.org/registry/api/gl.tm - -wglext.spec: - wget http://www.opengl.org/registry/api/wglext.spec - -wgl.tm: - wget http://www.opengl.org/registry/api/wgl.tm - -generated_gl_wrappers.c: gen_gl_wrappers.py gl.spec gl.tm - $(srcdir)/gen_gl_wrappers.py --spec=`test -e gl.spec || echo $(srcdir)/`gl.spec --typemap=`test -e gl.tm || echo $(srcdir)/`gl.tm --dispatch-header=$(top_srcdir)/glx/dispatch.h --staticwrappers >generated_gl_wrappers.c - -generated_wgl_wrappers.c: gen_gl_wrappers.py wglext.spec wgl.tm - $(srcdir)/gen_gl_wrappers.py --spec=`test -e wglext.spec || echo $(srcdir)/`wglext.spec --typemap=`test -e wgl.tm || echo $(srcdir)/`wgl.tm --prefix=wgl --preresolve >generated_wgl_wrappers.c +generated_wgl_wrappers.c: gen_gl_wrappers.py $(KHRONOS_SPEC_DIR)/wglext.spec $(KHRONOS_SPEC_DIR)/wgl.tm + $(srcdir)/gen_gl_wrappers.py --spec=$(KHRONOS_SPEC_DIR)/wglext.spec --typemap=$(KHRONOS_SPEC_DIR)/wgl.tm --prefix=wgl --preresolve >generated_wgl_wrappers.c +endif wglext.h: wget http://www.opengl.org/registry/api/wglext.h BUILT_SOURCES = generated_gl_wrappers.c generated_wgl_wrappers.c CLEANFILES = $(BUILT_SOURCES) -DISTCLEANFILES = $(SPEC_FILES) wglext.h +DISTCLEANFILES = wglext.h -EXTRA_DIST = gen_gl_wrappers.py $(SPEC_FILES) wglext.h +EXTRA_DIST = gen_gl_wrappers.py wglext.h From 4d8735d388c3c6af27ef3d6a645e38e556f392f4 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Wed, 6 Apr 2011 16:26:45 +0100 Subject: [PATCH 3/3] hw/xwin: wglext.h should be provided by w32api, rather than downloaded wglext.h should be provided by the w32api package, rather than downloaded. if it's not, do 'wget -P /usr/include/w32api/GL http://www.opengl.org/registry/api/wglext.h' Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison Reviewed-by: Ian Romanick --- hw/xwin/glx/.gitignore | 3 +-- hw/xwin/glx/Makefile.am | 7 ++----- hw/xwin/glx/wgl_ext_api.c | 2 +- hw/xwin/glx/wgl_ext_api.h | 2 +- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/hw/xwin/glx/.gitignore b/hw/xwin/glx/.gitignore index 20d1c1e19..062fd8573 100644 --- a/hw/xwin/glx/.gitignore +++ b/hw/xwin/glx/.gitignore @@ -1,4 +1,3 @@ -# ignore downloaded and generated files +# ignore generated files generated_gl_wrappers.c generated_wgl_wrappers.c -wglext.h diff --git a/hw/xwin/glx/Makefile.am b/hw/xwin/glx/Makefile.am index 499e3cb82..cdcba35c9 100644 --- a/hw/xwin/glx/Makefile.am +++ b/hw/xwin/glx/Makefile.am @@ -26,6 +26,7 @@ AM_CFLAGS = -DHAVE_XWIN_CONFIG_H $(DIX_CFLAGS) \ -I$(top_srcdir)/hw/xwin/ if XWIN_GLX_WINDOWS + generated_gl_wrappers.c: gen_gl_wrappers.py $(KHRONOS_SPEC_DIR)/gl.spec $(KHRONOS_SPEC_DIR)/gl.tm $(srcdir)/gen_gl_wrappers.py --spec=$(KHRONOS_SPEC_DIR)/gl.spec --typemap=$(KHRONOS_SPEC_DIR)/gl.tm --dispatch-header=$(top_srcdir)/glx/dispatch.h --staticwrappers >generated_gl_wrappers.c @@ -33,11 +34,7 @@ generated_wgl_wrappers.c: gen_gl_wrappers.py $(KHRONOS_SPEC_DIR)/wglext.spec $(K $(srcdir)/gen_gl_wrappers.py --spec=$(KHRONOS_SPEC_DIR)/wglext.spec --typemap=$(KHRONOS_SPEC_DIR)/wgl.tm --prefix=wgl --preresolve >generated_wgl_wrappers.c endif -wglext.h: - wget http://www.opengl.org/registry/api/wglext.h - BUILT_SOURCES = generated_gl_wrappers.c generated_wgl_wrappers.c CLEANFILES = $(BUILT_SOURCES) -DISTCLEANFILES = wglext.h -EXTRA_DIST = gen_gl_wrappers.py wglext.h +EXTRA_DIST = gen_gl_wrappers.py diff --git a/hw/xwin/glx/wgl_ext_api.c b/hw/xwin/glx/wgl_ext_api.c index 4b8359fb1..1020916dc 100644 --- a/hw/xwin/glx/wgl_ext_api.c +++ b/hw/xwin/glx/wgl_ext_api.c @@ -35,7 +35,7 @@ #include #include #include -#include "wglext.h" +#include #include #include "glwindows.h" diff --git a/hw/xwin/glx/wgl_ext_api.h b/hw/xwin/glx/wgl_ext_api.h index e4462ac5c..77efd7069 100644 --- a/hw/xwin/glx/wgl_ext_api.h +++ b/hw/xwin/glx/wgl_ext_api.h @@ -29,7 +29,7 @@ #ifndef wgl_ext_api_h #define wgl_ext_api_h -#include "wglext.h" +#include void wglResolveExtensionProcs(void);