diff options
Diffstat (limited to 'src/gallium/state_trackers/python/st_softpipe_winsys.c')
-rw-r--r-- | src/gallium/state_trackers/python/st_softpipe_winsys.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/gallium/state_trackers/python/st_softpipe_winsys.c b/src/gallium/state_trackers/python/st_softpipe_winsys.c index 0a332aaa9f..8584bad467 100644 --- a/src/gallium/state_trackers/python/st_softpipe_winsys.c +++ b/src/gallium/state_trackers/python/st_softpipe_winsys.c @@ -35,27 +35,29 @@ struct pipe_screen * -st_software_screen_create(void) +st_software_screen_create(const char *driver) { struct sw_winsys *ws; - const char *default_driver; - const char *driver; struct pipe_screen *screen = NULL; + if (!driver) { + const char *default_driver; + #if defined(HAVE_LLVMPIPE) - default_driver = "llvmpipe"; + default_driver = "llvmpipe"; #elif defined(HAVE_SOFTPIPE) - default_driver = "softpipe"; + default_driver = "softpipe"; #else - default_driver = ""; + default_driver = ""; #endif + driver = debug_get_option("GALLIUM_DRIVER", default_driver); + } + ws = null_sw_create(); if(!ws) return NULL; - driver = debug_get_option("GALLIUM_DRIVER", default_driver); - #ifdef HAVE_LLVMPIPE if (strcmp(driver, "llvmpipe") == 0) { screen = llvmpipe_create_screen(ws); @@ -68,5 +70,9 @@ st_software_screen_create(void) } #endif + if (!screen) { + ws->destroy(ws); + } + return screen; } |