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 */
12static INLINE struct pipe_screen *
13sw_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
35err_winsys:
36   return wrapper_sw_winsys_dewrap_pipe_screen(sws);
37err:
38#endif
39   return screen;
40}
41
42#endif
43