summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/targets/libgl-gdi/libgl_gdi.c28
1 files changed, 23 insertions, 5 deletions
diff --git a/src/gallium/targets/libgl-gdi/libgl_gdi.c b/src/gallium/targets/libgl-gdi/libgl_gdi.c
index 922c18667ee..12576db52c2 100644
--- a/src/gallium/targets/libgl-gdi/libgl_gdi.c
+++ b/src/gallium/targets/libgl-gdi/libgl_gdi.c
@@ -51,9 +51,12 @@
#include "llvmpipe/lp_public.h"
#endif
+#ifdef HAVE_SWR
+#include "swr/swr_public.h"
+#endif
static boolean use_llvmpipe = FALSE;
-
+static boolean use_swr = FALSE;
static struct pipe_screen *
gdi_screen_create(void)
@@ -69,6 +72,8 @@ gdi_screen_create(void)
#ifdef HAVE_LLVMPIPE
default_driver = "llvmpipe";
+#elif HAVE_SWR
+ default_driver = "swr";
#else
default_driver = "softpipe";
#endif
@@ -78,15 +83,21 @@ gdi_screen_create(void)
#ifdef HAVE_LLVMPIPE
if (strcmp(driver, "llvmpipe") == 0) {
screen = llvmpipe_create_screen( winsys );
+ if (screen)
+ use_llvmpipe = TRUE;
+ }
+#endif
+#ifdef HAVE_SWR
+ if (strcmp(driver, "swr") == 0) {
+ screen = swr_create_screen( winsys );
+ if (screen)
+ use_swr = TRUE;
}
-#else
- (void) driver;
#endif
+ (void) driver;
if (screen == NULL) {
screen = softpipe_create_screen( winsys );
- } else {
- use_llvmpipe = TRUE;
}
if(!screen)
@@ -128,6 +139,13 @@ gdi_present(struct pipe_screen *screen,
}
#endif
+#ifdef HAVE_SWR
+ if (use_swr) {
+ swr_gdi_swap(screen, res, hDC);
+ return;
+ }
+#endif
+
winsys = softpipe_screen(screen)->winsys,
dt = softpipe_resource(res)->dt,
gdi_sw_display(winsys, dt, hDC);