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 *
sw_screen_wrap(struct pipe_screen * screen)13 sw_screen_wrap(struct pipe_screen *screen)
14 {
15 #if defined(GALLIUM_SOFTPIPE) || defined(GALLIUM_LLVMPIPE)
16    struct sw_winsys *sws;
17    struct pipe_screen *sw_screen = NULL;
18    const char *driver;
19 
20    driver = debug_get_option("GALLIUM_DRIVER", "native");
21    if (strcmp(driver, "native") == 0)
22       return screen;
23 
24    sws = wrapper_sw_winsys_wrap_pipe_screen(screen);
25    if (!sws)
26       goto err;
27 
28    sw_screen = sw_screen_create_named(sws, driver);
29 
30    if (!sw_screen)
31       goto err_winsys;
32 
33    return sw_screen;
34 
35 err_winsys:
36    return wrapper_sw_winsys_dewrap_pipe_screen(sws);
37 err:
38 #endif
39    return screen;
40 }
41 
42 #endif
43