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