sw_helper.h revision b8e80941
1
2#ifndef SW_HELPER_H
3#define SW_HELPER_H
4
5#include "pipe/p_compiler.h"
6#include "util/u_debug.h"
7#include "target-helpers/sw_helper_public.h"
8#include "state_tracker/sw_winsys.h"
9
10
11/* Helper function to choose and instantiate one of the software rasterizers:
12 * llvmpipe, softpipe, swr.
13 */
14
15#ifdef GALLIUM_SOFTPIPE
16#include "softpipe/sp_public.h"
17#endif
18
19#ifdef GALLIUM_LLVMPIPE
20#include "llvmpipe/lp_public.h"
21#endif
22
23#ifdef GALLIUM_SWR
24#include "swr/swr_public.h"
25#endif
26
27#ifdef GALLIUM_VIRGL
28#include "virgl/virgl_public.h"
29#include "virgl/vtest/virgl_vtest_public.h"
30#endif
31
32static inline struct pipe_screen *
33sw_screen_create_named(struct sw_winsys *winsys, const char *driver)
34{
35   struct pipe_screen *screen = NULL;
36
37#if defined(GALLIUM_LLVMPIPE)
38   if (screen == NULL && strcmp(driver, "llvmpipe") == 0)
39      screen = llvmpipe_create_screen(winsys);
40#endif
41
42#if defined(GALLIUM_VIRGL)
43   if (screen == NULL && strcmp(driver, "virpipe") == 0) {
44      struct virgl_winsys *vws;
45      vws = virgl_vtest_winsys_wrap(winsys);
46      screen = virgl_create_screen(vws);
47   }
48#endif
49
50#if defined(GALLIUM_SOFTPIPE)
51   if (screen == NULL && strcmp(driver, "softpipe") == 0)
52      screen = softpipe_create_screen(winsys);
53#endif
54
55#if defined(GALLIUM_SWR)
56   if (screen == NULL && strcmp(driver, "swr") == 0)
57      screen = swr_create_screen(winsys);
58#endif
59
60   return screen;
61}
62
63
64struct pipe_screen *
65sw_screen_create(struct sw_winsys *winsys)
66{
67   const char *default_driver;
68   const char *driver;
69
70#if defined(GALLIUM_LLVMPIPE)
71   default_driver = "llvmpipe";
72#elif defined(GALLIUM_SOFTPIPE)
73   default_driver = "softpipe";
74#elif defined(GALLIUM_SWR)
75   default_driver = "swr";
76#else
77   default_driver = "";
78#endif
79
80   driver = debug_get_option("GALLIUM_DRIVER", default_driver);
81   return sw_screen_create_named(winsys, driver);
82}
83
84#endif
85