Merge branch 'xa_branch'
[mesa.git] / src / gallium / auxiliary / target-helpers / inline_wrapper_sw_helper.h
1
2 #ifndef INLINE_WRAPPER_SW_HELPER_H
3 #define INLINE_WRAPPER_SW_HELPER_H
4
5 #include "target-helpers/inline_sw_helper.h"
6 #include "sw/wrapper/wrapper_sw_winsys.h"
7
8 /**
9 * Try to wrap a hw screen with a software screen.
10 * On failure will return given screen.
11 */
12 static INLINE struct pipe_screen *
13 sw_screen_wrap(struct pipe_screen *screen)
14 {
15 struct sw_winsys *sws;
16 struct pipe_screen *sw_screen = NULL;
17 const char *driver;
18
19 driver = debug_get_option("GALLIUM_DRIVER", "native");
20 if (strcmp(driver, "native") == 0)
21 return screen;
22
23 sws = wrapper_sw_winsys_wrap_pipe_screen(screen);
24 if (!sws)
25 goto err;
26
27 sw_screen = sw_screen_create_named(sws, driver);
28
29 if (!sw_screen)
30 goto err_winsys;
31
32 return sw_screen;
33
34 err_winsys:
35 return wrapper_sw_winsys_dewrap_pipe_screen(sws);
36 err:
37 return screen;
38 }
39
40 #endif