drisw: Add fallback logic for choosing a driver to use

Reviewed-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8128>
This commit is contained in:
Jesse Natalie 2020-12-08 16:32:03 -08:00 committed by Marge Bot
parent 661922f6ac
commit 27ed515c05
2 changed files with 50 additions and 32 deletions

View file

@ -76,25 +76,34 @@ sw_screen_create_named(struct sw_winsys *winsys, const char *driver)
static inline struct pipe_screen *
sw_screen_create(struct sw_winsys *winsys)
{
const char *default_driver;
const char *driver;
const char *drivers[] = {
debug_get_option("GALLIUM_DRIVER", ""),
#if defined(GALLIUM_LLVMPIPE)
default_driver = "llvmpipe";
#elif defined(GALLIUM_SOFTPIPE)
default_driver = "softpipe";
#elif defined(GALLIUM_SWR)
default_driver = "swr";
#elif defined(GALLIUM_ZINK)
default_driver = "zink";
#elif defined(GALLIUM_D3D12)
default_driver = "d3d12";
#else
default_driver = "";
"llvmpipe",
#endif
#if defined(GALLIUM_SOFTPIPE)
"softpipe",
#endif
#if defined(GALLIUM_SWR)
"swr",
#endif
#if defined(GALLIUM_ZINK)
"zink",
#endif
#if defined(GALLIUM_D3D12)
"d3d12",
#endif
};
driver = debug_get_option("GALLIUM_DRIVER", default_driver);
return sw_screen_create_named(winsys, driver);
for (unsigned i = 0; i < ARRAY_SIZE(drivers); i++) {
struct pipe_screen *screen = sw_screen_create_named(winsys, drivers[i]);
if (screen)
return screen;
/* If the env var is set, don't keep trying things */
else if (i == 0 && drivers[i][0] != '\0')
return NULL;
}
return NULL;
}
#endif

View file

@ -82,25 +82,34 @@ sw_screen_create_named(struct sw_winsys *winsys, const char *driver)
struct pipe_screen *
sw_screen_create(struct sw_winsys *winsys)
{
const char *default_driver;
const char *driver;
const char *drivers[] = {
debug_get_option("GALLIUM_DRIVER", ""),
#if defined(GALLIUM_LLVMPIPE)
default_driver = "llvmpipe";
#elif defined(GALLIUM_SOFTPIPE)
default_driver = "softpipe";
#elif defined(GALLIUM_SWR)
default_driver = "swr";
#elif defined(GALLIUM_ZINK)
default_driver = "zink";
#elif defined(GALLIUM_D3D12)
default_driver = "d3d12";
#else
default_driver = "";
"llvmpipe",
#endif
#if defined(GALLIUM_SOFTPIPE)
"softpipe",
#endif
#if defined(GALLIUM_SWR)
"swr",
#endif
#if defined(GALLIUM_ZINK)
"zink",
#endif
#if defined(GALLIUM_D3D12)
"d3d12",
#endif
};
driver = debug_get_option("GALLIUM_DRIVER", default_driver);
return sw_screen_create_named(winsys, driver);
for (unsigned i = 0; i < ARRAY_SIZE(drivers); i++) {
struct pipe_screen *screen = sw_screen_create_named(winsys, drivers[i]);
if (screen)
return screen;
/* If the env var is set, don't keep trying things */
else if (i == 0 && drivers[i][0] != '\0')
return NULL;
}
return NULL;
}
#endif