1bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
2bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#ifndef INLINE_SW_HELPER_H
3bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#define INLINE_SW_HELPER_H
4bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
5bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#include "pipe/p_compiler.h"
6bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#include "util/u_debug.h"
7bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#include "state_tracker/sw_winsys.h"
8bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
9bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
10bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz/* Helper function to choose and instantiate one of the software rasterizers:
11ccd4d4367f2b4e5aebfc59b832599812a4a1c7d8Kai Wasserbäch * llvmpipe, softpipe.
12bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz */
13bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
14bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#ifdef GALLIUM_SOFTPIPE
15bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#include "softpipe/sp_public.h"
16bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#endif
17bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
18bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#ifdef GALLIUM_LLVMPIPE
19bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#include "llvmpipe/lp_public.h"
20bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#endif
21bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
22eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz
23bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantzstatic INLINE struct pipe_screen *
24eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantzsw_screen_create_named(struct sw_winsys *winsys, const char *driver)
25bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz{
26bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz   struct pipe_screen *screen = NULL;
27bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
28bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#if defined(GALLIUM_LLVMPIPE)
29bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz   if (screen == NULL && strcmp(driver, "llvmpipe") == 0)
30bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz      screen = llvmpipe_create_screen(winsys);
31bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#endif
32bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
33bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#if defined(GALLIUM_SOFTPIPE)
34bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz   if (screen == NULL)
35bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz      screen = softpipe_create_screen(winsys);
36bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#endif
37bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
38bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz   return screen;
39bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz}
40bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
41eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz
42eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantzstatic INLINE struct pipe_screen *
43eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantzsw_screen_create(struct sw_winsys *winsys)
44eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz{
45eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz   const char *default_driver;
46eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz   const char *driver;
47eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz
48ccd4d4367f2b4e5aebfc59b832599812a4a1c7d8Kai Wasserbäch#if defined(GALLIUM_LLVMPIPE)
49eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz   default_driver = "llvmpipe";
50eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz#elif defined(GALLIUM_SOFTPIPE)
51eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz   default_driver = "softpipe";
52eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz#else
53eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz   default_driver = "";
54eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz#endif
55eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz
56eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz   driver = debug_get_option("GALLIUM_DRIVER", default_driver);
57eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz   return sw_screen_create_named(winsys, driver);
58eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz}
59eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz
60eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz
61bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#endif
62