summaryrefslogtreecommitdiffstats
path: root/src/gallium/targets/dri-swrast
diff options
context:
space:
mode:
authorGeorge Sapountzis <[email protected]>2010-03-26 18:44:40 +0200
committerGeorge Sapountzis <[email protected]>2010-03-26 18:44:40 +0200
commit3ae082f00cad3f2323a3747fe3b6f02b8f8c5285 (patch)
treed5f74c2988cb77070d3a6b6e09bd69b720c2be6c /src/gallium/targets/dri-swrast
parentd9b6552d85cfe54f2e8b9c277e05e23d84058e0b (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.c70
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,
};