1bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
2bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#ifndef INLINE_WRAPPER_SW_HELPER_H
3bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#define INLINE_WRAPPER_SW_HELPER_H
4bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
5bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#include "target-helpers/inline_sw_helper.h"
6bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#include "sw/wrapper/wrapper_sw_winsys.h"
7bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
8bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz/**
9bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz * Try to wrap a hw screen with a software screen.
10bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz * On failure will return given screen.
11bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz */
12bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantzstatic INLINE struct pipe_screen *
13bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantzsw_screen_wrap(struct pipe_screen *screen)
14bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz{
159af9e12bc57db3222d91992a69b7fd95231928f6Jakob Bornecrantz#if defined(GALLIUM_SOFTPIPE) || defined(GALLIUM_LLVMPIPE)
16bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz   struct sw_winsys *sws;
17eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz   struct pipe_screen *sw_screen = NULL;
18eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz   const char *driver;
19eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz
20eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz   driver = debug_get_option("GALLIUM_DRIVER", "native");
21eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz   if (strcmp(driver, "native") == 0)
22eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz      return screen;
23bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
24f8f3baa43a3954b7078e5e24b41ae123f398bff8Jakob Bornecrantz   sws = wrapper_sw_winsys_wrap_pipe_screen(screen);
25bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz   if (!sws)
26bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz      goto err;
27bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
28eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz   sw_screen = sw_screen_create_named(sws, driver);
29eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz
30eb7cf3d2a64875d594e1c71b835a9e9704b7a8d6Jakob Bornecrantz   if (!sw_screen)
31bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz      goto err_winsys;
32bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
33bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz   return sw_screen;
34bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
35bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantzerr_winsys:
3644207ff71b3d53b30cf6c3e52c84ddc5cd44b424Jakob Bornecrantz   return wrapper_sw_winsys_dewrap_pipe_screen(sws);
37bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantzerr:
389af9e12bc57db3222d91992a69b7fd95231928f6Jakob Bornecrantz#endif
3944207ff71b3d53b30cf6c3e52c84ddc5cd44b424Jakob Bornecrantz   return screen;
40bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz}
41bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz
42bd739e95763d8051679649cc44d16d4fcbb0fec1Jakob Bornecrantz#endif
43