fakedri_drv.c,h: Just compile with X11 system source and we may remove bundle X11 source code. --- ./Config.kmk 2012-03-13 13:14:01.000000000 +0000 +++ ./Config.kmk 2012-03-27 23:55:28.070630137 +0100 @@ -2003,15 +2003,7 @@ ifdef VBOX_WITH_CROGL endif if1of ($(KBUILD_TARGET), freebsd linux solaris) - # VBOX_PATH_MESA_SOURCE = $(PATH_ROOT)/src/libs/mesa-7.2 - VBOX_PATH_MESA_SOURCE = $(VBOX_PATH_X11_ROOT)/mesa-7.2 - VBOX_MESA_INCS = \ - $(VBOX_PATH_MESA_SOURCE) \ - $(VBOX_PATH_MESA_SOURCE)/include \ - $(VBOX_PATH_MESA_SOURCE)/src/mesa/ \ - $(VBOX_PATH_MESA_SOURCE)/src/mesa/glapi \ - $(VBOX_PATH_MESA_SOURCE)/src/mesa/main \ - $(VBOX_PATH_MESA_SOURCE)/src/mesa/drivers/dri/common + VBOX_MESA_INCS = /usr/include/GL /usr/include/xorg /usr/include/pixman-1 endif VBOX_DARWIN_OPENGL_INST = obj/VBoxOGL/GL/ --- ./src/VBox/Additions/common/crOpenGL/Makefile.kmk.mesa 2012-09-13 09:26:18.000000000 +0100 +++ ./src/VBox/Additions/common/crOpenGL/Makefile.kmk 2012-09-23 01:08:36.032101751 +0100 @@ -63,18 +63,12 @@ VBoxOGL_TEMPLATE = VBOXCROGLR3GUES VBoxOGL_INCS = . if1of ($(KBUILD_TARGET), linux solaris freebsd) VBoxOGL_INCS += \ - $(VBOX_PATH_X11_ROOT)/libXdamage-1.1 \ - $(VBOX_PATH_X11_ROOT)/libXcomposite-0.4.0 \ - $(VBOX_PATH_X11_ROOT)/libXext-1.3.1 \ - $(VBOX_PATH_X11_ROOT)/libXfixes-4.0.3 \ - $(VBOX_PATH_X11_ROOT)/damageproto-1.1.0 \ - $(VBOX_PATH_X11_ROOT)/compositeproto-0.4 \ - $(VBOX_PATH_X11_ROOT)/fixesproto-4.0 \ - $(VBOX_PATH_X11_ROOT)/libx11-1.1.5-other \ - $(VBOX_PATH_X11_ROOT)/xextproto-7.1.1 \ - $(VBOX_PATH_X11_ROOT)/xproto-7.0.18 \ + /usr/include/x11 \ + /usr/include/xorg \ + /usr/include/pixman-1 \ $(VBOX_MESA_INCS) \ - $(PATH_ROOT)/src/VBox/Additions/x11/x11include/libdrm-2.4.13 + /usr/include/drm \ + /usr/include/libdrm VBoxOGL_DEFS += VBOX_NO_NATIVEGL endif @@ -203,11 +197,6 @@ VBoxOGL_LIBS = \ $(VBOX_LIB_OGL_CRUTIL) \ $(PATH_STAGE_LIB)/additions/VBoxOGLspuload$(VBOX_SUFF_LIB) if1of ($(KBUILD_TARGET), linux solaris freebsd) - VBoxOGL_LIBS += \ - $(PATH_STAGE_LIB)/libXcomposite.so \ - $(PATH_STAGE_LIB)/libXdamage.so \ - $(PATH_STAGE_LIB)/libXfixes.so \ - $(PATH_STAGE_LIB)/libXext.so ifdef VBoxOGL_FAKEDRI VBoxOGL_LIBS += \ dl --- ./src/VBox/Additions/common/crOpenGL/fakedri_drv.c.mesa 2012-09-13 09:26:18.000000000 +0100 +++ ./src/VBox/Additions/common/crOpenGL/fakedri_drv.c 2012-09-14 23:53:17.013381550 +0100 @@ -17,7 +17,15 @@ */ #define _GNU_SOURCE 1 +#define HAVE_STRNDUP 1 +#include <dlfcn.h> +#include <elf.h> +#include <unistd.h> +#include <xf86.h> +#include <xf86drm.h> +#include <GL/gl.h> +#include <GL/glext.h> #include "cr_error.h" #include "cr_gl.h" #include "cr_mem.h" @@ -26,23 +34,6 @@ #include "dri_glx.h" #include "iprt/mem.h" #include "iprt/err.h" -#include <dlfcn.h> -#include <elf.h> -#include <unistd.h> -/** X server message type definitions. */ -typedef enum { - X_PROBED, /* Value was probed */ - X_CONFIG, /* Value was given in the config file */ - X_DEFAULT, /* Value is a default */ - X_CMDLINE, /* Value was given on the command line */ - X_NOTICE, /* Notice */ - X_ERROR, /* Error message */ - X_WARNING, /* Warning message */ - X_INFO, /* Informational message */ - X_NONE, /* No prefix */ - X_NOT_IMPLEMENTED, /* Not implemented */ - X_UNKNOWN = -1 /* unknown -- this must always be last */ -} MessageType; #define VBOX_NO_MESA_PATCH_REPORTS @@ -104,8 +108,53 @@ static const __DRIswrastExtension *gpSwD extern const __DRIextension * __driDriverExtensions[]; +//copy from /usr/share/x11-server-source/glx/dispatch.h +#define SET_by_offset(disp, offset, fn) \ + do { \ + if ( (offset) < 0 ) { \ + /* fprintf( stderr, "[%s:%u] SET_by_offset(%p, %d, %s)!\n", */ \ + /* __func__, __LINE__, disp, offset, # fn); */ \ + /* abort(); */ \ + } \ + else { \ + ( (_glapi_proc *) (disp) )[offset] = (_glapi_proc) fn; \ + } \ + } while(0) + +// copy from glx/glapi.c + +/** + * Search the table of static entrypoint functions for the named function + * and return the corresponding glprocs_table_t entry. + */ +static const glprocs_table_t * find_entry( const char * n ) +{ + GLuint i; + for (i = 0; static_functions[i].Name_offset >= 0; i++) { + const char *testName = gl_string_table + static_functions[i].Name_offset; + if (strcmp(testName, n) == 0) { + return &static_functions[i]; + } + } + return NULL; +} + +/** + * Return dispatch table offset of the named static (built-in) function. + * Return -1 if function not found. + */ +static GLint +get_static_proc_offset(const char *funcName) +{ + const glprocs_table_t * const f = find_entry( funcName ); + if (f) { + return f->Offset; + } + return -1; +} + #define VBOX_SET_MESA_FUNC(table, name, func) \ - if (_glapi_get_proc_offset(name)>=0) SET_by_offset(table, _glapi_get_proc_offset(name), func); \ + if (get_static_proc_offset(name)>=0) SET_by_offset(table, get_static_proc_offset(name), func); \ else crWarning("%s not found in mesa table", name) #define GLAPI_ENTRY(Func) VBOX_SET_MESA_FUNC(vbox_glapi_table, "gl"#Func, cr_gl##Func); --- ./src/VBox/Additions/common/crOpenGL/fakedri_drv.h 2012-03-13 13:14:21.000000000 +0000 +++ ./src/VBox/Additions/common/crOpenGL/fakedri_drv.h 2012-03-27 23:14:15.058370962 +0100 @@ -20,13 +20,20 @@ #ifndef ___CROPENGL_FAKEDRIDRV_H #define ___CROPENGL_FAKEDRIDRV_H -#include "src/mesa/main/mtypes.h" -#include "src/mesa/main/dd.h" -#include "src/mesa/glapi/dispatch.h" -#include "src/mesa/glapi/glapi.h" -#include "src/mesa/glapi/glapitable.h" -#include "src/mesa/glapi/glapioffsets.h" -#include "src/mesa/drivers/dri/common/dri_util.h" +//#include "/usr/share/x11-server-source/glx/glapi.h" +typedef void (*_glapi_proc)(void); /* generic function pointer */ + +extern GLuint +_glapi_get_dispatch_table_size(void); + +extern struct _glapi_table * +_glapi_get_dispatch(void); + +extern void +_glapi_set_dispatch(struct _glapi_table *dispatch); + +//#include "/usr/share/x11-server-source/glx/glapioffsets.h" +#include "/usr/share/x11-server-source/glx/glprocs.h" #include "GL/internal/dri_interface.h" #include "glx_proto.h"