diff options
Diffstat (limited to 'src/gallium/targets')
-rw-r--r-- | src/gallium/targets/egl-gdi/egl-static.c | 86 | ||||
-rw-r--r-- | src/gallium/targets/egl/Makefile | 3 | ||||
-rw-r--r-- | src/gallium/targets/egl/egl.c | 99 | ||||
-rw-r--r-- | src/gallium/targets/egl/egl.h | 44 | ||||
-rw-r--r-- | src/gallium/targets/egl/st_GL.c | 20 | ||||
-rw-r--r-- | src/gallium/targets/egl/st_GLESv1_CM.c | 6 | ||||
-rw-r--r-- | src/gallium/targets/egl/st_GLESv2.c | 6 | ||||
-rw-r--r-- | src/gallium/targets/egl/st_OpenVG.c | 2 | ||||
-rw-r--r-- | src/gallium/targets/libgl-xlib/Makefile | 13 | ||||
-rw-r--r-- | src/gallium/targets/libgl-xlib/SConscript | 4 | ||||
-rw-r--r-- | src/gallium/targets/libgl-xlib/xlib.c | 12 |
11 files changed, 144 insertions, 151 deletions
diff --git a/src/gallium/targets/egl-gdi/egl-static.c b/src/gallium/targets/egl-gdi/egl-static.c index 4655d79117..da6e5ce339 100644 --- a/src/gallium/targets/egl-gdi/egl-static.c +++ b/src/gallium/targets/egl-gdi/egl-static.c @@ -35,27 +35,6 @@ static struct st_api *stapis[ST_API_COUNT]; -static uint -get_api_mask(void) -{ - uint api_mask = 0x0; - -#if FEATURE_GL - api_mask |= 1 << ST_API_OPENGL; -#endif -#if FEATURE_ES1 - api_mask |= 1 << ST_API_OPENGL_ES1; -#endif -#if FEATURE_ES2 - api_mask |= 1 << ST_API_OPENGL_ES2; -#endif -#if FEATURE_VG - api_mask |= 1 << ST_API_OPENVG; -#endif - - return api_mask; -} - static struct st_api * get_st_api(enum st_api_type api) { @@ -66,28 +45,18 @@ get_st_api(enum st_api_type api) return stapi; switch (api) { -#if FEATURE_GL - case ST_API_OPENGL: - stapi = st_gl_api_create(); - break; -#endif -#if FEATURE_ES1 - case ST_API_OPENGL_ES1: - stapi = st_gl_api_create_es1(); - break; -#endif -#if FEATURE_ES2 - case ST_API_OPENGL_ES2: - stapi = st_gl_api_create_es2(); - break; +#if FEATURE_GL || FEATURE_ES1 || FEATURE_ES2 + case ST_API_OPENGL: + stapi = st_gl_api_create(); + break; #endif #if FEATURE_VG - case ST_API_OPENVG: - stapi = (struct st_api *) vg_api_get(); - break; + case ST_API_OPENVG: + stapi = (struct st_api *) vg_api_get(); + break; #endif - default: - break; + default: + break; } stapis[api] = stapi; @@ -96,27 +65,9 @@ get_st_api(enum st_api_type api) } static struct st_api * -guess_gl_api(void) +guess_gl_api(enum st_profile_type profile) { - struct st_api *stapi = NULL; - -#if FEATURE_GL - stapi = get_st_api(ST_API_OPENGL); - if (stapi) - return stapi; -#endif -#if FEATURE_ES1 - stapi = get_st_api(ST_API_OPENGL_ES1); - if (stapi) - return stapi; -#endif -#if FEATURE_ES2 - stapi = get_st_api(ST_API_OPENGL_ES2); - if (stapi) - return stapi; -#endif - - return stapi; + return get_st_api(ST_API_OPENGL); } static struct pipe_screen * @@ -140,10 +91,19 @@ create_sw_screen(struct sw_winsys *ws) static void init_loader(struct egl_g3d_loader *loader) { - if (loader->api_mask) - return; +#if FEATURE_GL + loader->profile_masks[ST_API_OPENGL] |= ST_PROFILE_DEFAULT_MASK; +#endif +#if FEATURE_ES1 + loader->profile_masks[ST_API_OPENGL] |= ST_PROFILE_OPENGL_ES1_MASK; +#endif +#if FEATURE_ES2 + loader->profile_masks[ST_API_OPENGL] |= ST_PROFILE_OPENGL_ES2_MASK; +#endif +#if FEATURE_VG + loader->profile_masks[ST_API_OPENVG] |= ST_PROFILE_DEFAULT_MASK; +#endif - loader->api_mask = get_api_mask(); loader->get_st_api = get_st_api; loader->guess_gl_api = guess_gl_api; loader->create_drm_screen = create_drm_screen; diff --git a/src/gallium/targets/egl/Makefile b/src/gallium/targets/egl/Makefile index 2784fd0d10..78f7241199 100644 --- a/src/gallium/targets/egl/Makefile +++ b/src/gallium/targets/egl/Makefile @@ -126,7 +126,8 @@ endif # OpenGL state tracker GL_CPPFLAGS := -I$(TOP)/src/mesa $(API_DEFINES) -GL_SYS := $(DRI_LIB_DEPS) -L$(TOP)/$(LIB_DIR) -l$(GL_LIB) +# do not link to $(GL_LIB) as the it supports GLES too +GL_SYS := $(DRI_LIB_DEPS) GL_LIBS := $(TOP)/src/mesa/libmesagallium.a # OpenGL ES 1.x state tracker diff --git a/src/gallium/targets/egl/egl.c b/src/gallium/targets/egl/egl.c index a573b21217..786d5d1105 100644 --- a/src/gallium/targets/egl/egl.c +++ b/src/gallium/targets/egl/egl.c @@ -37,6 +37,8 @@ #include "state_tracker/drm_driver.h" #include "common/egl_g3d_loader.h" +#include "egl.h" + struct egl_g3d_loader egl_g3d_loader; static struct st_module { @@ -98,6 +100,8 @@ load_st_module(struct st_module *stmod, { struct st_api *(*create_api)(void); + _eglLog(_EGL_DEBUG, "searching for st module %s", name); + stmod->name = loader_strdup(name); if (stmod->name) _eglSearchPathForEach(dlopen_st_module_cb, (void *) stmod); @@ -180,14 +184,11 @@ load_pipe_module(struct pipe_module *pmod, const char *name) } } - if (!pmod->drmdd) - pmod->name = NULL; - return (pmod->drmdd != NULL); } static struct st_api * -get_st_api(enum st_api_type api) +get_st_api_full(enum st_api_type api, enum st_profile_type profile) { struct st_module *stmod = &st_modules[api]; const char *names[8], *symbol; @@ -199,17 +200,19 @@ get_st_api(enum st_api_type api) switch (api) { case ST_API_OPENGL: symbol = ST_CREATE_OPENGL_SYMBOL; - names[count++] = "GL"; - break; - case ST_API_OPENGL_ES1: - symbol = ST_CREATE_OPENGL_ES1_SYMBOL; - names[count++] = "GLESv1_CM"; - names[count++] = "GL"; - break; - case ST_API_OPENGL_ES2: - symbol = ST_CREATE_OPENGL_ES2_SYMBOL; - names[count++] = "GLESv2"; - names[count++] = "GL"; + switch (profile) { + case ST_PROFILE_OPENGL_ES1: + names[count++] = "GLESv1_CM"; + names[count++] = "GL"; + break; + case ST_PROFILE_OPENGL_ES2: + names[count++] = "GLESv2"; + names[count++] = "GL"; + break; + default: + names[count++] = "GL"; + break; + } break; case ST_API_OPENVG: symbol = ST_CREATE_OPENVG_SYMBOL; @@ -230,7 +233,7 @@ get_st_api(enum st_api_type api) } if (!stmod->stapi) { - EGLint level = (egl_g3d_loader.api_mask & (1 << api)) ? + EGLint level = (egl_g3d_loader.profile_masks[api]) ? _EGL_WARNING : _EGL_DEBUG; _eglLog(level, "unable to load " ST_PREFIX "%s" UTIL_DL_EXT, names[0]); } @@ -241,50 +244,31 @@ get_st_api(enum st_api_type api) } static struct st_api * -guess_gl_api(void) +get_st_api(enum st_api_type api) { - struct st_api *stapi; - int gl_apis[] = { - ST_API_OPENGL, - ST_API_OPENGL_ES1, - ST_API_OPENGL_ES2, - -1 - }; - int i, api = -1; - - /* determine the api from the loaded libraries */ - for (i = 0; gl_apis[i] != -1; i++) { - if (st_modules[gl_apis[i]].stapi) { - api = gl_apis[i]; - break; - } - } - /* determine the api from the linked libraries */ - if (api == -1) { - struct util_dl_library *self = util_dl_open(NULL); + enum st_profile_type profile = ST_PROFILE_DEFAULT; + + /* determine the profile from the linked libraries */ + if (api == ST_API_OPENGL) { + struct util_dl_library *self; + self = util_dl_open(NULL); if (self) { - if (util_dl_get_proc_address(self, "glColor4d")) - api = ST_API_OPENGL; - else if (util_dl_get_proc_address(self, "glColor4x")) - api = ST_API_OPENGL_ES1; + if (util_dl_get_proc_address(self, "glColor4x")) + profile = ST_PROFILE_OPENGL_ES1; else if (util_dl_get_proc_address(self, "glShaderBinary")) - api = ST_API_OPENGL_ES2; + profile = ST_PROFILE_OPENGL_ES2; util_dl_close(self); } } - stapi = (api != -1) ? get_st_api(api) : NULL; - if (!stapi) { - for (i = 0; gl_apis[i] != -1; i++) { - api = gl_apis[i]; - stapi = get_st_api(api); - if (stapi) - break; - } - } + return get_st_api_full(api, profile); +} - return stapi; +static struct st_api * +guess_gl_api(enum st_profile_type profile) +{ + return get_st_api_full(ST_API_OPENGL, profile); } static struct pipe_module * @@ -318,7 +302,7 @@ static struct pipe_screen * create_drm_screen(const char *name, int fd) { struct pipe_module *pmod = get_pipe_module(name); - return (pmod && pmod->drmdd->create_screen) ? + return (pmod && pmod->drmdd && pmod->drmdd->create_screen) ? pmod->drmdd->create_screen(fd) : NULL; } @@ -333,23 +317,20 @@ create_sw_screen(struct sw_winsys *ws) static const struct egl_g3d_loader * loader_init(void) { - uint api_mask = 0x0; - /* TODO detect at runtime? */ #if FEATURE_GL - api_mask |= 1 << ST_API_OPENGL; + egl_g3d_loader.profile_masks[ST_API_OPENGL] |= ST_PROFILE_DEFAULT_MASK; #endif #if FEATURE_ES1 - api_mask |= 1 << ST_API_OPENGL_ES1; + egl_g3d_loader.profile_masks[ST_API_OPENGL] |= ST_PROFILE_OPENGL_ES1_MASK; #endif #if FEATURE_ES2 - api_mask |= 1 << ST_API_OPENGL_ES2; + egl_g3d_loader.profile_masks[ST_API_OPENGL] |= ST_PROFILE_OPENGL_ES2_MASK; #endif #if FEATURE_VG - api_mask |= 1 << ST_API_OPENVG; + egl_g3d_loader.profile_masks[ST_API_OPENVG] |= ST_PROFILE_DEFAULT_MASK; #endif - egl_g3d_loader.api_mask = api_mask; egl_g3d_loader.get_st_api = get_st_api; egl_g3d_loader.guess_gl_api = guess_gl_api; egl_g3d_loader.create_drm_screen = create_drm_screen; diff --git a/src/gallium/targets/egl/egl.h b/src/gallium/targets/egl/egl.h new file mode 100644 index 0000000000..5fd0678540 --- /dev/null +++ b/src/gallium/targets/egl/egl.h @@ -0,0 +1,44 @@ +/* + * Mesa 3-D graphics library + * Version: 7.9 + * + * Copyright (C) 2010 LunarG Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Authors: + * Chia-I Wu <olv@lunarg.com> + */ + +#ifndef _EGL_H_ +#define _EGL_H_ + +#include "pipe/p_compiler.h" +#include "state_tracker/st_api.h" + +#define ST_CREATE_OPENGL_SYMBOL "st_api_create_OpenGL" +#define ST_CREATE_OPENVG_SYMBOL "st_api_create_OpenVG" + +PUBLIC struct st_api * +st_api_create_OpenGL(void); + +PUBLIC struct st_api * +st_api_create_OpenVG(void); + +#endif /* _EGL_H_ */ diff --git a/src/gallium/targets/egl/st_GL.c b/src/gallium/targets/egl/st_GL.c index 17b7bf9d48..c1df844aa4 100644 --- a/src/gallium/targets/egl/st_GL.c +++ b/src/gallium/targets/egl/st_GL.c @@ -1,26 +1,8 @@ #include "state_tracker/st_gl_api.h" -#include "state_tracker/st_api.h" +#include "egl.h" -#if FEATURE_GL PUBLIC struct st_api * st_api_create_OpenGL(void) { return st_gl_api_create(); } -#endif - -#if FEATURE_ES1 -PUBLIC struct st_api * -st_api_create_OpenGL_ES1(void) -{ - return st_gl_api_create_es1(); -} -#endif - -#if FEATURE_ES2 -PUBLIC struct st_api * -st_api_create_OpenGL_ES2(void) -{ - return st_gl_api_create_es2(); -} -#endif diff --git a/src/gallium/targets/egl/st_GLESv1_CM.c b/src/gallium/targets/egl/st_GLESv1_CM.c index c1652d5131..c1df844aa4 100644 --- a/src/gallium/targets/egl/st_GLESv1_CM.c +++ b/src/gallium/targets/egl/st_GLESv1_CM.c @@ -1,8 +1,8 @@ -#include "state_tracker/st_api.h" #include "state_tracker/st_gl_api.h" +#include "egl.h" PUBLIC struct st_api * -st_api_create_OpenGL_ES1(void) +st_api_create_OpenGL(void) { - return st_gl_api_create_es1(); + return st_gl_api_create(); } diff --git a/src/gallium/targets/egl/st_GLESv2.c b/src/gallium/targets/egl/st_GLESv2.c index 9c26989008..c1df844aa4 100644 --- a/src/gallium/targets/egl/st_GLESv2.c +++ b/src/gallium/targets/egl/st_GLESv2.c @@ -1,8 +1,8 @@ -#include "state_tracker/st_api.h" #include "state_tracker/st_gl_api.h" +#include "egl.h" PUBLIC struct st_api * -st_api_create_OpenGL_ES2(void) +st_api_create_OpenGL(void) { - return st_gl_api_create_es2(); + return st_gl_api_create(); } diff --git a/src/gallium/targets/egl/st_OpenVG.c b/src/gallium/targets/egl/st_OpenVG.c index e29a237479..d0bf4dbae9 100644 --- a/src/gallium/targets/egl/st_OpenVG.c +++ b/src/gallium/targets/egl/st_OpenVG.c @@ -1,5 +1,5 @@ -#include "state_tracker/st_api.h" #include "vg_api.h" +#include "egl.h" PUBLIC struct st_api * st_api_create_OpenVG(void) diff --git a/src/gallium/targets/libgl-xlib/Makefile b/src/gallium/targets/libgl-xlib/Makefile index fe0541543a..79e516a2a7 100644 --- a/src/gallium/targets/libgl-xlib/Makefile +++ b/src/gallium/targets/libgl-xlib/Makefile @@ -25,7 +25,8 @@ INCLUDE_DIRS = \ $(X11_CFLAGS) DEFINES += \ - -DGALLIUM_SOFTPIPE + -DGALLIUM_SOFTPIPE \ + -DGALLIUM_GALAHAD #-DGALLIUM_CELL will be defined by the config */ XLIB_TARGET_SOURCES = \ @@ -50,6 +51,14 @@ LIBS = \ $(CELL_SPU_LIB) \ +# LLVM +ifeq ($(MESA_LLVM),1) +DEFINES += -DGALLIUM_LLVMPIPE +GL_LIB_DEPS += $(LLVM_LIBS) +LDFLAGS += $(LLVM_LDFLAGS) +endif + + .SUFFIXES : .cpp .c.o: @@ -68,7 +77,7 @@ $(TOP)/$(LIB_DIR)/gallium: # Make the libGL.so library $(TOP)/$(LIB_DIR)/gallium/$(GL_LIB_NAME): $(XLIB_TARGET_OBJECTS) $(LIBS) Makefile $(TOP)/bin/mklib -o $(GL_LIB) \ - -linker "$(CXX)" \ + -linker "$(CXX)" -ldflags '$(LDFLAGS)' \ -major $(GL_MAJOR) -minor $(GL_MINOR) -patch $(GL_TINY) \ -cplusplus \ -install $(TOP)/$(LIB_DIR)/gallium \ diff --git a/src/gallium/targets/libgl-xlib/SConscript b/src/gallium/targets/libgl-xlib/SConscript index 88e216a65b..27b562e1d5 100644 --- a/src/gallium/targets/libgl-xlib/SConscript +++ b/src/gallium/targets/libgl-xlib/SConscript @@ -48,6 +48,10 @@ if True: env.Append(CPPDEFINES = 'GALLIUM_SOFTPIPE') env.Prepend(LIBS = [softpipe]) +if True: + env.Append(CPPDEFINES = 'GALLIUM_GALAHAD') + env.Prepend(LIBS = [galahad]) + if env['llvm']: env.Append(CPPDEFINES = 'GALLIUM_LLVMPIPE') env.Tool('udis86') diff --git a/src/gallium/targets/libgl-xlib/xlib.c b/src/gallium/targets/libgl-xlib/xlib.c index 5a9c80c856..5914f63352 100644 --- a/src/gallium/targets/libgl-xlib/xlib.c +++ b/src/gallium/targets/libgl-xlib/xlib.c @@ -78,6 +78,10 @@ st_api_create_OpenGL() #include "cell/ppu/cell_public.h" #endif +#ifdef GALLIUM_GALAHAD +#include "galahad/glhd_public.h" +#endif + static struct pipe_screen * swrast_create_screen(struct sw_winsys *winsys) { @@ -112,6 +116,14 @@ swrast_create_screen(struct sw_winsys *winsys) screen = softpipe_create_screen( winsys ); #endif +#if defined(GALLIUM_GALAHAD) + if (screen) { + struct pipe_screen *galahad_screen = galahad_screen_create(screen); + if (galahad_screen) + screen = galahad_screen; + } +#endif + return screen; } |