diff --git a/driver.c b/driver.c index 5f9e6ef14c..99ff2a7b8b 100644 --- a/driver.c +++ b/driver.c @@ -359,7 +359,7 @@ void init_drivers(int flags) rarch_system_info_t *system = rarch_system_info_get_ptr(); if (flags & DRIVER_VIDEO) - driver->video_data_own = false; + video_driver_ctl(RARCH_DISPLAY_CTL_UNSET_OWN_DRIVER, NULL); if (flags & DRIVER_AUDIO) driver->audio_data_own = false; if (flags & DRIVER_INPUT) diff --git a/driver.h b/driver.h index 5ecad2eb06..43628890d8 100644 --- a/driver.h +++ b/driver.h @@ -249,7 +249,6 @@ typedef struct driver * * Typically, if a driver intends to make use of this, it should * set this to true at the end of its 'init' function. */ - bool video_data_own; bool audio_data_own; bool input_data_own; bool camera_data_own; diff --git a/gfx/d3d/d3d.cpp b/gfx/d3d/d3d.cpp index db626075e4..132bf73ef7 100644 --- a/gfx/d3d/d3d.cpp +++ b/gfx/d3d/d3d.cpp @@ -765,7 +765,7 @@ static void *d3d_init(const video_info_t *info, input_driver_set(input, input_data); - driver->video_data_own = true; + video_driver_ctl(RARCH_DISPLAY_CTL_SET_OWN_DRIVER, NULL); return vid; } } @@ -806,7 +806,7 @@ static void *d3d_init(const video_info_t *info, vid->keep_aspect = info->force_aspect; #ifdef _XBOX - driver->video_data_own = true; + video_driver_ctl(RARCH_DISPLAY_CTL_SET_OWN_DRIVER, NULL); driver->input_data_own = true; #endif diff --git a/gfx/video_driver.c b/gfx/video_driver.c index b635733c6f..85ce93e507 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -94,6 +94,7 @@ static bool gfx_use_rgba; static uint64_t video_frame_count; static void *video_data; +static bool video_data_own; static const video_driver_t *current_video; /* Interface for "poking". */ @@ -533,7 +534,7 @@ static bool uninit_video_input(void) input_driver_ctl(RARCH_INPUT_CTL_DEINIT, NULL); if ( - !driver->video_data_own && + !video_data_own && video_data && current_video && current_video->free) @@ -553,7 +554,7 @@ static bool uninit_video_input(void) video_driver_ctl(RARCH_DISPLAY_CTL_UNSET_RGBA, NULL); current_video = NULL; - if (!driver->video_data_own) + if (!video_data_own) video_data = NULL; return true; @@ -1618,6 +1619,14 @@ bool video_driver_ctl(enum rarch_display_ctl_state state, void *data) global->console.screen.flicker_filter_index); } return true; + case RARCH_DISPLAY_CTL_SET_OWN_DRIVER: + video_data_own = true; + break; + case RARCH_DISPLAY_CTL_UNSET_OWN_DRIVER: + video_data_own = false; + break; + case RARCH_DISPLAY_CTL_OWNS_DRIVER: + return video_data_own; case RARCH_DISPLAY_CTL_NONE: default: break; diff --git a/gfx/video_driver.h b/gfx/video_driver.h index 449c6e89b1..25cd7e1639 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -313,7 +313,10 @@ enum rarch_display_ctl_state RARCH_DISPLAY_CTL_CACHED_FRAME_RENDER, RARCH_DISPLAY_CTL_CACHED_FRAME_HAS_VALID_FB, RARCH_DISPLAY_CTL_SHOW_MOUSE, - RARCH_DISPLAY_CTL_GET_FRAME_COUNT + RARCH_DISPLAY_CTL_GET_FRAME_COUNT, + RARCH_DISPLAY_CTL_SET_OWN_DRIVER, + RARCH_DISPLAY_CTL_UNSET_OWN_DRIVER, + RARCH_DISPLAY_CTL_OWNS_DRIVER }; bool video_driver_ctl(enum rarch_display_ctl_state state, void *data);