diff options
author | George Sapountzis <[email protected]> | 2010-03-26 18:44:40 +0200 |
---|---|---|
committer | George Sapountzis <[email protected]> | 2010-03-26 18:44:40 +0200 |
commit | 3ae082f00cad3f2323a3747fe3b6f02b8f8c5285 (patch) | |
tree | d5f74c2988cb77070d3a6b6e09bd69b720c2be6c /src/gallium/targets/dri-swrast | |
parent | d9b6552d85cfe54f2e8b9c277e05e23d84058e0b (diff) |
swrastg: allow for any of the software rasterizers.
This function should be put in targets/common or winsys/sw/common and shared
with targers/libgl-xlib and winsys/sw/drm.
For targets/common, you get layering violations in the build system unless
all of drm_api's are moved under targets.
Diffstat (limited to 'src/gallium/targets/dri-swrast')
-rw-r--r-- | src/gallium/targets/dri-swrast/swrast_drm_api.c | 70 |
1 files changed, 56 insertions, 14 deletions
diff --git a/src/gallium/targets/dri-swrast/swrast_drm_api.c b/src/gallium/targets/dri-swrast/swrast_drm_api.c index 224651603d1..1fdfcccf883 100644 --- a/src/gallium/targets/dri-swrast/swrast_drm_api.c +++ b/src/gallium/targets/dri-swrast/swrast_drm_api.c @@ -32,6 +32,16 @@ #include "state_tracker/sw_winsys.h" #include "dri_sw_winsys.h" +/* Copied from targets/libgl-xlib. + * + * TODO: + * This function should be put in targets/common or winsys/sw/common and shared + * with targets/libgl-xlib and winsys/sw/drm. + * + * For targets/common, you get layering violations in the build system unless + * all of drm_api's are moved under targets. + */ + #ifdef GALLIUM_SOFTPIPE #include "softpipe/sp_public.h" #endif @@ -40,10 +50,51 @@ #include "llvmpipe/lp_public.h" #endif +#ifdef GALLIUM_CELL +#include "cell/ppu/cell_public.h" +#endif + static struct pipe_screen * -swrast_create_screen(struct drm_api *api, - int drmFD, - struct drm_create_screen_arg *arg) +swrast_create_screen(struct sw_winsys *winsys) +{ + const char *default_driver; + const char *driver; + struct pipe_screen *screen = NULL; + +#if defined(GALLIUM_CELL) + default_driver = "cell"; +#elif defined(GALLIUM_LLVMPIPE) + default_driver = "llvmpipe"; +#elif defined(GALLIUM_SOFTPIPE) + default_driver = "softpipe"; +#else + default_driver = ""; +#endif + + driver = debug_get_option("GALLIUM_DRIVER", default_driver); + +#if defined(GALLIUM_CELL) + if (screen == NULL && strcmp(driver, "cell") == 0) + screen = cell_create_screen( winsys ); +#endif + +#if defined(GALLIUM_LLVMPIPE) + if (screen == NULL && strcmp(driver, "llvmpipe") == 0) + screen = llvmpipe_create_screen( winsys ); +#endif + +#if defined(GALLIUM_SOFTPIPE) + if (screen == NULL) + screen = softpipe_create_screen( winsys ); +#endif + + return screen; +} + +static struct pipe_screen * +swrast_drm_create_screen(struct drm_api *api, + int drmFD, + struct drm_create_screen_arg *arg) { struct sw_winsys *winsys = NULL; struct pipe_screen *screen = NULL; @@ -63,16 +114,7 @@ swrast_create_screen(struct drm_api *api, if (winsys == NULL) return NULL; -#ifdef GALLIUM_LLVMPIPE - if (!screen) - screen = llvmpipe_create_screen(winsys); -#endif - -#ifdef GALLIUM_SOFTPIPE - if (!screen) - screen = softpipe_create_screen(winsys); -#endif - + screen = swrast_create_screen(winsys); if (!screen) goto fail; @@ -95,7 +137,7 @@ static struct drm_api swrast_drm_api = { .name = "swrast", .driver_name = "swrast", - .create_screen = swrast_create_screen, + .create_screen = swrast_drm_create_screen, .destroy = swrast_drm_api_destroy, }; |