diff --git a/driver.c b/driver.c index 5cf18e48af..b2d73fd4fb 100644 --- a/driver.c +++ b/driver.c @@ -638,6 +638,16 @@ static void find_video_driver(void) } #endif + if (driver.frontend_ctx->get_video_driver) + { + driver.video = driver.frontend_ctx->get_video_driver(); + + if (driver.video) + return; + else + RARCH_WARN("Frontend supports get_video_driver() but did not specify one.\n"); + } + int i = find_driver_index("video_driver", g_settings.video.driver); if (i >= 0) driver.video = video_drivers[i]; diff --git a/frontend/frontend.c b/frontend/frontend.c index 32b8a25c41..d830301368 100644 --- a/frontend/frontend.c +++ b/frontend/frontend.c @@ -15,6 +15,7 @@ * If not, see . */ +#include "driver.h" #include "frontend.h" #include "../general.h" diff --git a/frontend/frontend_context.h b/frontend/frontend_context.h index 9bde1ef795..4f2e0aa3e4 100644 --- a/frontend/frontend_context.h +++ b/frontend/frontend_context.h @@ -51,6 +51,9 @@ typedef void (*environment_get_t)(int *argc, char *argv[], void *args, void *params_data); typedef void (*process_args_t)(int *argc, char *argv[]); +/* avoid cyclic reference */ +typedef struct video_driver video_driver_t; + typedef struct frontend_ctx_driver { environment_get_t environment_get; @@ -66,6 +69,8 @@ typedef struct frontend_ctx_driver int (*get_rating)(void); const char *ident; + + const video_driver_t *(*get_video_driver)(void); } frontend_ctx_driver_t; extern const frontend_ctx_driver_t frontend_ctx_gx;