1 2#ifndef INLINE_SW_HELPER_H 3#define INLINE_SW_HELPER_H 4 5#include "pipe/p_compiler.h" 6#include "util/u_debug.h" 7#include "state_tracker/sw_winsys.h" 8 9#ifdef GALLIUM_SWR 10#include "swr/swr_public.h" 11#endif 12 13/* Helper function to choose and instantiate one of the software rasterizers: 14 * llvmpipe, softpipe. 15 */ 16 17#ifdef GALLIUM_SOFTPIPE 18#include "softpipe/sp_public.h" 19#endif 20 21#ifdef GALLIUM_LLVMPIPE 22#include "llvmpipe/lp_public.h" 23#endif 24 25#ifdef GALLIUM_VIRGL 26#include "virgl/virgl_public.h" 27#include "virgl/vtest/virgl_vtest_public.h" 28#endif 29 30static inline struct pipe_screen * 31sw_screen_create_named(struct sw_winsys *winsys, const char *driver) 32{ 33 struct pipe_screen *screen = NULL; 34 35#if defined(GALLIUM_LLVMPIPE) 36 if (screen == NULL && strcmp(driver, "llvmpipe") == 0) 37 screen = llvmpipe_create_screen(winsys); 38#endif 39 40#if defined(GALLIUM_VIRGL) 41 if (screen == NULL && strcmp(driver, "virpipe") == 0) { 42 struct virgl_winsys *vws; 43 vws = virgl_vtest_winsys_wrap(winsys); 44 screen = virgl_create_screen(vws); 45 } 46#endif 47 48#if defined(GALLIUM_SOFTPIPE) 49 if (screen == NULL && strcmp(driver, "softpipe") == 0) 50 screen = softpipe_create_screen(winsys); 51#endif 52 53#if defined(GALLIUM_SWR) 54 if (screen == NULL && strcmp(driver, "swr") == 0) 55 screen = swr_create_screen(winsys); 56#endif 57 58 return screen; 59} 60 61 62static inline struct pipe_screen * 63sw_screen_create(struct sw_winsys *winsys) 64{ 65 const char *default_driver; 66 const char *driver; 67 68#if defined(GALLIUM_LLVMPIPE) 69 default_driver = "llvmpipe"; 70#elif defined(GALLIUM_SOFTPIPE) 71 default_driver = "softpipe"; 72#elif defined(GALLIUM_SWR) 73 default_driver = "swr"; 74#else 75 default_driver = ""; 76#endif 77 78 driver = debug_get_option("GALLIUM_DRIVER", default_driver); 79 return sw_screen_create_named(winsys, driver); 80} 81 82#endif 83