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