From 3670ef2ac5ddf7080a6599f649144bc43d618c9a Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 18 Mar 2015 19:40:00 +0100 Subject: [PATCH] Go through driver_get_ptr to grab pointer to driver struct --- audio/audio_driver.c | 65 +++++---- camera/camera_driver.c | 47 ++++--- command.c | 5 +- driver.c | 5 + driver.h | 2 +- dynamic.c | 29 ++-- frontend/frontend.c | 31 +++-- gfx/d3d/d3d.cpp | 34 ++--- gfx/d3d/render_chain.cpp | 3 +- gfx/d3d/render_chain_xdk.h | 3 +- gfx/drivers/gl.c | 29 ++-- gfx/drivers/gx_gfx.c | 9 +- gfx/drivers/sdl2_gfx.c | 25 ++-- gfx/drivers/sdl_gfx.c | 20 +-- gfx/drivers/xvideo.c | 15 ++- gfx/drivers_context/androidegl_ctx.c | 40 ++++-- gfx/drivers_context/d3d_ctx.cpp | 9 +- gfx/drivers_context/drm_egl_ctx.c | 39 ++++-- gfx/drivers_context/glx_ctx.c | 69 ++++++---- gfx/drivers_context/ps3_ctx.c | 20 +-- gfx/drivers_context/sdl_gl_ctx.c | 35 +++-- gfx/drivers_context/wayland_ctx.c | 51 ++++--- gfx/drivers_context/wgl_ctx.c | 14 +- gfx/drivers_context/xegl_ctx.c | 16 ++- gfx/drivers_shader/shader_gl_cg.c | 39 ++++-- gfx/drivers_shader/shader_glsl.c | 46 ++++--- gfx/drivers_shader/shader_hlsl.c | 33 +++-- gfx/gl_common.c | 5 +- gfx/image/image.c | 9 +- gfx/video_driver.c | 125 +++++++++-------- gfx/video_pixel_converter.c | 22 +-- gfx/video_shader_driver.c | 9 +- gfx/video_state_python.c | 12 +- gfx/video_state_tracker.c | 13 +- gfx/video_thread_wrapper.c | 3 +- input/drivers/linuxraw_input.c | 8 +- input/drivers/sdl_input.c | 5 +- input/drivers/x11_input.c | 17 ++- input/input_common.c | 7 +- input/input_driver.c | 26 ++-- input/input_overlay.c | 9 +- input/input_sensor.c | 16 ++- input/keyboard_line.c | 17 ++- libretro_version_1.c | 141 ++++++++++--------- location/location_driver.c | 50 ++++--- menu/drivers/glui.c | 9 +- menu/drivers/rgui.c | 12 +- menu/drivers/shared.h | 4 +- menu/drivers/xmb.c | 10 +- menu/menu.c | 56 ++++---- menu/menu_driver.c | 20 +-- menu/menu_entries.c | 24 ++-- menu/menu_entries_cbs_deferred_push.c | 80 ++++++----- menu/menu_entries_cbs_iterate.c | 80 ++++++----- menu/menu_entries_cbs_ok.c | 25 ++-- menu/menu_entries_cbs_representation.c | 13 +- menu/menu_entries_cbs_toggle.c | 22 +-- menu/menu_input.c | 57 ++++---- menu/menu_list.c | 49 ++++--- menu/menu_navigation.c | 42 +++--- menu/menu_setting.c | 13 +- menu/menu_shader.c | 21 +-- menu/menu_texture.c | 3 +- netplay.c | 24 ++-- record/record_driver.c | 40 +++--- retroarch.c | 179 ++++++++++++++----------- runloop.c | 63 +++++---- runloop_data.c | 38 +++--- screenshot.c | 26 ++-- settings_data.c | 16 ++- tools/retroarch-joyconfig.c | 5 + 71 files changed, 1272 insertions(+), 886 deletions(-) diff --git a/audio/audio_driver.c b/audio/audio_driver.c index 27b9837409..df209e2fd1 100644 --- a/audio/audio_driver.c +++ b/audio/audio_driver.c @@ -213,9 +213,11 @@ const char* config_get_audio_driver_options(void) void find_audio_driver(void) { + driver_t *driver = driver_get_ptr(); int i = find_driver_index("audio_driver", g_settings.audio.driver); + if (i >= 0) - driver.audio = (const audio_driver_t*)audio_driver_find_handle(i); + driver->audio = (const audio_driver_t*)audio_driver_find_handle(i); else { unsigned d; @@ -226,17 +228,19 @@ void find_audio_driver(void) RARCH_LOG_OUTPUT("\t%s\n", audio_driver_find_ident(d)); RARCH_WARN("Going to default to first audio driver...\n"); - driver.audio = (const audio_driver_t*)audio_driver_find_handle(0); + driver->audio = (const audio_driver_t*)audio_driver_find_handle(0); - if (!driver.audio) + if (!driver->audio) rarch_fail(1, "find_audio_driver()"); } } void uninit_audio(void) { - if (driver.audio_data && driver.audio) - driver.audio->free(driver.audio_data); + driver_t *driver = driver_get_ptr(); + + if (driver->audio_data && driver->audio) + driver->audio->free(driver->audio_data); free(g_extern.audio_data.conv_outsamples); g_extern.audio_data.conv_outsamples = NULL; @@ -247,12 +251,12 @@ void uninit_audio(void) if (!g_settings.audio.enable) { - driver.audio_active = false; + driver->audio_active = false; return; } - rarch_resampler_freep(&driver.resampler, - &driver.resampler_data); + rarch_resampler_freep(&driver->resampler, + &driver->resampler_data); free(g_extern.audio_data.data); g_extern.audio_data.data = NULL; @@ -269,11 +273,12 @@ void init_audio(void) { size_t outsamples_max, max_bufsamples = AUDIO_CHUNK_SIZE_NONBLOCKING * 2; runloop_t *runloop = rarch_main_get_ptr(); + driver_t *driver = driver_get_ptr(); audio_convert_init_simd(); /* Resource leaks will follow if audio is initialized twice. */ - if (driver.audio_data) + if (driver->audio_data) return; /* Accomodate rewind since at some point we might have two full buffers. */ @@ -297,7 +302,7 @@ void init_audio(void) if (!g_settings.audio.enable) { - driver.audio_active = false; + driver->audio_active = false; return; } @@ -306,10 +311,10 @@ void init_audio(void) if (g_extern.system.audio_callback.callback) { RARCH_LOG("Starting threaded audio driver ...\n"); - if (!rarch_threaded_audio_init(&driver.audio, &driver.audio_data, + if (!rarch_threaded_audio_init(&driver->audio, &driver->audio_data, *g_settings.audio.device ? g_settings.audio.device : NULL, g_settings.audio.out_rate, g_settings.audio.latency, - driver.audio)) + driver->audio)) { RARCH_ERR("Cannot open threaded audio driver ... Exiting ...\n"); rarch_fail(1, "init_audio()"); @@ -318,22 +323,22 @@ void init_audio(void) else #endif { - driver.audio_data = driver.audio->init(*g_settings.audio.device ? + driver->audio_data = driver->audio->init(*g_settings.audio.device ? g_settings.audio.device : NULL, g_settings.audio.out_rate, g_settings.audio.latency); } - if (!driver.audio_data) + if (!driver->audio_data) { RARCH_ERR("Failed to initialize audio driver. Will continue without audio.\n"); - driver.audio_active = false; + driver->audio_active = false; } g_extern.audio_data.use_float = false; - if (driver.audio_active && driver.audio->use_float(driver.audio_data)) + if (driver->audio_active && driver->audio->use_float(driver->audio_data)) g_extern.audio_data.use_float = true; - if (!g_settings.audio.sync && driver.audio_active) + if (!g_settings.audio.sync && driver->audio_active) { rarch_main_command(RARCH_CMD_AUDIO_SET_NONBLOCKING_STATE); g_extern.audio_data.chunk_size = @@ -352,13 +357,13 @@ void init_audio(void) g_extern.audio_data.src_ratio = (double)g_settings.audio.out_rate / g_extern.audio_data.in_rate; - if (!rarch_resampler_realloc(&driver.resampler_data, - &driver.resampler, + if (!rarch_resampler_realloc(&driver->resampler_data, + &driver->resampler, g_settings.audio.resampler, g_extern.audio_data.orig_src_ratio)) { RARCH_ERR("Failed to initialize resampler \"%s\".\n", g_settings.audio.resampler); - driver.audio_active = false; + driver->audio_active = false; } rarch_assert(g_extern.audio_data.data = (float*) @@ -372,13 +377,13 @@ void init_audio(void) malloc(outsamples_max * sizeof(float))); g_extern.audio_data.rate_control = false; - if (!g_extern.system.audio_callback.callback && driver.audio_active && + if (!g_extern.system.audio_callback.callback && driver->audio_active && g_settings.audio.rate_control) { - if (driver.audio->buffer_size && driver.audio->write_avail) + if (driver->audio->buffer_size && driver->audio->write_avail) { g_extern.audio_data.driver_buffer_size = - driver.audio->buffer_size(driver.audio_data); + driver->audio->buffer_size(driver->audio_data); g_extern.audio_data.rate_control = true; } else @@ -389,17 +394,18 @@ void init_audio(void) runloop->measure_data.buffer_free_samples_count = 0; - if (driver.audio_active && !g_settings.audio.mute_enable && + if (driver->audio_active && !g_settings.audio.mute_enable && g_extern.system.audio_callback.callback) { /* Threaded driver is initially stopped. */ - driver.audio->start(driver.audio_data); + driver->audio->start(driver->audio_data); } } bool audio_driver_mute_toggle(void) { - if (!driver.audio_data || !driver.audio_active) + driver_t *driver = driver_get_ptr(); + if (!driver->audio_data || !driver->audio_active) return false; g_settings.audio.mute_enable = !g_settings.audio.mute_enable; @@ -408,7 +414,7 @@ bool audio_driver_mute_toggle(void) rarch_main_command(RARCH_CMD_AUDIO_STOP); else if (!rarch_main_command(RARCH_CMD_AUDIO_START)) { - driver.audio_active = false; + driver->audio_active = false; return false; } @@ -425,8 +431,11 @@ void audio_driver_readjust_input_rate(void) double direction, adjust; int half_size, delta_mid; unsigned write_idx; - int avail = driver.audio->write_avail(driver.audio_data); runloop_t *runloop = rarch_main_get_ptr(); + driver_t *driver = driver_get_ptr(); + int avail = 0; + + avail = driver->audio->write_avail(driver->audio_data); #if 0 RARCH_LOG_OUTPUT("Audio buffer is %u%% full\n", diff --git a/camera/camera_driver.c b/camera/camera_driver.c index 409a81f23f..b834b14df7 100644 --- a/camera/camera_driver.c +++ b/camera/camera_driver.c @@ -116,9 +116,11 @@ const char* config_get_camera_driver_options(void) void find_camera_driver(void) { + driver_t *driver = driver_get_ptr(); int i = find_driver_index("camera_driver", g_settings.camera.driver); + if (i >= 0) - driver.camera = (const camera_driver_t*)camera_driver_find_handle(i); + driver->camera = (const camera_driver_t*)camera_driver_find_handle(i); else { unsigned d; @@ -130,9 +132,9 @@ void find_camera_driver(void) RARCH_WARN("Going to default to first camera driver...\n"); - driver.camera = (const camera_driver_t*)camera_driver_find_handle(0); + driver->camera = (const camera_driver_t*)camera_driver_find_handle(0); - if (!driver.camera) + if (!driver->camera) rarch_fail(1, "find_camera_driver()"); } } @@ -147,10 +149,11 @@ void find_camera_driver(void) **/ bool driver_camera_start(void) { - if (driver.camera && driver.camera_data && driver.camera->start) + driver_t *driver = driver_get_ptr(); + if (driver->camera && driver->camera_data && driver->camera->start) { if (g_settings.camera.allow) - return driver.camera->start(driver.camera_data); + return driver->camera->start(driver->camera_data); rarch_main_msg_queue_push( "Camera is explicitly disabled.\n", 1, 180, false); @@ -168,8 +171,9 @@ bool driver_camera_start(void) **/ void driver_camera_stop(void) { - if (driver.camera && driver.camera->stop && driver.camera_data) - driver.camera->stop(driver.camera_data); + driver_t *driver = driver_get_ptr(); + if (driver->camera && driver->camera->stop && driver->camera_data) + driver->camera->stop(driver->camera_data); } /** @@ -182,21 +186,26 @@ void driver_camera_stop(void) **/ void driver_camera_poll(void) { - if (driver.camera && driver.camera->poll && driver.camera_data) - driver.camera->poll(driver.camera_data, + driver_t *driver = driver_get_ptr(); + if (driver->camera && driver->camera->poll && driver->camera_data) + driver->camera->poll(driver->camera_data, g_extern.system.camera_callback.frame_raw_framebuffer, g_extern.system.camera_callback.frame_opengl_texture); } void init_camera(void) { - /* Resource leaks will follow if camera is initialized twice. */ - if (driver.camera_data) + driver_t *driver = driver_get_ptr(); + + if (driver->camera_data) + { + /* Resource leaks will follow if camera is initialized twice. */ return; + } find_camera_driver(); - driver.camera_data = driver.camera->init( + driver->camera_data = driver->camera->init( *g_settings.camera.device ? g_settings.camera.device : NULL, g_extern.system.camera_callback.caps, g_settings.camera.width ? @@ -204,10 +213,10 @@ void init_camera(void) g_settings.camera.height ? g_settings.camera.height : g_extern.system.camera_callback.height); - if (!driver.camera_data) + if (!driver->camera_data) { RARCH_ERR("Failed to initialize camera driver. Will continue without camera.\n"); - driver.camera_active = false; + driver->camera_active = false; } if (g_extern.system.camera_callback.initialized) @@ -216,13 +225,15 @@ void init_camera(void) void uninit_camera(void) { - if (driver.camera_data && driver.camera) + driver_t *driver = driver_get_ptr(); + + if (driver->camera_data && driver->camera) { if (g_extern.system.camera_callback.deinitialized) g_extern.system.camera_callback.deinitialized(); - if (driver.camera->free) - driver.camera->free(driver.camera_data); + if (driver->camera->free) + driver->camera->free(driver->camera_data); } - driver.camera_data = NULL; + driver->camera_data = NULL; } diff --git a/command.c b/command.c index 6c08b013a5..b7a1045e76 100644 --- a/command.c +++ b/command.c @@ -217,8 +217,9 @@ static bool cmd_set_shader(const char *arg) char msg[PATH_MAX_LENGTH]; const char *ext; enum rarch_shader_type type = RARCH_SHADER_NONE; + driver_t *driver = driver_get_ptr(); - if (!driver.video->set_shader) + if (!driver->video->set_shader) return false; ext = path_get_extension(arg); @@ -235,7 +236,7 @@ static bool cmd_set_shader(const char *arg) rarch_main_msg_queue_push(msg, 1, 120, true); RARCH_LOG("Applying shader \"%s\".\n", arg); - return driver.video->set_shader(driver.video_data, type, arg); + return driver->video->set_shader(driver->video_data, type, arg); } static const struct cmd_action_map action_map[] = { diff --git a/driver.c b/driver.c index f6e01021ce..787ebdbf83 100644 --- a/driver.c +++ b/driver.c @@ -423,3 +423,8 @@ void uninit_drivers(int flags) if ((flags & DRIVER_AUDIO) && !driver.audio_data_own) driver.audio_data = NULL; } + +driver_t *driver_get_ptr(void) +{ + return &driver; +} diff --git a/driver.h b/driver.h index b47f743cb0..3a386ab3d7 100644 --- a/driver.h +++ b/driver.h @@ -393,7 +393,7 @@ bool driver_update_system_av_info(const struct retro_system_av_info *info); **/ int find_driver_index(const char * label, const char *drv); -extern driver_t driver; +driver_t *driver_get_ptr(void); #ifdef __cplusplus } diff --git a/dynamic.c b/dynamic.c index ca6d83df62..a1748bebc2 100644 --- a/dynamic.c +++ b/dynamic.c @@ -465,6 +465,8 @@ void init_libretro_sym(bool dummy) **/ void uninit_libretro_sym(void) { + driver_t *driver = driver_get_ptr(); + #ifdef HAVE_DYNAMIC if (lib_handle) dylib_close(lib_handle); @@ -481,8 +483,8 @@ void uninit_libretro_sym(void) free(g_extern.system.special); free(g_extern.system.ports); memset(&g_extern.system, 0, sizeof(g_extern.system)); - driver.camera_active = false; - driver.location_active = false; + driver->camera_active = false; + driver->location_active = false; /* Performance counters no longer valid. */ retro_perf_clear(); @@ -609,6 +611,7 @@ static void rarch_log_libretro(enum retro_log_level level, bool rarch_environment_cb(unsigned cmd, void *data) { unsigned p; + driver_t *driver = driver_get_ptr(); if (ignore_environment_cb) return false; @@ -688,10 +691,10 @@ bool rarch_environment_cb(unsigned cmd, void *data) g_extern.system.rotation = rotation; - if (driver.video && driver.video->set_rotation) + if (driver->video && driver->video->set_rotation) { - if (driver.video_data) - driver.video->set_rotation(driver.video_data, rotation); + if (driver->video_data) + driver->video->set_rotation(driver->video_data, rotation); } else return false; @@ -970,7 +973,7 @@ bool rarch_environment_cb(unsigned cmd, void *data) const struct retro_audio_callback *info = (const struct retro_audio_callback*)data; - if (driver.recording_data) // A/V sync is a must. + if (driver->recording_data) // A/V sync is a must. return false; #ifdef HAVE_NETPLAY @@ -1016,9 +1019,9 @@ bool rarch_environment_cb(unsigned cmd, void *data) uint64_t *mask = (uint64_t*)data; RARCH_LOG("Environ GET_INPUT_DEVICE_CAPABILITIES.\n"); - if (driver.input && - driver.input->get_capabilities && driver.input_data) - *mask = driver.input->get_capabilities(driver.input_data); + if (driver->input && + driver->input->get_capabilities && driver->input_data) + *mask = driver->input->get_capabilities(driver->input_data); else return false; break; @@ -1044,7 +1047,7 @@ bool rarch_environment_cb(unsigned cmd, void *data) cb->start = driver_camera_start; cb->stop = driver_camera_stop; g_extern.system.camera_callback = *cb; - driver.camera_active = cb->caps != 0; + driver->camera_active = cb->caps != 0; break; } @@ -1059,7 +1062,7 @@ bool rarch_environment_cb(unsigned cmd, void *data) cb->get_position = driver_location_get_position; cb->set_interval = driver_location_set_interval; g_extern.system.location_callback = *cb; - driver.location_active = true; + driver->location_active = true; break; } @@ -1218,8 +1221,8 @@ bool rarch_environment_cb(unsigned cmd, void *data) *g_extern.fullpath = '\0'; #if defined(RARCH_CONSOLE) - if (driver.frontend_ctx && driver.frontend_ctx->set_fork) - driver.frontend_ctx->set_fork(true, true); + if (driver->frontend_ctx && driver->frontend_ctx->set_fork) + driver->frontend_ctx->set_fork(true, true); #elif defined(HAVE_DYNAMIC) rarch_main_set_state(RARCH_ACTION_STATE_LOAD_CONTENT); #endif diff --git a/frontend/frontend.c b/frontend/frontend.c index d25ff68a65..b8cac3aa80 100644 --- a/frontend/frontend.c +++ b/frontend/frontend.c @@ -85,6 +85,8 @@ void main_exit_save_config(void) **/ void main_exit(args_type() args) { + driver_t *driver = driver_get_ptr(); + g_extern.system.shutdown = false; main_exit_save_config(); @@ -93,7 +95,7 @@ void main_exit(args_type() args) { #ifdef HAVE_MENU /* Do not want menu context to live any more. */ - driver.menu_data_own = false; + driver->menu_data_own = false; #endif rarch_main_deinit(); } @@ -104,17 +106,17 @@ void main_exit(args_type() args) logger_shutdown(); #endif - if (driver.frontend_ctx && driver.frontend_ctx->deinit) - driver.frontend_ctx->deinit(args); + if (driver->frontend_ctx && driver->frontend_ctx->deinit) + driver->frontend_ctx->deinit(args); - if (driver.frontend_ctx && driver.frontend_ctx->exitspawn) - driver.frontend_ctx->exitspawn(g_settings.libretro, + if (driver->frontend_ctx && driver->frontend_ctx->exitspawn) + driver->frontend_ctx->exitspawn(g_settings.libretro, sizeof(g_settings.libretro)); rarch_main_state_free(); - if (driver.frontend_ctx && driver.frontend_ctx->shutdown) - driver.frontend_ctx->shutdown(false); + if (driver->frontend_ctx && driver->frontend_ctx->shutdown) + driver->frontend_ctx->shutdown(false); } static void check_defaults_dirs(void) @@ -273,22 +275,23 @@ returntype main_entry(signature()) declare_argv(); args_type() args = (args_type())args_initial_ptr(); int ret = 0; + driver_t *driver = driver_get_ptr(); - driver.frontend_ctx = (frontend_ctx_driver_t*)frontend_ctx_init_first(); + driver->frontend_ctx = (frontend_ctx_driver_t*)frontend_ctx_init_first(); - if (!driver.frontend_ctx) + if (!driver->frontend_ctx) RARCH_WARN("Frontend context could not be initialized.\n"); - if (driver.frontend_ctx && driver.frontend_ctx->init) - driver.frontend_ctx->init(args); + if (driver->frontend_ctx && driver->frontend_ctx->init) + driver->frontend_ctx->init(args); rarch_main_state_new(); - if (driver.frontend_ctx) + if (driver->frontend_ctx) { if (!(ret = (main_load_content(argc, argv, args, - driver.frontend_ctx->environment_get, - driver.frontend_ctx->process_args)))) + driver->frontend_ctx->environment_get, + driver->frontend_ctx->process_args)))) { return_var(ret); } diff --git a/gfx/d3d/d3d.cpp b/gfx/d3d/d3d.cpp index 3d9488e320..61f7607bc5 100644 --- a/gfx/d3d/d3d.cpp +++ b/gfx/d3d/d3d.cpp @@ -508,6 +508,7 @@ static bool d3d_construct(d3d_video_t *d3d, void **input_data) { unsigned full_x, full_y; + driver_t *driver = driver_get_ptr(); d3d->should_resize = false; #ifndef _XBOX @@ -598,9 +599,9 @@ static bool d3d_construct(d3d_video_t *d3d, win_width, win_height, NULL, NULL, NULL, d3d); - driver.display_type = RARCH_DISPLAY_WIN32; - driver.video_display = 0; - driver.video_window = (uintptr_t)d3d->hWnd; + driver->display_type = RARCH_DISPLAY_WIN32; + driver->video_display = 0; + driver->video_window = (uintptr_t)d3d->hWnd; #endif if (d3d && d3d->ctx_driver && d3d->ctx_driver->show_mouse) @@ -691,12 +692,13 @@ static const gfx_ctx_driver_t *d3d_get_context(void *data) TODO: GL core contexts through ANGLE? */ enum gfx_ctx_api api = GFX_CTX_DIRECT3D9_API; unsigned major = 9, minor = 0; + driver_t *driver = driver_get_ptr(); #if defined(_XBOX1) api = GFX_CTX_DIRECT3D8_API; major = 8; #endif - return gfx_ctx_init_first(driver.video_data, + return gfx_ctx_init_first(driver->video_data, g_settings.video.context_driver, api, major, minor, false); } @@ -705,11 +707,12 @@ static void *d3d_init(const video_info_t *info, const input_driver_t **input, void **input_data) { d3d_video_t *vid = NULL; + driver_t *driver = driver_get_ptr(); #ifdef _XBOX - if (driver.video_data) + if (driver->video_data) { - d3d_video_t *vid = (d3d_video_t*)driver.video_data; + d3d_video_t *vid = (d3d_video_t*)driver->video_data; /* Reinitialize renderchain as we * might have changed pixel formats.*/ @@ -717,13 +720,13 @@ static void *d3d_init(const video_info_t *info, if (input && input_data) { - *input = driver.input; - *input_data = driver.input_data; + *input = driver->input; + *input_data = driver->input_data; } - driver.video_data_own = true; - driver.input_data_own = true; - return driver.video_data; + driver->video_data_own = true; + driver->input_data_own = true; + return driver->video_data; } #endif @@ -763,8 +766,8 @@ static void *d3d_init(const video_info_t *info, } #ifdef _XBOX - driver.video_data_own = true; - driver.input_data_own = true; + driver->video_data_own = true; + driver->input_data_own = true; #endif return vid; @@ -1606,6 +1609,7 @@ static bool d3d_frame(void *data, const void *frame, d3d_video_t *d3d = (d3d_video_t*)data; LPDIRECT3DDEVICE d3dr = (LPDIRECT3DDEVICE)d3d->dev; runloop_t *runloop = rarch_main_get_ptr(); + driver_t *driver = driver_get_ptr(); (void)i; @@ -1708,8 +1712,8 @@ static bool d3d_frame(void *data, const void *frame, #ifdef HAVE_MENU if (runloop->is_menu - && driver.menu_ctx && driver.menu_ctx->frame) - driver.menu_ctx->frame(); + && driver->menu_ctx && driver->menu_ctx->frame) + driver->menu_ctx->frame(); #ifdef _XBOX /* TODO - should be refactored. */ diff --git a/gfx/d3d/render_chain.cpp b/gfx/d3d/render_chain.cpp index 1dd9232a01..92cf79c919 100644 --- a/gfx/d3d/render_chain.cpp +++ b/gfx/d3d/render_chain.cpp @@ -587,6 +587,7 @@ void renderchain_blit_to_texture(void *data, const void *frame, D3DLOCKED_RECT d3dlr; renderchain_t *chain = (renderchain_t*)data; Pass *first = (Pass*)&chain->passes[0]; + driver_t *driver = driver_get_ptr(); if (first->last_width != width || first->last_height != height) { @@ -594,7 +595,7 @@ void renderchain_blit_to_texture(void *data, const void *frame, NULL, D3DLOCK_NOSYSLOCK); } - d3d_texture_blit(driver.video_data, chain, first->tex, + d3d_texture_blit(driver->video_data, chain, first->tex, &d3dlr, frame, width, height, pitch); } diff --git a/gfx/d3d/render_chain_xdk.h b/gfx/d3d/render_chain_xdk.h index 1e5937d045..cb2288d37d 100644 --- a/gfx/d3d/render_chain_xdk.h +++ b/gfx/d3d/render_chain_xdk.h @@ -256,6 +256,7 @@ static void renderchain_blit_to_texture(void *data, const void *frame, { D3DLOCKED_RECT d3dlr; d3d_video_t *d3d = (d3d_video_t*)data; + driver_t *driver = driver_get_ptr(); if (d3d->last_width != width || d3d->last_height != height) { @@ -263,6 +264,6 @@ static void renderchain_blit_to_texture(void *data, const void *frame, 0, &d3dlr, NULL, D3DLOCK_NOSYSLOCK); } - d3d_texture_blit(driver.video_data, NULL, d3d->tex, + d3d_texture_blit(driver->video_data, NULL, d3d->tex, &d3dlr, frame, width, height, pitch); } diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 24ea1e6ba0..4bbd91907a 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -1286,10 +1286,12 @@ static INLINE void gl_copy_frame(gl_t *gl, const void *frame, else #endif { + driver_t *driver = driver_get_ptr(); + glPixelStorei(GL_UNPACK_ALIGNMENT, video_pixel_get_alignment(width * gl->base_size)); /* Fallback for GLES devices without GL_BGRA_EXT. */ - if (gl->base_size == 4 && driver.gfx_use_rgba) + if (gl->base_size == 4 && driver->gfx_use_rgba) { gl_convert_frame_argb8888_abgr8888(gl, gl->conv_buffer, frame, width, height, pitch); @@ -1464,6 +1466,7 @@ static bool gl_frame(void *data, const void *frame, { gl_t *gl = (gl_t*)data; runloop_t *runloop = rarch_main_get_ptr(); + driver_t *driver = driver_get_ptr(); RARCH_PERFORMANCE_INIT(frame_run); RARCH_PERFORMANCE_START(frame_run); @@ -1589,12 +1592,15 @@ static bool gl_frame(void *data, const void *frame, gl_set_prev_texture(gl, &gl->tex_info); #if defined(HAVE_MENU) - if (runloop->is_menu - && driver.menu_ctx && driver.menu_ctx->frame) - driver.menu_ctx->frame(); + { + driver_t *driver = driver_get_ptr(); + if (runloop->is_menu + && driver->menu_ctx && driver->menu_ctx->frame) + driver->menu_ctx->frame(); - if (gl->menu_texture_enable) - gl_draw_texture(gl); + if (gl->menu_texture_enable) + gl_draw_texture(gl); + } #endif if (msg && gl->font_driver && gl->font_handle) @@ -1645,7 +1651,7 @@ static bool gl_frame(void *data, const void *frame, /* Disable BFI during fast forward, slow-motion, * and pause to prevent flicker. */ if (g_settings.video.black_frame_insertion && - !driver.nonblock_state && !runloop->is_slowmotion + !driver->nonblock_state && !runloop->is_slowmotion && !runloop->is_paused) { gl->ctx_driver->swap_buffers(gl); @@ -1803,6 +1809,7 @@ static void gl_set_nonblock_state(void *data, bool state) static bool resolve_extensions(gl_t *gl) { + driver_t *driver = driver_get_ptr(); #ifndef HAVE_OPENGLES const char *vendor = NULL; const char *renderer = NULL; @@ -1842,7 +1849,7 @@ static bool resolve_extensions(gl_t *gl) RARCH_LOG("[GL]: Using ARB_sync to reduce latency.\n"); #endif - driver.gfx_use_rgba = false; + driver->gfx_use_rgba = false; #ifdef HAVE_OPENGLES2 const char *version = NULL; bool gles3 = false; @@ -1853,7 +1860,7 @@ static bool resolve_extensions(gl_t *gl) RARCH_LOG("[GL]: BGRA8888 extension found for GLES.\n"); else { - driver.gfx_use_rgba = true; + driver->gfx_use_rgba = true; RARCH_WARN("[GL]: GLES implementation does not have BGRA8888 extension.\n" "32-bit path will require conversion.\n"); } @@ -1933,6 +1940,8 @@ static bool resolve_extensions(gl_t *gl) static INLINE void gl_set_texture_fmts(gl_t *gl, bool rgb32) { + driver_t *driver = driver_get_ptr(); + gl->internal_fmt = RARCH_GL_INTERNAL_FORMAT16; gl->texture_type = RARCH_GL_TEXTURE_TYPE16; gl->texture_fmt = RARCH_GL_FORMAT16; @@ -1945,7 +1954,7 @@ static INLINE void gl_set_texture_fmts(gl_t *gl, bool rgb32) gl->texture_fmt = RARCH_GL_FORMAT32; gl->base_size = sizeof(uint32_t); - if (driver.gfx_use_rgba) + if (driver->gfx_use_rgba) { gl->internal_fmt = GL_RGBA; gl->texture_type = GL_RGBA; diff --git a/gfx/drivers/gx_gfx.c b/gfx/drivers/gx_gfx.c index 48dd667470..9d2c82541c 100644 --- a/gfx/drivers/gx_gfx.c +++ b/gfx/drivers/gx_gfx.c @@ -431,7 +431,8 @@ static void gx_set_video_mode(void *data, unsigned fbWidth, unsigned lines, static void gx_set_aspect_ratio(void *data, unsigned aspect_ratio_idx) { - gx_video_t *gx = (gx_video_t*)driver.video_data; + driver_t *driver = driver_get_ptr(); + gx_video_t *gx = (gx_video_t*)driver->video_data; if (aspect_ratio_idx == ASPECT_RATIO_SQUARE) video_viewport_set_square_pixel( @@ -934,7 +935,8 @@ static void gx_resize(void *data) static void gx_blit_line(unsigned x, unsigned y, const char *message) { - gx_video_t *gx = (gx_video_t*)driver.video_data; + driver_t *driver = driver_get_ptr(); + gx_video_t *gx = (gx_video_t*)driver->video_data; const GXColor b = { .r = 0x00, @@ -1187,7 +1189,8 @@ static bool gx_has_windowed(void *data) static void gx_free(void *data) { - gx_video_t *gx = (gx_video_t*)driver.video_data; + driver_t *driver = driver_get_ptr(); + gx_video_t *gx = (gx_video_t*)driver->video_data; #ifdef HAVE_OVERLAY gx_free_overlay(gx); diff --git a/gfx/drivers/sdl2_gfx.c b/gfx/drivers/sdl2_gfx.c index 4b47e41fe7..a0493f2769 100644 --- a/gfx/drivers/sdl2_gfx.c +++ b/gfx/drivers/sdl2_gfx.c @@ -207,6 +207,8 @@ static void sdl2_render_msg(sdl2_video_t *vid, const char *msg) static void sdl2_gfx_set_handles(sdl2_video_t *vid) { + driver_t *driver = driver_get_ptr(); + /* SysWMinfo headers are broken on OSX. */ #if defined(_WIN32) || defined(HAVE_X11) SDL_SysWMinfo info; @@ -216,13 +218,13 @@ static void sdl2_gfx_set_handles(sdl2_video_t *vid) return; #if defined(_WIN32) - driver.display_type = RARCH_DISPLAY_WIN32; - driver.video_display = 0; - driver.video_window = (uintptr_t)info.info.win.window; + driver->display_type = RARCH_DISPLAY_WIN32; + driver->video_display = 0; + driver->video_window = (uintptr_t)info.info.win.window; #elif defined(HAVE_X11) - driver.display_type = RARCH_DISPLAY_X11; - driver.video_display = (uintptr_t)info.info.x11.display; - driver.video_window = (uintptr_t)info.info.x11.window; + driver->display_type = RARCH_DISPLAY_X11; + driver->video_display = (uintptr_t)info.info.x11.display; + driver->video_window = (uintptr_t)info.info.x11.window; #endif #endif } @@ -485,6 +487,7 @@ static bool sdl2_gfx_frame(void *data, const void *frame, unsigned width, char buf[128]; sdl2_video_t *vid = (sdl2_video_t*)data; runloop_t *runloop = rarch_main_get_ptr(); + driver_t *driver = driver_get_ptr(); if (vid->should_resize) sdl_refresh_viewport(vid); @@ -505,8 +508,8 @@ static bool sdl2_gfx_frame(void *data, const void *frame, unsigned width, #ifdef HAVE_MENU if (runloop->is_menu - && driver.menu_ctx && driver.menu_ctx->frame) - driver.menu_ctx->frame(); + && driver->menu_ctx && driver->menu_ctx->frame) + driver->menu_ctx->frame(); #endif if (vid->menu.active) @@ -547,13 +550,15 @@ static bool sdl2_gfx_focus(void *data) static bool sdl2_gfx_suppress_screensaver(void *data, bool enable) { + driver_t *driver = driver_get_ptr(); + (void)data; (void)enable; - if (driver.display_type == RARCH_DISPLAY_X11) + if (driver->display_type == RARCH_DISPLAY_X11) { #ifdef HAVE_X11 - x11_suspend_screensaver(driver.video_window); + x11_suspend_screensaver(driver->video_window); #endif return true; } diff --git a/gfx/drivers/sdl_gfx.c b/gfx/drivers/sdl_gfx.c index bdb2e86a6c..a995412453 100644 --- a/gfx/drivers/sdl_gfx.c +++ b/gfx/drivers/sdl_gfx.c @@ -218,6 +218,8 @@ static void sdl_render_msg(sdl_video_t *vid, SDL_Surface *buffer, static void sdl_gfx_set_handles(void) { + driver_t *driver = driver_get_ptr(); + /* SysWMinfo headers are broken on OSX. */ #if defined(_WIN32) || defined(HAVE_X11) SDL_SysWMinfo info; @@ -227,13 +229,13 @@ static void sdl_gfx_set_handles(void) return; #if defined(_WIN32) - driver.display_type = RARCH_DISPLAY_WIN32; - driver.video_display = 0; - driver.video_window = (uintptr_t)info.window; + driver->display_type = RARCH_DISPLAY_WIN32; + driver->video_display = 0; + driver->video_window = (uintptr_t)info.window; #elif defined(HAVE_X11) - driver.display_type = RARCH_DISPLAY_X11; - driver.video_display = (uintptr_t)info.info.x11.display; - driver.video_window = (uintptr_t)info.info.x11.window; + driver->display_type = RARCH_DISPLAY_X11; + driver->video_display = (uintptr_t)info.info.x11.display; + driver->video_window = (uintptr_t)info.info.x11.window; #endif #endif } @@ -401,13 +403,15 @@ static bool sdl_gfx_focus(void *data) static bool sdl_gfx_suppress_screensaver(void *data, bool enable) { + driver_t *driver = driver_get_ptr(); + (void)data; (void)enable; #ifdef HAVE_X11 - if (driver.display_type == RARCH_DISPLAY_X11) + if (driver->display_type == RARCH_DISPLAY_X11) { - x11_suspend_screensaver(driver.video_window); + x11_suspend_screensaver(driver->video_window); return true; } #endif diff --git a/gfx/drivers/xvideo.c b/gfx/drivers/xvideo.c index dfa98e78c2..efe12cf46f 100644 --- a/gfx/drivers/xvideo.c +++ b/gfx/drivers/xvideo.c @@ -416,6 +416,7 @@ static void *xv_init(const video_info_t *video, XVisualInfo *visualinfo = NULL; XVisualInfo visualtemplate = {0}; const struct retro_game_geometry *geom = NULL; + driver_t *driver = driver_get_ptr(); xv_t *xv = (xv_t*)calloc(1, sizeof(*xv)); if (!xv) return NULL; @@ -558,9 +559,9 @@ static void *xv_init(const video_info_t *video, xv_set_nonblock_state(xv, !video->vsync); xv->focus = true; - driver.display_type = RARCH_DISPLAY_X11; - driver.video_display = (uintptr_t)xv->display; - driver.video_window = (Window)xv->window; + driver->display_type = RARCH_DISPLAY_X11; + driver->video_display = (uintptr_t)xv->display; + driver->video_window = (Window)xv->window; if (input && input_data) { @@ -785,6 +786,7 @@ static bool xv_alive(void *data) { XEvent event; xv_t *xv = (xv_t*)data; + driver_t *driver = driver_get_ptr(); while (XPending(xv->display)) { @@ -808,7 +810,7 @@ static bool xv_alive(void *data) break; case ButtonPress: - x_input_poll_wheel(driver.input_data, &event.xbutton, true); + x_input_poll_wheel(driver->input_data, &event.xbutton, true); break; case ButtonRelease: break; @@ -838,10 +840,11 @@ static bool xv_suppress_screensaver(void *data, bool enable) { (void)data; (void)enable; + driver_t *driver = driver_get_ptr(); - if (driver.display_type == RARCH_DISPLAY_X11) + if (driver->display_type == RARCH_DISPLAY_X11) { - x11_suspend_screensaver(driver.video_window); + x11_suspend_screensaver(driver->video_window); return true; } diff --git a/gfx/drivers_context/androidegl_ctx.c b/gfx/drivers_context/androidegl_ctx.c index c853fda9f8..4f5085a6b0 100644 --- a/gfx/drivers_context/androidegl_ctx.c +++ b/gfx/drivers_context/androidegl_ctx.c @@ -41,8 +41,10 @@ static bool g_es3; static void android_gfx_ctx_set_swap_interval(void *data, unsigned interval) { - gfx_ctx_android_data_t *android = (gfx_ctx_android_data_t*) - driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_android_data_t *android = NULL; + + android = (gfx_ctx_android_data_t*)driver->video_context_data; (void)data; if (!android) @@ -84,8 +86,10 @@ static void android_gfx_ctx_destroy_resources(gfx_ctx_android_data_t *android) static void android_gfx_ctx_destroy(void *data) { - gfx_ctx_android_data_t *android = (gfx_ctx_android_data_t*) - driver.video_context_data; + driver_t *driver = driver_get_ptr; + gfx_ctx_android_data_t *android = NULL; + + android = (gfx_ctx_android_data_t*)driver->video_context_data; (void)data; if (!android) @@ -93,17 +97,20 @@ static void android_gfx_ctx_destroy(void *data) android_gfx_ctx_destroy_resources(android); - if (driver.video_context_data) - free(driver.video_context_data); - driver.video_context_data = NULL; + if (driver->video_context_data) + free(driver->video_context_data); + driver->video_context_data = NULL; } static void android_gfx_ctx_get_video_size(void *data, unsigned *width, unsigned *height) { EGLint gl_width, gl_height; - gfx_ctx_android_data_t *android = (gfx_ctx_android_data_t*) - driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_android_data_t *android = NULL; + + android = (gfx_ctx_android_data_t*) + driver->video_context_data; *width = 0; *height = 0; @@ -139,6 +146,7 @@ static bool android_gfx_ctx_init(void *data) EGL_ALPHA_SIZE, 8, EGL_NONE }; + driver_t *driver = driver_get_ptr(); gfx_ctx_android_data_t *android = NULL; struct android_app *android_app = (struct android_app*)g_android; @@ -210,7 +218,7 @@ static bool android_gfx_ctx_init(void *data) android->g_egl_surf, android->g_egl_ctx)) goto error; - driver.video_context_data = android; + driver->video_context_data = android; return true; @@ -225,8 +233,10 @@ error: static void android_gfx_ctx_swap_buffers(void *data) { - gfx_ctx_android_data_t *android = (gfx_ctx_android_data_t*) - driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_android_data_t *android = NULL; + + android = (gfx_ctx_android_data_t*)driver->video_context_data; (void)data; @@ -348,8 +358,10 @@ static bool android_gfx_ctx_has_windowed(void *data) static void android_gfx_ctx_bind_hw_render(void *data, bool enable) { - gfx_ctx_android_data_t *android = (gfx_ctx_android_data_t*) - driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_android_data_t *android = NULL; + + android = (gfx_ctx_android_data_t*)driver->video_context_data; (void)data; diff --git a/gfx/drivers_context/d3d_ctx.cpp b/gfx/drivers_context/d3d_ctx.cpp index 3b335d2397..0556b57d9b 100644 --- a/gfx/drivers_context/d3d_ctx.cpp +++ b/gfx/drivers_context/d3d_ctx.cpp @@ -70,6 +70,8 @@ static void d3d_resize(void *data, unsigned new_width, unsigned new_height) LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { + driver_t *driver = driver_get_ptr(); + switch (message) { case WM_CREATE: @@ -95,13 +97,13 @@ LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, unsigned new_height = HIWORD(lParam); if (new_width && new_height) - d3d_resize(driver.video_data, new_width, new_height); + d3d_resize(driver->video_data, new_width, new_height); } return 0; case WM_COMMAND: if (g_settings.ui.menubar_enable) { - d3d_video_t *d3d = (d3d_video_t*)driver.video_data; + d3d_video_t *d3d = (d3d_video_t*)driver->video_data; HWND d3dr = d3d->hWnd; LRESULT ret = win32_menu_loop(d3dr, wParam); } @@ -303,7 +305,8 @@ static void gfx_ctx_d3d_check_window(void *data, bool *quit, #ifdef _XBOX static HANDLE GetFocus(void) { - d3d_video_t *d3d = (d3d_video_t*)driver.video_data; + driver_t *driver = driver_get_ptr(); + d3d_video_t *d3d = (d3d_video_t*)driver->video_data; return d3d->hWnd; } #endif diff --git a/gfx/drivers_context/drm_egl_ctx.c b/gfx/drivers_context/drm_egl_ctx.c index 6463d2ed19..ee94864e2f 100644 --- a/gfx/drivers_context/drm_egl_ctx.c +++ b/gfx/drivers_context/drm_egl_ctx.c @@ -107,7 +107,8 @@ static void sighandler(int sig) static void gfx_ctx_drm_egl_swap_interval(void *data, unsigned interval) { - gfx_ctx_drm_egl_data_t *drm = (gfx_ctx_drm_egl_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_drm_egl_data_t *drm = (gfx_ctx_drm_egl_data_t*)driver->video_context_data; (void)data; @@ -160,8 +161,9 @@ static void wait_flip(bool block) int timeout = 0; struct pollfd fds = {0}; drmEventContext evctx = {0}; + driver_t *driver = driver_get_ptr(); gfx_ctx_drm_egl_data_t *drm = (gfx_ctx_drm_egl_data_t*) - driver.video_context_data; + driver->video_context_data; fds.fd = drm->g_drm_fd; fds.events = POLLIN; @@ -202,8 +204,9 @@ static void queue_flip(void) { int ret; struct drm_fb *fb = NULL; + driver_t *driver = driver_get_ptr(); gfx_ctx_drm_egl_data_t *drm = (gfx_ctx_drm_egl_data_t*) - driver.video_context_data; + driver->video_context_data; drm->g_next_bo = gbm_surface_lock_front_buffer(drm->g_gbm_surface); @@ -223,8 +226,9 @@ static void queue_flip(void) static void gfx_ctx_drm_egl_swap_buffers(void *data) { + driver_t *driver = driver_get_ptr(); gfx_ctx_drm_egl_data_t *drm = (gfx_ctx_drm_egl_data_t*) - driver.video_context_data; + driver->video_context_data; (void)data; @@ -274,7 +278,8 @@ static void gfx_ctx_drm_egl_update_window_title(void *data) static void gfx_ctx_drm_egl_get_video_size(void *data, unsigned *width, unsigned *height) { - gfx_ctx_drm_egl_data_t *drm = (gfx_ctx_drm_egl_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_drm_egl_data_t *drm = (gfx_ctx_drm_egl_data_t*)driver->video_context_data; if (!drm) return; @@ -390,6 +395,7 @@ static bool gfx_ctx_drm_egl_init(void *data) struct string_list *gpu_descriptors = NULL; gfx_ctx_drm_egl_data_t *drm = (gfx_ctx_drm_egl_data_t*)calloc(1, sizeof(gfx_ctx_drm_egl_data_t)); + driver_t *driver = driver_get_ptr(); if (!drm) return false; @@ -523,7 +529,7 @@ nextgpu: dir_list_free(gpu_descriptors); - driver.video_context_data = drm; + driver->video_context_data = drm; return true; @@ -540,8 +546,9 @@ error: static void drm_fb_destroy_callback(struct gbm_bo *bo, void *data) { + driver_t *driver = driver_get_ptr(); struct drm_fb *fb = (struct drm_fb*)data; - gfx_ctx_drm_egl_data_t *drm = (gfx_ctx_drm_egl_data_t*)driver.video_context_data; + gfx_ctx_drm_egl_data_t *drm = (gfx_ctx_drm_egl_data_t*)driver->video_context_data; if (drm && fb->fb_id) drmModeRmFB(drm->g_drm_fd, fb->fb_id); @@ -687,8 +694,9 @@ static bool gfx_ctx_drm_egl_set_video_mode(void *data, int i, ret = 0; struct sigaction sa = {{0}}; struct drm_fb *fb = NULL; + driver_t *driver = driver_get_ptr(); gfx_ctx_drm_egl_data_t *drm = (gfx_ctx_drm_egl_data_t*) - driver.video_context_data; + driver->video_context_data; if (!drm) return false; @@ -841,8 +849,9 @@ error: static void gfx_ctx_drm_egl_destroy(void *data) { + driver_t *driver = driver_get_ptr(); gfx_ctx_drm_egl_data_t *drm = (gfx_ctx_drm_egl_data_t*) - driver.video_context_data; + driver->video_context_data; if (!drm) return; @@ -851,9 +860,9 @@ static void gfx_ctx_drm_egl_destroy(void *data) gfx_ctx_drm_egl_destroy_resources(drm); - if (driver.video_context_data) - free(driver.video_context_data); - driver.video_context_data = NULL; + if (driver->video_context_data) + free(driver->video_context_data); + driver->video_context_data = NULL; } static void gfx_ctx_drm_egl_input_driver(void *data, @@ -866,8 +875,9 @@ static void gfx_ctx_drm_egl_input_driver(void *data, static bool gfx_ctx_drm_egl_has_focus(void *data) { + driver_t *driver = driver_get_ptr(); gfx_ctx_drm_egl_data_t *drm = (gfx_ctx_drm_egl_data_t*) - driver.video_context_data; + driver->video_context_data; (void)data; if (!drm) @@ -925,8 +935,9 @@ static bool gfx_ctx_drm_egl_bind_api(void *data, static void gfx_ctx_drm_egl_bind_hw_render(void *data, bool enable) { + driver_t *driver = driver_get_ptr(); gfx_ctx_drm_egl_data_t *drm = (gfx_ctx_drm_egl_data_t*) - driver.video_context_data; + driver->video_context_data; if (!drm) return; diff --git a/gfx/drivers_context/glx_ctx.c b/gfx/drivers_context/glx_ctx.c index 144a4555c2..a6751d0a50 100644 --- a/gfx/drivers_context/glx_ctx.c +++ b/gfx/drivers_context/glx_ctx.c @@ -73,7 +73,8 @@ static void glx_sighandler(int sig) static Bool glx_wait_notify(Display *d, XEvent *e, char *arg) { - gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver->video_context_data; (void)d; (void)e; @@ -97,7 +98,8 @@ static void gfx_ctx_glx_destroy(void *data); static void gfx_ctx_glx_swap_interval(void *data, unsigned interval) { - gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver->video_context_data; glx->g_interval = interval; @@ -126,7 +128,8 @@ static void gfx_ctx_glx_check_window(void *data, bool *quit, bool *resize, unsigned *width, unsigned *height, unsigned frame_count) { XEvent event; - gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver->video_context_data; unsigned new_width = *width, new_height = *height; (void)frame_count; @@ -169,7 +172,7 @@ static void gfx_ctx_glx_check_window(void *data, bool *quit, glx->g_has_focus = false; break; case ButtonPress: - x_input_poll_wheel(driver.input_data, &event.xbutton, true); + x_input_poll_wheel(driver->input_data, &event.xbutton, true); break; case ButtonRelease: break; @@ -185,7 +188,8 @@ static void gfx_ctx_glx_check_window(void *data, bool *quit, static void gfx_ctx_glx_swap_buffers(void *data) { - gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver->video_context_data; (void)data; if (glx->g_is_double) @@ -203,11 +207,8 @@ static void gfx_ctx_glx_set_resize(void *data, static void gfx_ctx_glx_update_window_title(void *data) { char buf[128], buf_fps[128]; - gfx_ctx_glx_data_t *glx = NULL; - - (void)data; - - glx = (gfx_ctx_glx_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver->video_context_data; if (video_monitor_get_fps(buf, sizeof(buf), buf_fps, sizeof(buf_fps))) @@ -219,7 +220,8 @@ static void gfx_ctx_glx_update_window_title(void *data) static void gfx_ctx_glx_get_video_size(void *data, unsigned *width, unsigned *height) { - gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver->video_context_data; if (!glx) return; @@ -252,6 +254,8 @@ static void gfx_ctx_glx_get_video_size(void *data, static void ctx_glx_destroy_resources(gfx_ctx_glx_data_t *glx) { + driver_t *driver = driver_get_ptr(); + if (!glx) return; @@ -259,9 +263,11 @@ static void ctx_glx_destroy_resources(gfx_ctx_glx_data_t *glx) if (glx->g_dpy && glx->g_ctx) { + glFinish(); glXMakeContextCurrent(glx->g_dpy, None, None, NULL); - if (!driver.video_cache_context) + + if (!driver->video_cache_context) { if (glx->g_hw_ctx) glXDestroyContext(glx->g_dpy, glx->g_hw_ctx); @@ -309,7 +315,7 @@ static void ctx_glx_destroy_resources(gfx_ctx_glx_data_t *glx) glx->g_should_reset_mode = false; } - if (!driver.video_cache_context && glx->g_dpy) + if (!driver->video_cache_context && glx->g_dpy) { XCloseDisplay(glx->g_dpy); glx->g_dpy = NULL; @@ -340,6 +346,7 @@ static bool gfx_ctx_glx_init(void *data) int nelements, major, minor; GLXFBConfig *fbcs = NULL; gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)calloc(1, sizeof(gfx_ctx_glx_data_t)); + driver_t *driver = driver_get_ptr(); if (!glx) return false; @@ -387,7 +394,7 @@ static bool gfx_ctx_glx_init(void *data) glx->g_fbc = fbcs[0]; XFree(fbcs); - driver.video_context_data = glx; + driver->video_context_data = glx; return true; @@ -411,7 +418,8 @@ static bool gfx_ctx_glx_set_video_mode(void *data, XVisualInfo *vi = NULL; XSetWindowAttributes swa = {0}; int (*old_handler)(Display*, XErrorEvent*) = NULL; - gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver->video_context_data; struct sigaction sa = {{0}}; sa.sa_handler = glx_sighandler; @@ -572,7 +580,7 @@ static bool gfx_ctx_glx_set_video_mode(void *data, } else { - driver.video_cache_context_ack = true; + driver->video_cache_context_ack = true; RARCH_LOG("[GLX]: Using cached GL context.\n"); } @@ -623,9 +631,9 @@ static bool gfx_ctx_glx_set_video_mode(void *data, if (!x11_create_input_context(glx->g_dpy, glx->g_win, &glx->g_xim, &glx->g_xic)) goto error; - driver.display_type = RARCH_DISPLAY_X11; - driver.video_display = (uintptr_t)glx->g_dpy; - driver.video_window = (uintptr_t)glx->g_win; + driver->display_type = RARCH_DISPLAY_X11; + driver->video_display = (uintptr_t)glx->g_dpy; + driver->video_window = (uintptr_t)glx->g_win; glx->g_true_full = true_full; return true; @@ -644,7 +652,8 @@ error: static void gfx_ctx_glx_destroy(void *data) { - gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver->video_context_data; if (!glx) return; @@ -653,9 +662,9 @@ static void gfx_ctx_glx_destroy(void *data) ctx_glx_destroy_resources(glx); - if (driver.video_context_data) - free(driver.video_context_data); - driver.video_context_data = NULL; + if (driver->video_context_data) + free(driver->video_context_data); + driver->video_context_data = NULL; } static void gfx_ctx_glx_input_driver(void *data, @@ -673,7 +682,8 @@ static bool gfx_ctx_glx_has_focus(void *data) { Window win; int rev; - gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver->video_context_data; (void)data; @@ -684,10 +694,11 @@ static bool gfx_ctx_glx_has_focus(void *data) static bool gfx_ctx_glx_suppress_screensaver(void *data, bool enable) { - if (driver.display_type != RARCH_DISPLAY_X11) + driver_t *driver = driver_get_ptr(); + if (driver->display_type != RARCH_DISPLAY_X11) return false; - x11_suspend_screensaver(driver.video_window); + x11_suspend_screensaver(driver->video_window); return true; } @@ -716,7 +727,8 @@ static bool gfx_ctx_glx_bind_api(void *data, enum gfx_ctx_api api, static void gfx_ctx_glx_show_mouse(void *data, bool state) { - gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver->video_context_data; (void)data; @@ -725,7 +737,8 @@ static void gfx_ctx_glx_show_mouse(void *data, bool state) static void gfx_ctx_glx_bind_hw_render(void *data, bool enable) { - gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_glx_data_t *glx = (gfx_ctx_glx_data_t*)driver->video_context_data; if (!glx) return; diff --git a/gfx/drivers_context/ps3_ctx.c b/gfx/drivers_context/ps3_ctx.c index 63ffa907eb..1607cf9fbc 100644 --- a/gfx/drivers_context/ps3_ctx.c +++ b/gfx/drivers_context/ps3_ctx.c @@ -145,7 +145,8 @@ static void gfx_ctx_ps3_get_available_resolutions(void) static void gfx_ctx_ps3_set_swap_interval(void *data, unsigned interval) { - gfx_ctx_ps3_data_t *ps3 = (gfx_ctx_ps3_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_ps3_data_t *ps3 = (gfx_ctx_ps3_data_t*)driver->video_context_data; (void)data; @@ -227,7 +228,8 @@ static void gfx_ctx_ps3_update_window_title(void *data) static void gfx_ctx_ps3_get_video_size(void *data, unsigned *width, unsigned *height) { - gfx_ctx_ps3_data_t *ps3 = (gfx_ctx_ps3_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_ps3_data_t *ps3 = (gfx_ctx_ps3_data_t*)driver->video_context_data; (void)data; @@ -239,6 +241,7 @@ static void gfx_ctx_ps3_get_video_size(void *data, static bool gfx_ctx_ps3_init(void *data) { + driver_t *driver = driver_get_ptr(); gfx_ctx_ps3_data_t *ps3 = (gfx_ctx_ps3_data_t*) calloc(1, sizeof(gfx_ctx_ps3_data_t)); @@ -304,7 +307,7 @@ static bool gfx_ctx_ps3_init(void *data) gfx_ctx_ps3_get_available_resolutions(); - driver.video_context_data = ps3; + driver->video_context_data = ps3; return true; } @@ -332,18 +335,19 @@ static void gfx_ctx_ps3_destroy_resources(gfx_ctx_ps3_data_t *ps3) static void gfx_ctx_ps3_destroy(void *data) { - (void)data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_ps3_data_t *ps3 = (gfx_ctx_ps3_data_t*)driver->video_context_data; - gfx_ctx_ps3_data_t *ps3 = (gfx_ctx_ps3_data_t*)driver.video_context_data; + (void)data; if (!ps3) return; gfx_ctx_ps3_destroy_resources(ps3); - if (driver.video_context_data) - free(driver.video_context_data); - driver.video_context_data = NULL; + if (driver->video_context_data) + free(driver->video_context_data); + driver->video_context_data = NULL; } static void gfx_ctx_ps3_input_driver(void *data, diff --git a/gfx/drivers_context/sdl_gl_ctx.c b/gfx/drivers_context/sdl_gl_ctx.c index 1d9c43cb88..207ade851d 100644 --- a/gfx/drivers_context/sdl_gl_ctx.c +++ b/gfx/drivers_context/sdl_gl_ctx.c @@ -68,7 +68,8 @@ static void sdl_ctx_destroy_resources(gfx_ctx_sdl_data_t *sdl) static bool sdl_ctx_init(void *data) { - gfx_ctx_sdl_data_t *sdl; + gfx_ctx_sdl_data_t *sdl = NULL; + driver_t *driver = driver_get_ptr(); (void)data; @@ -93,7 +94,7 @@ static bool sdl_ctx_init(void *data) RARCH_LOG("[SDL_GL] SDL %i.%i.%i gfx context driver initialized.\n", SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL); - driver.video_context_data = sdl; + driver->video_context_data = sdl; return true; @@ -111,7 +112,8 @@ error: static void sdl_ctx_destroy(void *data) { - gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)driver->video_context_data; if (!sdl) return; @@ -120,9 +122,9 @@ static void sdl_ctx_destroy(void *data) sdl_ctx_destroy_resources(sdl); - if (driver.video_context_data) - free(driver.video_context_data); - driver.video_context_data = NULL; + if (driver->video_context_data) + free(driver->video_context_data); + driver->video_context_data = NULL; } static bool sdl_ctx_bind_api(void *data, enum gfx_ctx_api api, unsigned major, @@ -171,7 +173,8 @@ static bool sdl_ctx_set_video_mode(void *data, unsigned width, unsigned height, bool fullscreen) { unsigned fsflag = 0; - gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)driver->video_context_data; (void)data; @@ -215,7 +218,7 @@ static bool sdl_ctx_set_video_mode(void *data, unsigned width, unsigned height, #ifdef HAVE_SDL2 if (sdl->g_ctx) - driver.video_cache_context_ack = true; + driver->video_cache_context_ack = true; else { sdl->g_ctx = SDL_GL_CreateContext(sdl->g_win); @@ -239,7 +242,8 @@ error: static void sdl_ctx_get_video_size(void *data, unsigned *width, unsigned *height) { - gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)driver->video_context_data; if (!sdl) return; @@ -276,7 +280,8 @@ static void sdl_ctx_get_video_size(void *data, static void sdl_ctx_update_window_title(void *data) { char buf[128], buf_fps[128]; - gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)driver->video_context_data; if (!sdl) return; @@ -298,7 +303,8 @@ static void sdl_ctx_check_window(void *data, bool *quit, bool *resize,unsigned * unsigned *height, unsigned frame_count) { SDL_Event event; - gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)driver->video_context_data; (void)data; @@ -359,10 +365,12 @@ static void sdl_ctx_set_resize(void *data, unsigned width, unsigned height) static bool sdl_ctx_has_focus(void *data) { unsigned flags; + driver_t *driver = driver_get_ptr(); + (void)data; #ifdef HAVE_SDL2 - gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)driver.video_context_data; + gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)driver->video_context_data; flags = (SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_MOUSE_FOCUS); return (SDL_GetWindowFlags(sdl->g_win) & flags) == flags; #else @@ -387,7 +395,8 @@ static bool sdl_ctx_has_windowed(void *data) static void sdl_ctx_swap_buffers(void *data) { #ifdef HAVE_SDL2 - gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)driver.video_context_data; + driver_t *driver = driver_get_ptr(); + gfx_ctx_sdl_data_t *sdl = (gfx_ctx_sdl_data_t*)driver->video_context_data; SDL_GL_SwapWindow(sdl->g_win); #else SDL_GL_SwapBuffers(); diff --git a/gfx/drivers_context/wayland_ctx.c b/gfx/drivers_context/wayland_ctx.c index 482e538f34..f5816e1fa4 100644 --- a/gfx/drivers_context/wayland_ctx.c +++ b/gfx/drivers_context/wayland_ctx.c @@ -83,8 +83,9 @@ static void shell_surface_handle_configure(void *data, struct wl_shell_surface *shell_surface, uint32_t edges, int32_t width, int32_t height) { + driver_t *driver = driver_get_ptr(); gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*) - driver.video_context_data; + driver->video_context_data; (void)data; (void)shell_surface; @@ -114,8 +115,9 @@ static const struct wl_shell_surface_listener shell_surface_listener = { static void registry_handle_global(void *data, struct wl_registry *reg, uint32_t id, const char *interface, uint32_t version) { + driver_t *driver = driver_get_ptr(); gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*) - driver.video_context_data; + driver->video_context_data; (void)data; (void)version; @@ -236,8 +238,9 @@ static void egl_report_error(void) static void gfx_ctx_wl_swap_interval(void *data, unsigned interval) { + driver_t *driver = driver_get_ptr(); gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*) - driver.video_context_data; + driver->video_context_data; (void)data; @@ -260,8 +263,9 @@ static void gfx_ctx_wl_swap_interval(void *data, unsigned interval) static void flush_wayland_fd(void) { struct pollfd fd = {0}; + driver_t *driver = driver_get_ptr(); gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*) - driver.video_context_data; + driver->video_context_data; wl_display_dispatch_pending(wl->g_dpy); wl_display_flush(wl->g_dpy); @@ -311,8 +315,9 @@ static void gfx_ctx_wl_check_window(void *data, bool *quit, static void gfx_ctx_wl_swap_buffers(void *data) { + driver_t *driver = driver_get_ptr(); gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*) - driver.video_context_data; + driver->video_context_data; (void)data; @@ -321,8 +326,9 @@ static void gfx_ctx_wl_swap_buffers(void *data) static void gfx_ctx_wl_set_resize(void *data, unsigned width, unsigned height) { + driver_t *driver = driver_get_ptr(); gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*) - driver.video_context_data; + driver->video_context_data; (void)data; @@ -332,8 +338,9 @@ static void gfx_ctx_wl_set_resize(void *data, unsigned width, unsigned height) static void gfx_ctx_wl_update_window_title(void *data) { char buf[128], buf_fps[128]; + driver_t *driver = driver_get_ptr(); gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*) - driver.video_context_data; + driver->video_context_data; (void)data; @@ -348,8 +355,9 @@ static void gfx_ctx_wl_update_window_title(void *data) static void gfx_ctx_wl_get_video_size(void *data, unsigned *width, unsigned *height) { + driver_t *driver = driver_get_ptr(); gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*) - driver.video_context_data; + driver->video_context_data; (void)data; @@ -399,6 +407,7 @@ static bool gfx_ctx_wl_init(void *data) EGLint egl_major = 0, egl_minor = 0; EGLint num_configs; const EGLint *attrib_ptr; + driver_t *driver = driver_get_ptr(); gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*) calloc(1, sizeof(gfx_ctx_wayland_data_t)); @@ -437,7 +446,7 @@ static bool gfx_ctx_wl_init(void *data) goto error; } - driver.video_context_data = wl; + driver->video_context_data = wl; wl->g_registry = wl_display_get_registry(wl->g_dpy); wl_registry_add_listener(wl->g_registry, ®istry_listener, NULL); @@ -493,9 +502,9 @@ error: if (wl) free(wl); - if (driver.video_context_data) - free(driver.video_context_data); - driver.video_context_data = NULL; + if (driver->video_context_data) + free(driver->video_context_data); + driver->video_context_data = NULL; return false; } @@ -562,8 +571,9 @@ static EGLint *egl_fill_attribs(EGLint *attr) static void gfx_ctx_wl_destroy(void *data) { + driver_t *driver = driver_get_ptr(); gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*) - driver.video_context_data; + driver->video_context_data; (void)data; @@ -572,17 +582,18 @@ static void gfx_ctx_wl_destroy(void *data) gfx_ctx_wl_destroy_resources(wl); - if (driver.video_context_data) - free(driver.video_context_data); - driver.video_context_data = NULL; + if (driver->video_context_data) + free(driver->video_context_data); + driver->video_context_data = NULL; } static bool gfx_ctx_wl_set_video_mode(void *data, unsigned width, unsigned height, bool fullscreen) { + driver_t *driver = driver_get_ptr(); gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*) - driver.video_context_data; + driver->video_context_data; struct sigaction sa = {{0}}; sa.sa_handler = sighandler; @@ -714,8 +725,9 @@ static bool gfx_ctx_wl_bind_api(void *data, static void gfx_ctx_wl_bind_hw_render(void *data, bool enable) { + driver_t *driver = driver_get_ptr(); gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*) - driver.video_context_data; + driver->video_context_data; (void)data; @@ -843,8 +855,9 @@ static const struct wl_pointer_listener pointer_listener = { static void seat_handle_capabilities(void *data, struct wl_seat *seat, unsigned caps) { + driver_t *driver = driver_get_ptr(); gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*) - driver.video_context_data; + driver->video_context_data; if ((caps & WL_SEAT_CAPABILITY_KEYBOARD) && !wl->g_wl_keyboard) { diff --git a/gfx/drivers_context/wgl_ctx.c b/gfx/drivers_context/wgl_ctx.c index e92fc74b3c..13bad07450 100644 --- a/gfx/drivers_context/wgl_ctx.c +++ b/gfx/drivers_context/wgl_ctx.c @@ -106,6 +106,7 @@ static void create_gl_context(HWND hwnd) { bool core_context; bool debug = g_extern.system.hw_render_callback.debug_context; + driver_t *driver = driver_get_ptr(); #ifdef _WIN32 dll_handle = LoadLibrary("OpenGL32.dll"); @@ -122,7 +123,7 @@ static void create_gl_context(HWND hwnd) if (g_hrc) { RARCH_LOG("[WGL]: Using cached GL context.\n"); - driver.video_cache_context_ack = true; + driver->video_cache_context_ack = true; } else { @@ -466,6 +467,7 @@ static bool gfx_ctx_wgl_set_video_mode(void *data, bool windowed_full; RECT rect = {0}; HMONITOR hm_to_use = NULL; + driver_t *driver = driver_get_ptr(); monitor_info(¤t_mon, &hm_to_use); mon_rect = current_mon.rcMonitor; @@ -548,9 +550,9 @@ static bool gfx_ctx_wgl_set_video_mode(void *data, gfx_ctx_wgl_swap_interval(data, g_interval); - driver.display_type = RARCH_DISPLAY_WIN32; - driver.video_display = 0; - driver.video_window = (uintptr_t)g_hwnd; + driver->display_type = RARCH_DISPLAY_WIN32; + driver->video_display = 0; + driver->video_window = (uintptr_t)g_hwnd; return true; @@ -561,6 +563,8 @@ error: static void gfx_ctx_wgl_destroy(void *data) { + driver_t *driver = driver_get_ptr(); + (void)data; if (g_hrc) @@ -568,7 +572,7 @@ static void gfx_ctx_wgl_destroy(void *data) glFinish(); wglMakeCurrent(NULL, NULL); - if (!driver.video_cache_context) + if (!driver->video_cache_context) { if (g_hw_hrc) wglDeleteContext(g_hw_hrc); diff --git a/gfx/drivers_context/xegl_ctx.c b/gfx/drivers_context/xegl_ctx.c index ead76b90b5..13620909c2 100644 --- a/gfx/drivers_context/xegl_ctx.c +++ b/gfx/drivers_context/xegl_ctx.c @@ -144,6 +144,7 @@ static void gfx_ctx_xegl_check_window(void *data, bool *quit, XEvent event; unsigned new_width = *width; unsigned new_height = *height; + driver_t *driver = driver_get_ptr(); (void)frame_count; @@ -187,7 +188,7 @@ static void gfx_ctx_xegl_check_window(void *data, bool *quit, break; case ButtonPress: - x_input_poll_wheel(driver.input_data, &event.xbutton, true); + x_input_poll_wheel(driver->input_data, &event.xbutton, true); break; case ButtonRelease: @@ -453,6 +454,7 @@ static bool gfx_ctx_xegl_set_video_mode(void *data, XVisualInfo temp = {0}; XSetWindowAttributes swa = {0}; XVisualInfo *vi = NULL; + driver_t *driver = driver_get_ptr(); sa.sa_handler = egl_sighandler; sa.sa_flags = SA_RESTART; @@ -613,9 +615,9 @@ static bool gfx_ctx_xegl_set_video_mode(void *data, if (!x11_create_input_context(g_dpy, g_win, &g_xim, &g_xic)) goto error; - driver.display_type = RARCH_DISPLAY_X11; - driver.video_display = (uintptr_t)g_dpy; - driver.video_window = (uintptr_t)g_win; + driver->display_type = RARCH_DISPLAY_X11; + driver->video_display = (uintptr_t)g_dpy; + driver->video_window = (uintptr_t)g_win; g_true_full = true_full; return true; @@ -727,13 +729,15 @@ static bool gfx_ctx_xegl_has_focus(void *data) static bool gfx_ctx_xegl_suppress_screensaver(void *data, bool enable) { + driver_t *driver = driver_get_ptr(); + (void)data; (void)enable; - if (driver.display_type != RARCH_DISPLAY_X11) + if (driver->display_type != RARCH_DISPLAY_X11) return false; - x11_suspend_screensaver(driver.video_window); + x11_suspend_screensaver(driver->video_window); return true; } diff --git a/gfx/drivers_shader/shader_gl_cg.c b/gfx/drivers_shader/shader_gl_cg.c index 1bdc0f9ba4..ab49d03d48 100644 --- a/gfx/drivers_shader/shader_gl_cg.c +++ b/gfx/drivers_shader/shader_gl_cg.c @@ -171,7 +171,8 @@ static void gl_cg_reset_attrib(cg_shader_data_t *cg) static bool gl_cg_set_mvp(void *data, const math_matrix_4x4 *mat) { - cg_shader_data_t *cg = (cg_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + cg_shader_data_t *cg = (cg_shader_data_t*)driver->video_shader_data; (void)data; @@ -199,7 +200,8 @@ static bool gl_cg_set_mvp(void *data, const math_matrix_4x4 *mat) static bool gl_cg_set_coords(const void *data) { const struct gl_coords *coords = (const struct gl_coords*)data; - cg_shader_data_t *cg = (cg_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + cg_shader_data_t *cg = (cg_shader_data_t*)driver->video_shader_data; if (!cg || !coords) goto fallback; @@ -235,7 +237,8 @@ static void gl_cg_set_params(void *data, unsigned width, unsigned height, const struct gl_tex_info *info = (const struct gl_tex_info*)_info; const struct gl_tex_info *prev_info = (const struct gl_tex_info*)_prev_info; const struct gl_tex_info *fbo_info = (const struct gl_tex_info*)_fbo_info; - cg_shader_data_t *cg = (cg_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + cg_shader_data_t *cg = (cg_shader_data_t*)driver->video_shader_data; (void)data; if (!cg || (cg->active_idx == 0) || @@ -473,7 +476,8 @@ static void gl_cg_deinit_context_state(cg_shader_data_t *cg) /* Full deinit. */ static void gl_cg_deinit(void) { - cg_shader_data_t *cg = (cg_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + cg_shader_data_t *cg = (cg_shader_data_t*)driver->video_shader_data; if (!cg) return; @@ -889,6 +893,7 @@ static bool gl_cg_init(void *data, const char *path) (void)data; cg_shader_data_t *cg = (cg_shader_data_t*) calloc(1, sizeof(cg_shader_data_t)); + driver_t *driver = driver_get_ptr(); if (!cg) return false; @@ -960,7 +965,7 @@ static bool gl_cg_init(void *data, const char *path) cgGLBindProgram(cg->prg[1].fprg); cgGLBindProgram(cg->prg[1].vprg); - driver.video_shader_data = cg; + driver->video_shader_data = cg; return true; @@ -973,7 +978,8 @@ error: static void gl_cg_use(void *data, unsigned idx) { - cg_shader_data_t *cg = (cg_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + cg_shader_data_t *cg = (cg_shader_data_t*)driver->video_shader_data; (void)data; if (cg && cg->prg[idx].vprg && cg->prg[idx].fprg) @@ -988,7 +994,8 @@ static void gl_cg_use(void *data, unsigned idx) static unsigned gl_cg_num(void) { - cg_shader_data_t *cg = (cg_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + cg_shader_data_t *cg = (cg_shader_data_t*)driver->video_shader_data; if (!cg) return 0; return cg->cg_shader->passes; @@ -996,7 +1003,8 @@ static unsigned gl_cg_num(void) static bool gl_cg_filter_type(unsigned idx, bool *smooth) { - cg_shader_data_t *cg = (cg_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + cg_shader_data_t *cg = (cg_shader_data_t*)driver->video_shader_data; if (cg && idx && (cg->cg_shader->pass[idx - 1].filter != RARCH_FILTER_UNSPEC) ) @@ -1010,7 +1018,8 @@ static bool gl_cg_filter_type(unsigned idx, bool *smooth) static enum gfx_wrap_type gl_cg_wrap_type(unsigned idx) { - cg_shader_data_t *cg = (cg_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + cg_shader_data_t *cg = (cg_shader_data_t*)driver->video_shader_data; if (cg && idx) return cg->cg_shader->pass[idx - 1].wrap; return RARCH_WRAP_BORDER; @@ -1018,7 +1027,8 @@ static enum gfx_wrap_type gl_cg_wrap_type(unsigned idx) static void gl_cg_shader_scale(unsigned idx, struct gfx_fbo_scale *scale) { - cg_shader_data_t *cg = (cg_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + cg_shader_data_t *cg = (cg_shader_data_t*)driver->video_shader_data; if (cg && idx) *scale = cg->cg_shader->pass[idx - 1].fbo; else @@ -1029,7 +1039,8 @@ static unsigned gl_cg_get_prev_textures(void) { unsigned i, j; unsigned max_prev = 0; - cg_shader_data_t *cg = (cg_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + cg_shader_data_t *cg = (cg_shader_data_t*)driver->video_shader_data; if (!cg) return 0; @@ -1044,7 +1055,8 @@ static unsigned gl_cg_get_prev_textures(void) static bool gl_cg_mipmap_input(unsigned idx) { - cg_shader_data_t *cg = (cg_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + cg_shader_data_t *cg = (cg_shader_data_t*)driver->video_shader_data; if (cg && idx) return cg->cg_shader->pass[idx - 1].mipmap; return false; @@ -1052,7 +1064,8 @@ static bool gl_cg_mipmap_input(unsigned idx) static struct video_shader *gl_cg_get_current_shader(void) { - cg_shader_data_t *cg = (cg_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + cg_shader_data_t *cg = (cg_shader_data_t*)driver->video_shader_data; if (!cg) return NULL; return cg->cg_shader; diff --git a/gfx/drivers_shader/shader_glsl.c b/gfx/drivers_shader/shader_glsl.c index dad7aa5c5a..1621259cc7 100644 --- a/gfx/drivers_shader/shader_glsl.c +++ b/gfx/drivers_shader/shader_glsl.c @@ -693,16 +693,17 @@ static void gl_glsl_destroy_resources(glsl_shader_data_t *glsl) static void gl_glsl_deinit(void) { - glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver->video_shader_data; if (!glsl) return; gl_glsl_destroy_resources(glsl); - if (driver.video_shader_data) - free(driver.video_shader_data); - driver.video_shader_data = NULL; + if (driver->video_shader_data) + free(driver->video_shader_data); + driver->video_shader_data = NULL; } static bool gl_glsl_init(void *data, const char *path) @@ -712,6 +713,7 @@ static bool gl_glsl_init(void *data, const char *path) glsl_shader_data_t *glsl = NULL; const char *stock_vertex = NULL; const char *stock_fragment = NULL; + driver_t *driver = driver_get_ptr(); (void)data; @@ -913,7 +915,7 @@ static bool gl_glsl_init(void *data, const char *path) glGenBuffers(1, &glsl->glsl_vbo[i].vbo_secondary); } - driver.video_shader_data = glsl; + driver->video_shader_data = glsl; return true; @@ -944,7 +946,8 @@ static void gl_glsl_set_params(void *data, unsigned width, unsigned height, const struct gl_tex_info *prev_info = (const struct gl_tex_info*)_prev_info; const struct gl_tex_info *fbo_info = (const struct gl_tex_info*)_fbo_info; struct glsl_attrib *attr = (struct glsl_attrib*)attribs; - glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver->video_shader_data; if (!glsl) return; @@ -1132,7 +1135,8 @@ static void gl_glsl_set_params(void *data, unsigned width, unsigned height, static bool gl_glsl_set_mvp(void *data, const math_matrix_4x4 *mat) { int loc; - glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver->video_shader_data; (void)data; @@ -1161,7 +1165,8 @@ static bool gl_glsl_set_coords(const void *data) struct glsl_attrib *attr = NULL; const struct shader_uniforms *uni = NULL; const struct gl_coords *coords = (const struct gl_coords*)data; - glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver->video_shader_data; if (!glsl || !glsl->glsl_shader->modern || !coords) { @@ -1257,7 +1262,8 @@ static bool gl_glsl_set_coords(const void *data) static void gl_glsl_use(void *data, unsigned idx) { - glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver->video_shader_data; (void)data; @@ -1272,7 +1278,8 @@ static void gl_glsl_use(void *data, unsigned idx) static unsigned gl_glsl_num(void) { - glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver->video_shader_data; if (glsl && glsl->glsl_shader) return glsl->glsl_shader->passes; return 0; @@ -1280,7 +1287,8 @@ static unsigned gl_glsl_num(void) static bool gl_glsl_filter_type(unsigned idx, bool *smooth) { - glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver->video_shader_data; if (glsl && idx && (glsl->glsl_shader->pass[idx - 1].filter != RARCH_FILTER_UNSPEC) ) @@ -1293,7 +1301,8 @@ static bool gl_glsl_filter_type(unsigned idx, bool *smooth) static enum gfx_wrap_type gl_glsl_wrap_type(unsigned idx) { - glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver->video_shader_data; if (glsl && idx) return glsl->glsl_shader->pass[idx - 1].wrap; return RARCH_WRAP_BORDER; @@ -1301,7 +1310,8 @@ static enum gfx_wrap_type gl_glsl_wrap_type(unsigned idx) static void gl_glsl_shader_scale(unsigned idx, struct gfx_fbo_scale *scale) { - glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver->video_shader_data; if (glsl && idx) *scale = glsl->glsl_shader->pass[idx - 1].fbo; else @@ -1312,8 +1322,8 @@ static unsigned gl_glsl_get_prev_textures(void) { unsigned i, j; unsigned max_prev = 0; - - glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver->video_shader_data; if (!glsl) return 0; @@ -1328,7 +1338,8 @@ static unsigned gl_glsl_get_prev_textures(void) static bool gl_glsl_mipmap_input(unsigned idx) { - glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver->video_shader_data; if (glsl && idx) return glsl->glsl_shader->pass[idx - 1].mipmap; return false; @@ -1336,7 +1347,8 @@ static bool gl_glsl_mipmap_input(unsigned idx) static struct video_shader *gl_glsl_get_current_shader(void) { - glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver->video_shader_data; if (!glsl) return NULL; return glsl->glsl_shader; diff --git a/gfx/drivers_shader/shader_hlsl.c b/gfx/drivers_shader/shader_hlsl.c index 37a2a13cef..bafde2b308 100644 --- a/gfx/drivers_shader/shader_hlsl.c +++ b/gfx/drivers_shader/shader_hlsl.c @@ -90,7 +90,8 @@ typedef struct hlsl_shader_data void hlsl_set_proj_matrix(XMMATRIX rotation_value) { - hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver->video_shader_data; if (hlsl) hlsl->prg[hlsl->active_idx].mvp_val = rotation_value; } @@ -113,7 +114,8 @@ static void hlsl_set_params(void *data, unsigned width, unsigned height, const struct gl_tex_info *info = (const struct gl_tex_info*)_info; const struct gl_tex_info *prev_info = (const struct gl_tex_info*)_prev_info; const struct gl_tex_info *fbo_info = (const struct gl_tex_info*)_fbo_info; - hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver->video_shader_data; if (!hlsl) return; @@ -352,6 +354,7 @@ static bool hlsl_init(void *data, const char *path) d3d_video_t *d3d = (d3d_video_t*)data; hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*) calloc(1, sizeof(hlsl_shader_data_t)); + driver_t *driver = driver_get_ptr(); if (!hlsl) return false; @@ -373,7 +376,7 @@ static bool hlsl_init(void *data, const char *path) d3d_set_vertex_shader(d3d->dev, 1, hlsl->prg[1].vprg); d3d->dev->SetPixelShader(hlsl->prg[1].fprg); - driver.video_shader_data = hlsl; + driver->video_shader_data = hlsl; return true; @@ -386,22 +389,24 @@ error: // Full deinit. static void hlsl_deinit(void) { - hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver->video_shader_data; if (!hlsl) return; hlsl_deinit_state(hlsl); - if (driver.video_shader_data) - free(driver.video_shader_data); - driver.video_shader_data = NULL; + if (driver->video_shader_data) + free(driver->video_shader_data); + driver->video_shader_data = NULL; } static void hlsl_use(void *data, unsigned idx) { d3d_video_t *d3d = (d3d_video_t*)data; LPDIRECT3DDEVICE d3dr = (LPDIRECT3DDEVICE)d3d->dev; - hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver->video_shader_data; if (hlsl && hlsl->prg[idx].vprg && hlsl->prg[idx].fprg) { @@ -417,7 +422,8 @@ static void hlsl_use(void *data, unsigned idx) static unsigned hlsl_num(void) { - hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver->video_shader_data; if (hlsl) return hlsl->cg_shader->passes; return 0; @@ -425,7 +431,8 @@ static unsigned hlsl_num(void) static bool hlsl_filter_type(unsigned idx, bool *smooth) { - hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver->video_shader_data; if (hlsl && idx && (hlsl->cg_shader->pass[idx - 1].filter != RARCH_FILTER_UNSPEC)) { @@ -437,7 +444,8 @@ static bool hlsl_filter_type(unsigned idx, bool *smooth) static void hlsl_shader_scale(unsigned idx, struct gfx_fbo_scale *scale) { - hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver->video_shader_data; if (hlsl && idx) *scale = hlsl->cg_shader->pass[idx - 1].fbo; else @@ -448,7 +456,8 @@ static bool hlsl_set_mvp(void *data, const math_matrix_4x4 *mat) { d3d_video_t *d3d = (d3d_video_t*)data; LPDIRECT3DDEVICE d3d_device_ptr = (LPDIRECT3DDEVICE)d3d->dev; - hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver.video_shader_data; + driver_t *driver = driver_get_ptr(); + hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver->video_shader_data; if(hlsl && hlsl->prg[hlsl->active_idx].mvp) { diff --git a/gfx/gl_common.c b/gfx/gl_common.c index b9e0f90d4c..8857d4e041 100644 --- a/gfx/gl_common.c +++ b/gfx/gl_common.c @@ -27,6 +27,7 @@ void gl_load_texture_data(GLuint id, GLenum wrap; bool want_mipmap = false; bool rgb32 = (base_size == (sizeof(uint32_t))); + driver_t *driver = driver_get_ptr(); glBindTexture(GL_TEXTURE_2D, id); @@ -70,9 +71,9 @@ void gl_load_texture_data(GLuint id, #endif glTexImage2D(GL_TEXTURE_2D, 0, - (driver.gfx_use_rgba || !rgb32) ? GL_RGBA : RARCH_GL_INTERNAL_FORMAT32, + (driver->gfx_use_rgba || !rgb32) ? GL_RGBA : RARCH_GL_INTERNAL_FORMAT32, width, height, 0, - (driver.gfx_use_rgba || !rgb32) ? GL_RGBA : RARCH_GL_TEXTURE_TYPE32, + (driver->gfx_use_rgba || !rgb32) ? GL_RGBA : RARCH_GL_TEXTURE_TYPE32, (rgb32) ? RARCH_GL_FORMAT32 : GL_UNSIGNED_SHORT_4_4_4_4, frame); if (want_mipmap) diff --git a/gfx/image/image.c b/gfx/image/image.c index 03d8bfff1e..7ab145156d 100644 --- a/gfx/image/image.c +++ b/gfx/image/image.c @@ -158,7 +158,10 @@ void texture_image_free(struct texture_image *img) bool texture_image_load(struct texture_image *out_img, const char *path) { D3DXIMAGE_INFO m_imageInfo; - d3d_video_t *d3d = (d3d_video_t*)driver.video_data; + d3d_video_t *d3d = NULL; + driver_t *driver = driver_get_ptr(); + + d3d = (d3d_video_t*)driver->video_data; out_img->vertex_buf = NULL; @@ -355,9 +358,11 @@ bool texture_image_load(struct texture_image *out_img, const char *path) #else bool texture_image_load(struct texture_image *out_img, const char *path) { + driver_t *driver = driver_get_ptr(); + /* This interface "leak" is very ugly. FIXME: Fix this properly ... */ bool ret = false; - bool use_rgba = driver.gfx_use_rgba; + bool use_rgba = driver->gfx_use_rgba; unsigned a_shift = 24; unsigned r_shift = use_rgba ? 0 : 16; unsigned g_shift = 8; diff --git a/gfx/video_driver.c b/gfx/video_driver.c index f7734139fc..1b71ccab59 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -148,28 +148,30 @@ const char* config_get_video_driver_options(void) void find_video_driver(void) { int i; + driver_t *driver = driver_get_ptr(); + #if defined(HAVE_OPENGL) && defined(HAVE_FBO) if (g_extern.system.hw_render_callback.context_type) { RARCH_LOG("Using HW render, OpenGL driver forced.\n"); - driver.video = &video_gl; + driver->video = &video_gl; return; } #endif - if (driver.frontend_ctx && - driver.frontend_ctx->get_video_driver) + if (driver->frontend_ctx && + driver->frontend_ctx->get_video_driver) { - driver.video = driver.frontend_ctx->get_video_driver(); + driver->video = driver->frontend_ctx->get_video_driver(); - if (driver.video) + if (driver->video) return; RARCH_WARN("Frontend supports get_video_driver() but did not specify one.\n"); } i = find_driver_index("video_driver", g_settings.video.driver); if (i >= 0) - driver.video = (const video_driver_t*)video_driver_find_handle(i); + driver->video = (const video_driver_t*)video_driver_find_handle(i); else { unsigned d; @@ -180,9 +182,9 @@ void find_video_driver(void) RARCH_LOG_OUTPUT("\t%s\n", video_driver_find_ident(d)); RARCH_WARN("Going to default to first video driver...\n"); - driver.video = (const video_driver_t*)video_driver_find_handle(0); + driver->video = (const video_driver_t*)video_driver_find_handle(0); - if (!driver.video) + if (!driver->video) rarch_fail(1, "find_video_driver()"); } } @@ -198,15 +200,16 @@ void find_video_driver(void) **/ void *video_driver_resolve(const video_driver_t **drv) { + driver_t *driver = driver_get_ptr(); #ifdef HAVE_THREADS if (g_settings.video.threaded && !g_extern.system.hw_render_callback.context_type) return rarch_threaded_video_resolve(drv); #endif if (drv) - *drv = driver.video; + *drv = driver->video; - return driver.video_data; + return driver->video_data; } /** @@ -220,34 +223,38 @@ void *video_driver_resolve(const video_driver_t **drv) uintptr_t video_driver_get_current_framebuffer(void) { #ifdef HAVE_FBO - if (driver.video_poke && driver.video_poke->get_current_framebuffer) - return driver.video_poke->get_current_framebuffer(driver.video_data); + driver_t *driver = driver_get_ptr(); + if (driver->video_poke && driver->video_poke->get_current_framebuffer) + return driver->video_poke->get_current_framebuffer(driver->video_data); #endif return 0; } retro_proc_address_t video_driver_get_proc_address(const char *sym) { - if (driver.video_poke && driver.video_poke->get_proc_address) - return driver.video_poke->get_proc_address(driver.video_data, sym); + driver_t *driver = driver_get_ptr(); + if (driver->video_poke && driver->video_poke->get_proc_address) + return driver->video_poke->get_proc_address(driver->video_data, sym); return NULL; } bool video_driver_is_alive(void) { + driver_t *driver = driver_get_ptr(); /* Possible race issue, return true */ - if (!driver.video || !driver.video_data) + if (!driver->video || !driver->video_data) return true; - if (!driver.video->alive(driver.video_data)) + if (!driver->video->alive(driver->video_data)) return false; return true; } bool video_driver_has_focus(void) { - if (!driver.video || !driver.video_data) + driver_t *driver = driver_get_ptr(); + if (!driver->video || !driver->video_data) return false; - if (!driver.video->focus(driver.video_data)) + if (!driver->video->focus(driver->video_data)) return false; return true; } @@ -255,9 +262,10 @@ bool video_driver_has_focus(void) bool video_driver_set_shader(enum rarch_shader_type type, const char *shader) { - if (!driver.video || !driver.video_data) + driver_t *driver = driver_get_ptr(); + if (!driver->video || !driver->video_data) return false; - if (!driver.video->set_shader(driver.video_data, type, shader)) + if (!driver->video->set_shader(driver->video_data, type, shader)) return false; return true; } @@ -331,16 +339,18 @@ error: static void init_video_input(const input_driver_t *tmp) { + driver_t *driver = driver_get_ptr(); + /* Video driver didn't provide an input driver, * so we use configured one. */ RARCH_LOG("Graphics driver did not initialize an input driver. Attempting to pick a suitable driver.\n"); if (tmp) - driver.input = tmp; + driver->input = tmp; else find_input_driver(); - if (!driver.input) + if (!driver->input) { /* This should never really happen as tmp (driver.input) is always * found before this in find_driver_input(), or we have aborted @@ -348,9 +358,9 @@ static void init_video_input(const input_driver_t *tmp) rarch_fail(1, "init_video_input()"); } - driver.input_data = driver.input->init(); + driver->input_data = driver->input->init(); - if (driver.input_data) + if (driver->input_data) return; RARCH_ERR("Cannot initialize input driver. Exiting ...\n"); @@ -359,21 +369,23 @@ static void init_video_input(const input_driver_t *tmp) void uninit_video_input(void) { + driver_t *driver = driver_get_ptr(); + rarch_main_command(RARCH_CMD_OVERLAY_DEINIT); if ( - !driver.input_data_own && - (driver.input_data != driver.video_data) && - driver.input && - driver.input->free) - driver.input->free(driver.input_data); + !driver->input_data_own && + (driver->input_data != driver->video_data) && + driver->input && + driver->input->free) + driver->input->free(driver->input_data); if ( - !driver.video_data_own && - driver.video_data && - driver.video && - driver.video->free) - driver.video->free(driver.video_data); + !driver->video_data_own && + driver->video_data && + driver->video && + driver->video->free) + driver->video->free(driver->video_data); deinit_pixel_converter(); @@ -392,6 +404,7 @@ void init_video(void) video_info_t video = {0}; static uint16_t dummy_pixels[32] = {0}; runloop_t *runloop = rarch_main_get_ptr(); + driver_t *driver = driver_get_ptr(); init_video_filter(g_extern.system.pix_fmt); rarch_main_command(RARCH_CMD_SHADER_DIR_INIT); @@ -449,9 +462,9 @@ void init_video(void) else RARCH_LOG("Video @ fullscreen\n"); - driver.display_type = RARCH_DISPLAY_NONE; - driver.video_display = 0; - driver.video_window = 0; + driver->display_type = RARCH_DISPLAY_NONE; + driver->video_display = 0; + driver->video_window = 0; if (!init_video_pixel_converter(RARCH_SCALE_BASE * scale)) { @@ -474,7 +487,7 @@ void init_video(void) g_extern.filter.out_rgb32 : (g_extern.system.pix_fmt == RETRO_PIXEL_FORMAT_XRGB8888); - tmp = (const input_driver_t*)driver.input; + tmp = (const input_driver_t*)driver->input; /* Need to grab the "real" video driver interface on a reinit. */ find_video_driver(); @@ -484,9 +497,9 @@ void init_video(void) /* Can't do hardware rendering with threaded driver currently. */ RARCH_LOG("Starting threaded video driver ...\n"); - if (!rarch_threaded_video_init(&driver.video, &driver.video_data, - &driver.input, &driver.input_data, - driver.video, &video)) + if (!rarch_threaded_video_init(&driver->video, &driver->video_data, + &driver->input, &driver->input_data, + driver->video, &video)) { RARCH_ERR("Cannot open threaded video driver ... Exiting ...\n"); rarch_fail(1, "init_video()"); @@ -494,37 +507,37 @@ void init_video(void) } else #endif - driver.video_data = driver.video->init(&video, &driver.input, - &driver.input_data); + driver->video_data = driver->video->init(&video, &driver->input, + &driver->input_data); - if (!driver.video_data) + if (!driver->video_data) { RARCH_ERR("Cannot open video driver ... Exiting ...\n"); rarch_fail(1, "init_video()"); } - driver.video_poke = NULL; - if (driver.video->poke_interface) - driver.video->poke_interface(driver.video_data, &driver.video_poke); + driver->video_poke = NULL; + if (driver->video->poke_interface) + driver->video->poke_interface(driver->video_data, &driver->video_poke); - if (driver.video->viewport_info && (!custom_vp->width || + if (driver->video->viewport_info && (!custom_vp->width || !custom_vp->height)) { /* Force custom viewport to have sane parameters. */ custom_vp->width = width; custom_vp->height = height; - driver.video->viewport_info(driver.video_data, custom_vp); + driver->video->viewport_info(driver->video_data, custom_vp); } - if (driver.video->set_rotation) - driver.video->set_rotation(driver.video_data, + if (driver->video->set_rotation) + driver->video->set_rotation(driver->video_data, (g_settings.video.rotation + g_extern.system.rotation) % 4); - if (driver.video->suppress_screensaver) - driver.video->suppress_screensaver(driver.video_data, + if (driver->video->suppress_screensaver) + driver->video->suppress_screensaver(driver->video_data, g_settings.ui.suspend_screensaver_enable); - if (!driver.input) + if (!driver->input) init_video_input(tmp); rarch_main_command(RARCH_CMD_OVERLAY_DEINIT); @@ -538,8 +551,8 @@ void init_video(void) g_extern.frame_cache.data = &dummy_pixels; #if defined(PSP) - if (driver.video_poke && driver.video_poke->set_texture_frame) - driver.video_poke->set_texture_frame(driver.video_data, + if (driver->video_poke && driver->video_poke->set_texture_frame) + driver->video_poke->set_texture_frame(driver->video_data, &dummy_pixels, false, 1, 1, 1.0f); #endif } diff --git a/gfx/video_pixel_converter.c b/gfx/video_pixel_converter.c index 6e2f979c4b..93e5afb48a 100644 --- a/gfx/video_pixel_converter.c +++ b/gfx/video_pixel_converter.c @@ -20,14 +20,18 @@ void deinit_pixel_converter(void) { - scaler_ctx_gen_reset(&driver.scaler); - memset(&driver.scaler, 0, sizeof(driver.scaler)); - free(driver.scaler_out); - driver.scaler_out = NULL; + driver_t *driver = driver_get_ptr(); + + scaler_ctx_gen_reset(&driver->scaler); + memset(&driver->scaler, 0, sizeof(driver->scaler)); + free(driver->scaler_out); + driver->scaler_out = NULL; } bool init_video_pixel_converter(unsigned size) { + driver_t *driver = driver_get_ptr(); + /* This function can be called multiple times * without deiniting first on consoles. */ deinit_pixel_converter(); @@ -39,16 +43,16 @@ bool init_video_pixel_converter(unsigned size) RARCH_WARN("0RGB1555 pixel format is deprecated, and will be slower. For 15/16-bit, RGB565 format is preferred.\n"); - driver.scaler.scaler_type = SCALER_TYPE_POINT; - driver.scaler.in_fmt = SCALER_FMT_0RGB1555; + driver->scaler.scaler_type = SCALER_TYPE_POINT; + driver->scaler.in_fmt = SCALER_FMT_0RGB1555; /* TODO: Pick either ARGB8888 or RGB565 depending on driver. */ - driver.scaler.out_fmt = SCALER_FMT_RGB565; + driver->scaler.out_fmt = SCALER_FMT_RGB565; - if (!scaler_ctx_gen_filter(&driver.scaler)) + if (!scaler_ctx_gen_filter(&driver->scaler)) return false; - driver.scaler_out = calloc(sizeof(uint16_t), size * size); + driver->scaler_out = calloc(sizeof(uint16_t), size * size); return true; } diff --git a/gfx/video_shader_driver.c b/gfx/video_shader_driver.c index ffb4b7cd6a..7084cccdef 100644 --- a/gfx/video_shader_driver.c +++ b/gfx/video_shader_driver.c @@ -71,11 +71,12 @@ const shader_backend_t *shader_ctx_init_first(void) struct video_shader *video_shader_driver_get_current_shader(void) { - if (!driver.video_poke) + driver_t *driver = driver_get_ptr(); + if (!driver->video_poke) return NULL; - if (!driver.video_data) + if (!driver->video_data) return NULL; - if (!driver.video_poke->get_current_shader) + if (!driver->video_poke->get_current_shader) return NULL; - return driver.video_poke->get_current_shader(driver.video_data); + return driver->video_poke->get_current_shader(driver->video_data); } diff --git a/gfx/video_state_python.c b/gfx/video_state_python.c index 9c8fb6d429..1de2d0331d 100644 --- a/gfx/video_state_python.c +++ b/gfx/video_state_python.c @@ -109,10 +109,11 @@ static PyObject *py_read_input(PyObject *self, PyObject *args) { unsigned user, key; int16_t res = 0; + driver_t *driver = driver_get_ptr(); (void)self; - if (!driver.input_data) + if (!driver->input_data) return PyBool_FromLong(0); if (!PyArg_ParseTuple(args, "II", &user, &key)) @@ -121,8 +122,8 @@ static PyObject *py_read_input(PyObject *self, PyObject *args) if (user > MAX_USERS || user < 1 || key >= RARCH_FIRST_META_KEY) return NULL; - if (!driver.block_libretro_input) - res = driver.input->input_state(driver.input_data, + if (!driver->block_libretro_input) + res = driver->input->input_state(driver->input_data, py_binds, user - 1, RETRO_DEVICE_JOYPAD, 0, key); return PyBool_FromLong(res); } @@ -131,10 +132,11 @@ static PyObject *py_read_analog(PyObject *self, PyObject *args) { unsigned user, index, id; int16_t res = 0; + driver_t *driver = driver_get_ptr(); (void)self; - if (!driver.input_data) + if (!driver->input_data) return PyBool_FromLong(0); if (!PyArg_ParseTuple(args, "III", &user, &index, &id)) @@ -143,7 +145,7 @@ static PyObject *py_read_analog(PyObject *self, PyObject *args) if (user > MAX_USERS || user < 1 || index > 1 || id > 1) return NULL; - res = driver.input->input_state(driver.input_data, + res = driver->input->input_state(driver->input_data, py_binds, user - 1, RETRO_DEVICE_ANALOG, index, id); return PyFloat_FromDouble((double)res / 0x7fff); } diff --git a/gfx/video_state_tracker.c b/gfx/video_state_tracker.c index ee76f077bf..92d427caf0 100644 --- a/gfx/video_state_tracker.c +++ b/gfx/video_state_tracker.c @@ -280,8 +280,9 @@ static void state_tracker_update_input(state_tracker_t *tracker) g_settings.input.binds[0], g_settings.input.binds[1], }; + driver_t *driver = driver_get_ptr(); - if (!driver.input) + if (!driver->input) return; for (i = 0; i < 2; i++) @@ -291,15 +292,15 @@ static void state_tracker_update_input(state_tracker_t *tracker) input_push_analog_dpad(g_settings.input.autoconf_binds[i], g_settings.input.analog_dpad_mode[i]); - if (!driver.block_libretro_input) + if (!driver->block_libretro_input) { for (i = 4; i < 16; i++) { - state[0] |= (driver.input->input_state( - driver.input_data, binds, 0, + state[0] |= (driver->input->input_state( + driver->input_data, binds, 0, RETRO_DEVICE_JOYPAD, 0, buttons[i - 4]) ? 1 : 0) << i; - state[1] |= (driver.input->input_state( - driver.input_data, binds, 1, + state[1] |= (driver->input->input_state( + driver->input_data, binds, 1, RETRO_DEVICE_JOYPAD, 0, buttons[i - 4]) ? 1 : 0) << i; } } diff --git a/gfx/video_thread_wrapper.c b/gfx/video_thread_wrapper.c index 12aca11564..c762355497 100644 --- a/gfx/video_thread_wrapper.c +++ b/gfx/video_thread_wrapper.c @@ -1051,7 +1051,8 @@ bool rarch_threaded_video_init(const video_driver_t **out_driver, **/ void *rarch_threaded_video_resolve(const video_driver_t **drv) { - const thread_video_t *thr = (const thread_video_t*)driver.video_data; + driver_t *driver = driver_get_ptr(); + const thread_video_t *thr = (const thread_video_t*)driver->video_data; if (drv) *drv = thr->driver; diff --git a/input/drivers/linuxraw_input.c b/input/drivers/linuxraw_input.c index 0956becf5a..04975b02d5 100644 --- a/input/drivers/linuxraw_input.c +++ b/input/drivers/linuxraw_input.c @@ -39,6 +39,7 @@ typedef struct linuxraw_input static void linuxraw_resetKbmd(void) { + driver_t *driver = driver_get_ptr(); if (oldKbmd != 0xffff) { ioctl(0, KDSKBMODE, oldKbmd); @@ -46,7 +47,7 @@ static void linuxraw_resetKbmd(void) oldKbmd = 0xffff; } - driver.stdin_claimed = false; + driver->stdin_claimed = false; } static void linuxraw_exitGracefully(int sig) @@ -59,12 +60,13 @@ static void *linuxraw_input_init(void) { struct sigaction sa; linuxraw_input_t *linuxraw = NULL; + driver_t *driver = driver_get_ptr(); /* Only work on terminals. */ if (!isatty(0)) return NULL; - if (driver.stdin_claimed) + if (driver->stdin_claimed) { RARCH_WARN("stdin is already used for content loading. Cannot use stdin for input.\n"); return NULL; @@ -119,7 +121,7 @@ static void *linuxraw_input_init(void) /* We need to disable use of stdin command interface if * stdin is supposed to be used for input. */ - driver.stdin_claimed = true; + driver->stdin_claimed = true; return linuxraw; } diff --git a/input/drivers/sdl_input.c b/input/drivers/sdl_input.c index fc5daddb28..5f2e8dde08 100644 --- a/input/drivers/sdl_input.c +++ b/input/drivers/sdl_input.c @@ -268,12 +268,13 @@ static void sdl_grab_mouse(void *data, bool state) SDL_Window *w; }; sdl_input_t *sdl = (sdl_input_t*)data; + driver_t *driver = driver_get_ptr(); - if (driver.video != &video_sdl2) + if (driver->video != &video_sdl2) return; /* First member of sdl2_video_t is the window */ - SDL_SetWindowGrab(((struct temp*)driver.video_data)->w, + SDL_SetWindowGrab(((struct temp*)driver->video_data)->w, state ? SDL_TRUE : SDL_FALSE); } #endif diff --git a/input/drivers/x11_input.c b/input/drivers/x11_input.c index 60a6109017..e4da130a8f 100644 --- a/input/drivers/x11_input.c +++ b/input/drivers/x11_input.c @@ -47,7 +47,8 @@ typedef struct x11_input static void *x_input_init(void) { - if (driver.display_type != RARCH_DISPLAY_X11) + driver_t *driver = driver_get_ptr(); + if (driver->display_type != RARCH_DISPLAY_X11) { RARCH_ERR("Currently active window is not an X11 window. Cannot use this driver.\n"); return NULL; @@ -58,8 +59,8 @@ static void *x_input_init(void) return NULL; /* Borrow the active X window ... */ - x11->display = (Display*)driver.video_display; - x11->win = (Window)driver.video_window; + x11->display = (Display*)driver->video_display; + x11->win = (Window)driver->video_window; x11->joypad = input_joypad_init_driver(g_settings.input.joypad_driver); input_keymaps_init_keyboard_lut(rarch_key_map_x11); @@ -270,6 +271,7 @@ static void x_input_poll_mouse(x11_input_t *x11) Window root_win, child_win; int root_x, root_y, win_x, win_y; unsigned mask; + driver_t *driver = driver_get_ptr(); x11->mouse_last_x = x11->mouse_x; x11->mouse_last_y = x11->mouse_y; @@ -288,12 +290,12 @@ static void x_input_poll_mouse(x11_input_t *x11) x11->mouse_r = mask & Button3Mask; /* Somewhat hacky, but seem to do the job. */ - if (x11->grab_mouse && driver.video->focus(driver.video_data)) + if (x11->grab_mouse && driver->video->focus(driver->video_data)) { struct video_viewport vp = {0}; - if (driver.video && driver.video->viewport_info) - driver.video->viewport_info(driver.video_data, &vp); + if (driver->video && driver->video->viewport_info) + driver->video->viewport_info(driver->video_data, &vp); int mid_w = vp.full_width >> 1; int mid_h = vp.full_height >> 1; @@ -329,8 +331,9 @@ void x_input_poll_wheel(void *data, XButtonEvent *event, bool latch) static void x_input_poll(void *data) { x11_input_t *x11 = (x11_input_t*)data; + driver_t *driver = driver_get_ptr(); - if (driver.video->focus(driver.video_data)) + if (driver->video->focus(driver->video_data)) XQueryKeymap(x11->display, x11->state); else memset(x11->state, 0, sizeof(x11->state)); diff --git a/input/input_common.c b/input/input_common.c index 1402e171ab..d4d077d2ab 100644 --- a/input/input_common.c +++ b/input/input_common.c @@ -133,12 +133,15 @@ bool input_translate_coord_viewport(int mouse_x, int mouse_y, { int scaled_screen_x, scaled_screen_y, scaled_x, scaled_y; struct video_viewport vp = {0}; - bool have_viewport_info = driver.video && driver.video->viewport_info; + bool have_viewport_info = false; + driver_t *driver = driver_get_ptr(); + + have_viewport_info = driver->video && driver->video->viewport_info; if (!have_viewport_info) return false; - driver.video->viewport_info(driver.video_data, &vp); + driver->video->viewport_info(driver->video_data, &vp); scaled_screen_x = (2 * mouse_x * 0x7fff) / (int)vp.full_width - 0x7fff; scaled_screen_y = (2 * mouse_y * 0x7fff) / (int)vp.full_height - 0x7fff; diff --git a/input/input_driver.c b/input/input_driver.c index ab32098f50..7ac11f86d0 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -146,8 +146,10 @@ const char* config_get_input_driver_options(void) void find_input_driver(void) { int i = find_driver_index("input_driver", g_settings.input.driver); + driver_t *driver = driver_get_ptr(); + if (i >= 0) - driver.input = (const input_driver_t*)input_driver_find_handle(i); + driver->input = (const input_driver_t*)input_driver_find_handle(i); else { unsigned d; @@ -158,9 +160,9 @@ void find_input_driver(void) RARCH_LOG_OUTPUT("\t%s\n", input_driver_find_ident(d)); RARCH_WARN("Going to default to first input driver...\n"); - driver.input = (const input_driver_t*)input_driver_find_handle(0); + driver->input = (const input_driver_t*)input_driver_find_handle(0); - if (!driver.input) + if (!driver->input) rarch_fail(1, "find_input_driver()"); } } @@ -177,8 +179,9 @@ void find_input_driver(void) bool input_driver_set_rumble_state(unsigned port, enum retro_rumble_effect effect, uint16_t strength) { - if (driver.input && driver.input_data && driver.input->set_rumble) - return driver.input->set_rumble(driver.input_data, + driver_t *driver = driver_get_ptr(); + if (driver->input && driver->input_data && driver->input->set_rumble) + return driver->input->set_rumble(driver->input_data, port, effect, strength); return false; } @@ -187,21 +190,22 @@ retro_input_t input_driver_keys_pressed(void) { int key; retro_input_t ret = 0; + driver_t *driver = driver_get_ptr(); for (key = 0; key < RARCH_BIND_LIST_END; key++) { bool state = false; - if ((!driver.block_libretro_input && (key < RARCH_FIRST_META_KEY)) || - !driver.block_hotkey) - state = driver.input->key_pressed(driver.input_data, key); + if ((!driver->block_libretro_input && (key < RARCH_FIRST_META_KEY)) || + !driver->block_hotkey) + state = driver->input->key_pressed(driver->input_data, key); #ifdef HAVE_OVERLAY - state = state || (driver.overlay_state.buttons & (1ULL << key)); + state = state || (driver->overlay_state.buttons & (1ULL << key)); #endif #ifdef HAVE_COMMAND - if (driver.command) - state = state || rarch_cmd_get(driver.command, key); + if (driver->command) + state = state || rarch_cmd_get(driver->command, key); #endif if (state) diff --git a/input/input_overlay.c b/input/input_overlay.c index 39b6e844bb..cde1d0fed7 100644 --- a/input/input_overlay.c +++ b/input/input_overlay.c @@ -751,6 +751,7 @@ input_overlay_t *input_overlay_new(const char *path, bool enable, float opacity, float scale_factor) { input_overlay_t *ol = (input_overlay_t*)calloc(1, sizeof(*ol)); + driver_t *driver = driver_get_ptr(); if (!ol) goto error; @@ -767,15 +768,15 @@ input_overlay_t *input_overlay_new(const char *path, bool enable, if (!ol->conf) goto error; - if (!driver.video->overlay_interface) + if (!driver->video->overlay_interface) { RARCH_ERR("Overlay interface is not present in video driver.\n"); goto error; } - if (driver.video && driver.video->overlay_interface) - driver.video->overlay_interface(driver.video_data, &ol->iface); - ol->iface_data = driver.video_data; + if (driver->video && driver->video->overlay_interface) + driver->video->overlay_interface(driver->video_data, &ol->iface); + ol->iface_data = driver->video_data; if (!ol->iface) goto error; diff --git a/input/input_sensor.c b/input/input_sensor.c index 910f0305e4..f2ec540692 100644 --- a/input/input_sensor.c +++ b/input/input_sensor.c @@ -29,18 +29,22 @@ bool input_sensor_set_state(unsigned port, enum retro_sensor_action action, unsigned rate) { - if (driver.input && driver.input_data && - driver.input->set_sensor_state) - return driver.input->set_sensor_state(driver.input_data, + driver_t *driver = driver_get_ptr(); + + if (driver->input && driver->input_data && + driver->input->set_sensor_state) + return driver->input->set_sensor_state(driver->input_data, port, action, rate); return false; } float input_sensor_get_input(unsigned port, unsigned id) { - if (driver.input && driver.input_data && - driver.input->get_sensor_input) - return driver.input->get_sensor_input(driver.input_data, + driver_t *driver = driver_get_ptr(); + + if (driver->input && driver->input_data && + driver->input->get_sensor_input) + return driver->input->get_sensor_input(driver->input_data, port, id); return 0.0f; } diff --git a/input/keyboard_line.c b/input/keyboard_line.c index abf052b258..4f3a777019 100644 --- a/input/keyboard_line.c +++ b/input/keyboard_line.c @@ -39,10 +39,11 @@ struct input_keyboard_line static void input_keyboard_line_toggle_osk(bool enable) { + driver_t *driver = driver_get_ptr(); if (!g_settings.osk.enable) return; - driver.keyboard_linefeed_enable = enable; + driver->keyboard_linefeed_enable = enable; } /** @@ -179,13 +180,14 @@ static void *g_keyboard_press_data; const char **input_keyboard_start_line(void *userdata, input_keyboard_line_complete_t cb) { + driver_t *driver = driver_get_ptr(); if (g_keyboard_line) input_keyboard_line_free(g_keyboard_line); g_keyboard_line = input_keyboard_line_new(userdata, cb); /* While reading keyboard line input, we have to block all hotkeys. */ - driver.block_input = true; + driver->block_input = true; return input_keyboard_line_get_buffer(g_keyboard_line); } @@ -200,11 +202,13 @@ const char **input_keyboard_start_line(void *userdata, **/ void input_keyboard_wait_keys(void *userdata, input_keyboard_press_t cb) { + driver_t *driver = driver_get_ptr(); + g_keyboard_press_cb = cb; g_keyboard_press_data = userdata; /* While waiting for input, we have to block all hotkeys. */ - driver.block_input = true; + driver->block_input = true; } /** @@ -214,9 +218,11 @@ void input_keyboard_wait_keys(void *userdata, input_keyboard_press_t cb) **/ void input_keyboard_wait_keys_cancel(void) { + driver_t *driver = driver_get_ptr(); + g_keyboard_press_cb = NULL; g_keyboard_press_data = NULL; - driver.block_input = false; + driver->block_input = false; } /** @@ -233,6 +239,7 @@ void input_keyboard_event(bool down, unsigned code, uint32_t character, uint16_t mod, unsigned device) { static bool deferred_wait_keys; + driver_t *driver = driver_get_ptr(); if (deferred_wait_keys) { @@ -274,7 +281,7 @@ void input_keyboard_event(bool down, unsigned code, g_keyboard_line = NULL; /* Unblock all hotkeys. */ - driver.block_input = false; + driver->block_input = false; } else if (g_extern.system.key_event) g_extern.system.key_event(down, code, character, mod); diff --git a/libretro_version_1.c b/libretro_version_1.c index 59e037f6cb..5e0d4a0b11 100644 --- a/libretro_version_1.c +++ b/libretro_version_1.c @@ -43,6 +43,8 @@ static bool video_frame_scale(const void *data, unsigned width, unsigned height, size_t pitch) { + driver_t *driver = driver_get_ptr(); + RARCH_PERFORMANCE_INIT(video_frame_conv); if (!data) @@ -54,14 +56,14 @@ static bool video_frame_scale(const void *data, RARCH_PERFORMANCE_START(video_frame_conv); - driver.scaler.in_width = width; - driver.scaler.in_height = height; - driver.scaler.out_width = width; - driver.scaler.out_height = height; - driver.scaler.in_stride = pitch; - driver.scaler.out_stride = width * sizeof(uint16_t); + driver->scaler.in_width = width; + driver->scaler.in_height = height; + driver->scaler.out_width = width; + driver->scaler.out_height = height; + driver->scaler.in_stride = pitch; + driver->scaler.out_stride = width * sizeof(uint16_t); - scaler_ctx_scale(&driver.scaler, driver.scaler_out, data); + scaler_ctx_scale(&driver->scaler, driver->scaler_out, data); RARCH_PERFORMANCE_STOP(video_frame_conv); @@ -114,8 +116,9 @@ static void video_frame(const void *data, unsigned width, unsigned output_width = 0, output_height = 0, output_pitch = 0; const char *msg = NULL; runloop_t *runloop = rarch_main_get_ptr(); + driver_t *driver = driver_get_ptr(); - if (!driver.video_active) + if (!driver->video_active) return; g_extern.frame_cache.data = data; @@ -125,8 +128,8 @@ static void video_frame(const void *data, unsigned width, if (video_frame_scale(data, width, height, pitch)) { - data = driver.scaler_out; - pitch = driver.scaler.out_stride; + data = driver->scaler_out; + pitch = driver->scaler.out_stride; } /* Slightly messy code, @@ -140,7 +143,7 @@ static void video_frame(const void *data, unsigned width, recording_dump_frame(data, width, height, pitch); msg = rarch_main_msg_queue_pull(); - driver.current_msg = msg; + driver->current_msg = msg; if (video_frame_filter(data, width, height, pitch, &output_width, &output_height, &output_pitch)) @@ -151,13 +154,13 @@ static void video_frame(const void *data, unsigned width, pitch = output_pitch; } - if (driver.video->frame(driver.video_data, data, width, height, pitch, msg)) + if (driver->video->frame(driver->video_data, data, width, height, pitch, msg)) { runloop->frames.video.count++; return; } - driver.video_active = false; + driver->video_active = false; } /** @@ -179,20 +182,21 @@ bool retro_flush_audio(const int16_t *data, size_t samples) struct resampler_data src_data = {0}; struct rarch_dsp_data dsp_data = {0}; runloop_t *runloop = rarch_main_get_ptr(); + driver_t *driver = driver_get_ptr(); - if (driver.recording_data) + if (driver->recording_data) { struct ffemu_audio_data ffemu_data = {0}; ffemu_data.data = data; ffemu_data.frames = samples / 2; - if (driver.recording && driver.recording->push_audio) - driver.recording->push_audio(driver.recording_data, &ffemu_data); + if (driver->recording && driver->recording->push_audio) + driver->recording->push_audio(driver->recording_data, &ffemu_data); } if (runloop->is_paused || g_settings.audio.mute_enable) return true; - if (!driver.audio_active || !g_extern.audio_data.data) + if (!driver->audio_active || !g_extern.audio_data.data) return false; RARCH_PERFORMANCE_INIT(audio_convert_s16); @@ -232,8 +236,8 @@ bool retro_flush_audio(const int16_t *data, size_t samples) RARCH_PERFORMANCE_INIT(resampler_proc); RARCH_PERFORMANCE_START(resampler_proc); - rarch_resampler_process(driver.resampler, - driver.resampler_data, &src_data); + rarch_resampler_process(driver->resampler, + driver->resampler_data, &src_data); RARCH_PERFORMANCE_STOP(resampler_proc); output_data = g_extern.audio_data.outsamples; @@ -251,12 +255,12 @@ bool retro_flush_audio(const int16_t *data, size_t samples) output_size = sizeof(int16_t); } - if (driver.audio->write(driver.audio_data, output_data, + if (driver->audio->write(driver->audio_data, output_data, output_frames * output_size * 2) < 0) { RARCH_ERR(RETRO_LOG_AUDIO_WRITE_FAILED); - driver.audio_active = false; + driver->audio_active = false; return false; } @@ -404,6 +408,7 @@ static int16_t input_state(unsigned port, unsigned device, g_settings.input.binds[14], g_settings.input.binds[15], }; + driver_t *driver = driver_get_ptr(); device &= RETRO_DEVICE_MASK; @@ -422,10 +427,10 @@ static int16_t input_state(unsigned port, unsigned device, id = g_settings.input.remap_ids[port][id]; } - if (!driver.block_libretro_input) + if (!driver->block_libretro_input) { if (((id < RARCH_FIRST_META_KEY) || (device == RETRO_DEVICE_KEYBOARD))) - res = driver.input->input_state(driver.input_data, libretro_input_binds, port, + res = driver->input->input_state(driver->input_data, libretro_input_binds, port, device, idx, id); #ifdef HAVE_OVERLAY @@ -434,13 +439,13 @@ static int16_t input_state(unsigned port, unsigned device, switch (device) { case RETRO_DEVICE_JOYPAD: - if (driver.overlay_state.buttons & (UINT64_C(1) << id)) + if (driver->overlay_state.buttons & (UINT64_C(1) << id)) res |= 1; break; case RETRO_DEVICE_KEYBOARD: if (id < RETROK_LAST) { - if (OVERLAY_GET_KEY(&driver.overlay_state, id)) + if (OVERLAY_GET_KEY(&driver->overlay_state, id)) res |= 1; } break; @@ -452,8 +457,8 @@ static int16_t input_state(unsigned port, unsigned device, base = 2; if (id == RETRO_DEVICE_ID_ANALOG_Y) base += 1; - if (driver.overlay_state.analog[base]) - res = driver.overlay_state.analog[base]; + if (driver->overlay_state.analog[base]) + res = driver->overlay_state.analog[base]; } break; } @@ -462,7 +467,7 @@ static int16_t input_state(unsigned port, unsigned device, } /* flushing_input will be cleared in rarch_main_iterate. */ - if (driver.flushing_input) + if (driver->flushing_input) res = 0; /* Don't allow turbo for D-pad. */ @@ -490,67 +495,68 @@ static INLINE void input_poll_overlay(input_overlay_t *overlay_device, float opa unsigned i, j, device; uint16_t key_mod = 0; bool polled = false; + driver_t *driver = driver_get_ptr(); if (overlay_device->state != OVERLAY_STATUS_ALIVE) return; - memcpy(old_key_state.keys, driver.overlay_state.keys, - sizeof(driver.overlay_state.keys)); - memset(&driver.overlay_state, 0, sizeof(driver.overlay_state)); + memcpy(old_key_state.keys, driver->overlay_state.keys, + sizeof(driver->overlay_state.keys)); + memset(&driver->overlay_state, 0, sizeof(driver->overlay_state)); device = input_overlay_full_screen(overlay_device) ? RARCH_DEVICE_POINTER_SCREEN : RETRO_DEVICE_POINTER; for (i = 0; - driver.input->input_state(driver.input_data, NULL, 0, device, i, + driver->input->input_state(driver->input_data, NULL, 0, device, i, RETRO_DEVICE_ID_POINTER_PRESSED); i++) { input_overlay_state_t polled_data; - int16_t x = driver.input->input_state(driver.input_data, NULL, 0, + int16_t x = driver->input->input_state(driver->input_data, NULL, 0, device, i, RETRO_DEVICE_ID_POINTER_X); - int16_t y = driver.input->input_state(driver.input_data, NULL, 0, + int16_t y = driver->input->input_state(driver->input_data, NULL, 0, device, i, RETRO_DEVICE_ID_POINTER_Y); input_overlay_poll(overlay_device, &polled_data, x, y); - driver.overlay_state.buttons |= polled_data.buttons; + driver->overlay_state.buttons |= polled_data.buttons; - for (j = 0; j < ARRAY_SIZE(driver.overlay_state.keys); j++) - driver.overlay_state.keys[j] |= polled_data.keys[j]; + for (j = 0; j < ARRAY_SIZE(driver->overlay_state.keys); j++) + driver->overlay_state.keys[j] |= polled_data.keys[j]; /* Fingers pressed later take prio and matched up * with overlay poll priorities. */ for (j = 0; j < 4; j++) if (polled_data.analog[j]) - driver.overlay_state.analog[j] = polled_data.analog[j]; + driver->overlay_state.analog[j] = polled_data.analog[j]; polled = true; } - if (OVERLAY_GET_KEY(&driver.overlay_state, RETROK_LSHIFT) || - OVERLAY_GET_KEY(&driver.overlay_state, RETROK_RSHIFT)) + if (OVERLAY_GET_KEY(&driver->overlay_state, RETROK_LSHIFT) || + OVERLAY_GET_KEY(&driver->overlay_state, RETROK_RSHIFT)) key_mod |= RETROKMOD_SHIFT; - if (OVERLAY_GET_KEY(&driver.overlay_state, RETROK_LCTRL) || - OVERLAY_GET_KEY(&driver.overlay_state, RETROK_RCTRL)) + if (OVERLAY_GET_KEY(&driver->overlay_state, RETROK_LCTRL) || + OVERLAY_GET_KEY(&driver->overlay_state, RETROK_RCTRL)) key_mod |= RETROKMOD_CTRL; - if (OVERLAY_GET_KEY(&driver.overlay_state, RETROK_LALT) || - OVERLAY_GET_KEY(&driver.overlay_state, RETROK_RALT)) + if (OVERLAY_GET_KEY(&driver->overlay_state, RETROK_LALT) || + OVERLAY_GET_KEY(&driver->overlay_state, RETROK_RALT)) key_mod |= RETROKMOD_ALT; - if (OVERLAY_GET_KEY(&driver.overlay_state, RETROK_LMETA) || - OVERLAY_GET_KEY(&driver.overlay_state, RETROK_RMETA)) + if (OVERLAY_GET_KEY(&driver->overlay_state, RETROK_LMETA) || + OVERLAY_GET_KEY(&driver->overlay_state, RETROK_RMETA)) key_mod |= RETROKMOD_META; /* CAPSLOCK SCROLLOCK NUMLOCK */ - for (i = 0; i < ARRAY_SIZE(driver.overlay_state.keys); i++) + for (i = 0; i < ARRAY_SIZE(driver->overlay_state.keys); i++) { - if (driver.overlay_state.keys[i] != old_key_state.keys[i]) + if (driver->overlay_state.keys[i] != old_key_state.keys[i]) { uint32_t orig_bits = old_key_state.keys[i]; - uint32_t new_bits = driver.overlay_state.keys[i]; + uint32_t new_bits = driver->overlay_state.keys[i]; for (j = 0; j < 32; j++) if ((orig_bits & (1 << j)) != (new_bits & (1 << j))) @@ -565,13 +571,13 @@ static INLINE void input_poll_overlay(input_overlay_t *overlay_device, float opa unsigned bind_plus = RARCH_ANALOG_LEFT_X_PLUS + 2 * j; unsigned bind_minus = bind_plus + 1; - if (driver.overlay_state.analog[j]) + if (driver->overlay_state.analog[j]) continue; - if (driver.overlay_state.buttons & (1ULL << bind_plus)) - driver.overlay_state.analog[j] += 0x7fff; - if (driver.overlay_state.buttons & (1ULL << bind_minus)) - driver.overlay_state.analog[j] -= 0x7fff; + if (driver->overlay_state.buttons & (1ULL << bind_plus)) + driver->overlay_state.analog[j] += 0x7fff; + if (driver->overlay_state.buttons & (1ULL << bind_minus)) + driver->overlay_state.analog[j] -= 0x7fff; } /* Check for analog_dpad_mode. @@ -587,17 +593,17 @@ static INLINE void input_poll_overlay(input_overlay_t *overlay_device, float opa if (g_settings.input.analog_dpad_mode[0] == ANALOG_DPAD_LSTICK) analog_base = 0; - analog_x = (float)driver.overlay_state.analog[analog_base + 0] / 0x7fff; - analog_y = (float)driver.overlay_state.analog[analog_base + 1] / 0x7fff; + analog_x = (float)driver->overlay_state.analog[analog_base + 0] / 0x7fff; + analog_y = (float)driver->overlay_state.analog[analog_base + 1] / 0x7fff; if (analog_x <= -g_settings.input.axis_threshold) - driver.overlay_state.buttons |= (1ULL << RETRO_DEVICE_ID_JOYPAD_LEFT); + driver->overlay_state.buttons |= (1ULL << RETRO_DEVICE_ID_JOYPAD_LEFT); if (analog_x >= g_settings.input.axis_threshold) - driver.overlay_state.buttons |= (1ULL << RETRO_DEVICE_ID_JOYPAD_RIGHT); + driver->overlay_state.buttons |= (1ULL << RETRO_DEVICE_ID_JOYPAD_RIGHT); if (analog_y <= -g_settings.input.axis_threshold) - driver.overlay_state.buttons |= (1ULL << RETRO_DEVICE_ID_JOYPAD_UP); + driver->overlay_state.buttons |= (1ULL << RETRO_DEVICE_ID_JOYPAD_UP); if (analog_y >= g_settings.input.axis_threshold) - driver.overlay_state.buttons |= (1ULL << RETRO_DEVICE_ID_JOYPAD_DOWN); + driver->overlay_state.buttons |= (1ULL << RETRO_DEVICE_ID_JOYPAD_DOWN); break; } @@ -619,16 +625,18 @@ static INLINE void input_poll_overlay(input_overlay_t *overlay_device, float opa **/ static void input_poll(void) { - driver.input->poll(driver.input_data); + driver_t *driver = driver_get_ptr(); + + driver->input->poll(driver->input_data); #ifdef HAVE_OVERLAY - if (driver.overlay) - input_poll_overlay(driver.overlay, g_settings.input.overlay_opacity); + if (driver->overlay) + input_poll_overlay(driver->overlay, g_settings.input.overlay_opacity); #endif #ifdef HAVE_COMMAND - if (driver.command) - rarch_cmd_poll(driver.command); + if (driver->command) + rarch_cmd_poll(driver->command); #endif } @@ -662,6 +670,7 @@ void retro_set_default_callbacks(void *data) void retro_init_libretro_cbs(void *data) { struct retro_callbacks *cbs = (struct retro_callbacks*)data; + driver_t *driver = driver_get_ptr(); if (!cbs) return; @@ -675,7 +684,7 @@ void retro_init_libretro_cbs(void *data) retro_set_default_callbacks(cbs); #ifdef HAVE_NETPLAY - if (!driver.netplay_data) + if (!driver->netplay_data) return; if (g_extern.netplay_is_spectate) diff --git a/location/location_driver.c b/location/location_driver.c index d8609d0b61..ec0e1ad1d5 100644 --- a/location/location_driver.c +++ b/location/location_driver.c @@ -112,9 +112,11 @@ const char* config_get_location_driver_options(void) void find_location_driver(void) { + driver_t *driver = driver_get_ptr(); int i = find_driver_index("location_driver", g_settings.location.driver); + if (i >= 0) - driver.location = (const location_driver_t*)location_driver_find_handle(i); + driver->location = (const location_driver_t*)location_driver_find_handle(i); else { unsigned d; @@ -126,9 +128,9 @@ void find_location_driver(void) RARCH_WARN("Going to default to first location driver...\n"); - driver.location = (const location_driver_t*)location_driver_find_handle(0); + driver->location = (const location_driver_t*)location_driver_find_handle(0); - if (!driver.location) + if (!driver->location) rarch_fail(1, "find_location_driver()"); } } @@ -143,10 +145,11 @@ void find_location_driver(void) **/ bool driver_location_start(void) { - if (driver.location && driver.location_data && driver.location->start) + driver_t *driver = driver_get_ptr(); + if (driver->location && driver->location_data && driver->location->start) { if (g_settings.location.allow) - return driver.location->start(driver.location_data); + return driver->location->start(driver->location_data); rarch_main_msg_queue_push("Location is explicitly disabled.\n", 1, 180, true); } @@ -163,8 +166,9 @@ bool driver_location_start(void) **/ void driver_location_stop(void) { - if (driver.location && driver.location->stop && driver.location_data) - driver.location->stop(driver.location_data); + driver_t *driver = driver_get_ptr(); + if (driver->location && driver->location->stop && driver->location_data) + driver->location->stop(driver->location_data); } /** @@ -178,9 +182,10 @@ void driver_location_stop(void) void driver_location_set_interval(unsigned interval_msecs, unsigned interval_distance) { - if (driver.location && driver.location->set_interval - && driver.location_data) - driver.location->set_interval(driver.location_data, + driver_t *driver = driver_get_ptr(); + if (driver->location && driver->location->set_interval + && driver->location_data) + driver->location->set_interval(driver->location_data, interval_msecs, interval_distance); } @@ -200,9 +205,10 @@ void driver_location_set_interval(unsigned interval_msecs, bool driver_location_get_position(double *lat, double *lon, double *horiz_accuracy, double *vert_accuracy) { - if (driver.location && driver.location->get_position - && driver.location_data) - return driver.location->get_position(driver.location_data, + driver_t *driver = driver_get_ptr(); + if (driver->location && driver->location->get_position + && driver->location_data) + return driver->location->get_position(driver->location_data, lat, lon, horiz_accuracy, vert_accuracy); *lat = 0.0; @@ -214,18 +220,19 @@ bool driver_location_get_position(double *lat, double *lon, void init_location(void) { + driver_t *driver = driver_get_ptr(); /* Resource leaks will follow if location interface is initialized twice. */ - if (driver.location_data) + if (driver->location_data) return; find_location_driver(); - driver.location_data = driver.location->init(); + driver->location_data = driver->location->init(); - if (!driver.location_data) + if (!driver->location_data) { RARCH_ERR("Failed to initialize location driver. Will continue without location.\n"); - driver.location_active = false; + driver->location_active = false; } if (g_extern.system.location_callback.initialized) @@ -234,13 +241,14 @@ void init_location(void) void uninit_location(void) { - if (driver.location_data && driver.location) + driver_t *driver = driver_get_ptr(); + if (driver->location_data && driver->location) { if (g_extern.system.location_callback.deinitialized) g_extern.system.location_callback.deinitialized(); - if (driver.location->free) - driver.location->free(driver.location_data); + if (driver->location->free) + driver->location->free(driver->location_data); } - driver.location_data = NULL; + driver->location_data = NULL; } diff --git a/menu/drivers/glui.c b/menu/drivers/glui.c index 414cd9f632..4b869acadb 100644 --- a/menu/drivers/glui.c +++ b/menu/drivers/glui.c @@ -71,6 +71,7 @@ static int glui_entry_iterate(unsigned action) static void glui_blit_line(gl_t *gl, float x, float y, const char *message, uint32_t color) { struct font_params params = {0}; + driver_t *driver = driver_get_ptr(); gl_set_viewport(gl, gl->win_width, gl->win_height, false, false); @@ -80,14 +81,14 @@ static void glui_blit_line(gl_t *gl, float x, float y, const char *message, uint params.color = color; params.full_screen = true; - if (!driver.video_data) + if (!driver->video_data) return; - if (!driver.video_poke) + if (!driver->video_poke) return; - if (!driver.video_poke->set_osd_msg) + if (!driver->video_poke->set_osd_msg) return; - driver.video_poke->set_osd_msg(driver.video_data, + driver->video_poke->set_osd_msg(driver->video_data, message, ¶ms, NULL); } diff --git a/menu/drivers/rgui.c b/menu/drivers/rgui.c index 793e4375f5..ac175768ce 100644 --- a/menu/drivers/rgui.c +++ b/menu/drivers/rgui.c @@ -355,6 +355,7 @@ static void rgui_render(void) const char *core_version = NULL; menu_handle_t *menu = menu_driver_resolve(); runloop_t *runloop = rarch_main_get_ptr(); + driver_t *driver = driver_get_ptr(); if (!menu) return; @@ -502,7 +503,7 @@ static void rgui_render(void) menu->msg_force = false; } else - message_queue = driver.current_msg; + message_queue = driver->current_msg; rgui_render_messagebox( message_queue); #endif @@ -583,22 +584,23 @@ static void rgui_set_texture(void) { menu_handle_t *menu = menu_driver_resolve(); runloop_t *runloop = rarch_main_get_ptr(); + driver_t *driver = driver_get_ptr(); if (!menu) return; - if (!driver.video_data) + if (!driver->video_data) return; - if (!driver.video_poke) + if (!driver->video_poke) return; - if (!driver.video_poke->set_texture_frame) + if (!driver->video_poke->set_texture_frame) return; if (!runloop->frames.video.current.menu.framebuf.dirty) return; runloop->frames.video.current.menu.framebuf.dirty = false; - driver.video_poke->set_texture_frame(driver.video_data, + driver->video_poke->set_texture_frame(driver->video_data, menu->frame_buf.data, false, menu->frame_buf.width, menu->frame_buf.height, 1.0f); } diff --git a/menu/drivers/shared.h b/menu/drivers/shared.h index 2331900b81..0c5c6f850f 100644 --- a/menu/drivers/shared.h +++ b/menu/drivers/shared.h @@ -340,7 +340,9 @@ static INLINE void get_title(const char *label, const char *dir, snprintf(title, sizeof_title, "AUTOCONFIG DIR %s", dir); else { - if (driver.menu->defer_core) + driver_t *driver = driver_get_ptr(); + + if (driver->menu->defer_core) snprintf(title, sizeof_title, "CONTENT %s", dir); else { diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 3e3e64ad5b..3894360e0d 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -384,6 +384,7 @@ static void xmb_draw_text(gl_t *gl, xmb_handle_t *xmb, const char *str, float x, { uint8_t a8 = 0; struct font_params params = {0}; + driver_t *driver = driver_get_ptr(); if (alpha > xmb->alpha) alpha = xmb->alpha; @@ -407,9 +408,9 @@ static void xmb_draw_text(gl_t *gl, xmb_handle_t *xmb, const char *str, float x, params.full_screen = true; params.align_right = align_right; - if (driver.video_data && driver.video_poke - && driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, + if (driver->video_data && driver->video_poke + && driver->video_poke->set_osd_msg) + driver->video_poke->set_osd_msg(driver->video_data, str, ¶ms, xmb->font.buf); } @@ -1504,7 +1505,8 @@ static bool xmb_font_init_first(const gl_font_renderer_t **font_driver, if (g_settings.video.threaded && !g_extern.system.hw_render_callback.context_type) { - thread_video_t *thr = (thread_video_t*)driver.video_data; + driver_t *driver = driver_get_ptr(); + thread_video_t *thr = (thread_video_t*)driver->video_data; if (!thr) return false; diff --git a/menu/menu.c b/menu/menu.c index 3fbd5e0854..5b5a932d60 100644 --- a/menu/menu.c +++ b/menu/menu.c @@ -42,19 +42,20 @@ bool menu_display_update_pending(void) **/ static void draw_frame(void) { - if (driver.video_data && driver.video_poke && - driver.video_poke->set_texture_enable) - driver.video_poke->set_texture_enable(driver.video_data, + driver_t *driver = driver_get_ptr(); + if (driver->video_data && driver->video_poke && + driver->video_poke->set_texture_enable) + driver->video_poke->set_texture_enable(driver->video_data, true, false); if (!g_settings.menu.pause_libretro) { if (g_extern.main_is_init && !g_extern.libretro_dummy) { - bool block_libretro_input = driver.block_libretro_input; - driver.block_libretro_input = true; + bool block_libretro_input = driver->block_libretro_input; + driver->block_libretro_input = true; pretro_run(); - driver.block_libretro_input = block_libretro_input; + driver->block_libretro_input = block_libretro_input; return; } } @@ -70,13 +71,15 @@ static void draw_frame(void) **/ static void menu_update_libretro_info(struct retro_system_info *info) { + driver_t *driver = driver_get_ptr(); + #ifndef HAVE_DYNAMIC retro_get_system_info(info); #endif rarch_main_command(RARCH_CMD_CORE_INFO_INIT); - if (driver.menu_ctx && driver.menu_ctx->context_reset) - driver.menu_ctx->context_reset(); + if (driver->menu_ctx && driver->menu_ctx->context_reset) + driver->menu_ctx->context_reset(); rarch_main_command(RARCH_CMD_LOAD_CORE_PERSIST); } @@ -85,11 +88,12 @@ static void menu_environment_get(int *argc, char *argv[], void *args, void *params_data) { struct rarch_main_wrap *wrap_args = (struct rarch_main_wrap*)params_data; + driver_t *driver = driver_get_ptr(); if (!wrap_args) return; - wrap_args->no_content = driver.menu->load_no_content; + wrap_args->no_content = driver->menu->load_no_content; if (!g_extern.has_set_verbosity) wrap_args->verbose = g_extern.verbosity; wrap_args->config_path = *g_extern.config_path ? g_extern.config_path : NULL; @@ -132,20 +136,22 @@ static void push_to_history_playlist(void) **/ bool menu_load_content(void) { - if (*g_extern.fullpath || (driver.menu && driver.menu->load_no_content)) + driver_t *driver = driver_get_ptr(); + + if (*g_extern.fullpath || (driver->menu && driver->menu->load_no_content)) push_to_history_playlist(); /* redraw menu frame */ - if (driver.menu) - driver.menu->msg_force = true; + if (driver->menu) + driver->menu->msg_force = true; - if (driver.menu_ctx && driver.menu_ctx->entry_iterate) - driver.menu_ctx->entry_iterate(MENU_ACTION_NOOP); + if (driver->menu_ctx && driver->menu_ctx->entry_iterate) + driver->menu_ctx->entry_iterate(MENU_ACTION_NOOP); draw_frame(); if (!(main_load_content(0, NULL, NULL, menu_environment_get, - driver.frontend_ctx->process_args))) + driver->frontend_ctx->process_args))) { char name[PATH_MAX_LENGTH], msg[PATH_MAX_LENGTH]; @@ -153,15 +159,15 @@ bool menu_load_content(void) snprintf(msg, sizeof(msg), "Failed to load %s.\n", name); rarch_main_msg_queue_push(msg, 1, 90, false); - if (driver.menu) - driver.menu->msg_force = true; + if (driver->menu) + driver->menu->msg_force = true; return false; } menu_update_libretro_info(&g_extern.menu.info); - menu_shader_manager_init(driver.menu); + menu_shader_manager_init(driver->menu); rarch_main_command(RARCH_CMD_HISTORY_INIT); rarch_main_command(RARCH_CMD_VIDEO_SET_ASPECT_RATIO); @@ -262,6 +268,7 @@ void menu_free_list(void *data) void menu_free(void *data) { menu_handle_t *menu = (menu_handle_t*)data; + driver_t *driver = driver_get_ptr(); if (!menu) return; @@ -272,8 +279,8 @@ void menu_free(void *data) menu->shader = NULL; #endif - if (driver.menu_ctx && driver.menu_ctx->free) - driver.menu_ctx->free(menu); + if (driver->menu_ctx && driver->menu_ctx->free) + driver->menu_ctx->free(menu); #ifdef HAVE_LIBRETRODB menu_database_free(menu); @@ -392,6 +399,7 @@ int menu_iterate(retro_input_t input, runloop_t *runloop = rarch_main_get_ptr(); menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); menu->cur_time = rarch_get_time_usec(); menu->dt = menu->cur_time - menu->old_time; @@ -407,14 +415,14 @@ int menu_iterate(retro_input_t input, last_clock_update = menu->cur_time; } - if (driver.menu_ctx && driver.menu_ctx->entry_iterate) - ret = driver.menu_ctx->entry_iterate(action); + if (driver->menu_ctx && driver->menu_ctx->entry_iterate) + ret = driver->menu_ctx->entry_iterate(action); if (runloop->is_menu && !runloop->is_idle) draw_frame(); - if (driver.menu_ctx && driver.menu_ctx->set_texture) - driver.menu_ctx->set_texture(); + if (driver->menu_ctx && driver->menu_ctx->set_texture) + driver->menu_ctx->set_texture(); if (ret) return -1; diff --git a/menu/menu_driver.c b/menu/menu_driver.c index ec8920d219..4986af2273 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -123,9 +123,11 @@ const char* config_get_menu_driver_options(void) void find_menu_driver(void) { + driver_t *driver = driver_get_ptr(); + int i = find_driver_index("menu_driver", g_settings.menu.driver); if (i >= 0) - driver.menu_ctx = (const menu_ctx_driver_t*)menu_driver_find_handle(i); + driver->menu_ctx = (const menu_ctx_driver_t*)menu_driver_find_handle(i); else { unsigned d; @@ -136,26 +138,27 @@ void find_menu_driver(void) RARCH_LOG_OUTPUT("\t%s\n", menu_driver_find_ident(d)); RARCH_WARN("Going to default to first menu driver...\n"); - driver.menu_ctx = (const menu_ctx_driver_t*)menu_driver_find_handle(0); + driver->menu_ctx = (const menu_ctx_driver_t*)menu_driver_find_handle(0); - if (!driver.menu_ctx) + if (!driver->menu_ctx) rarch_fail(1, "find_menu_driver()"); } } void init_menu(void) { - if (driver.menu) + driver_t *driver = driver_get_ptr(); + if (driver->menu) return; find_menu_driver(); - if (!(driver.menu = (menu_handle_t*)menu_init(driver.menu_ctx))) + if (!(driver->menu = (menu_handle_t*)menu_init(driver->menu_ctx))) { RARCH_ERR("Cannot initialize menu.\n"); rarch_fail(1, "init_menu()"); } - if (!(menu_entries_init(driver.menu))) + if (!(menu_entries_init(driver->menu))) { RARCH_ERR("Cannot initialize menu lists.\n"); rarch_fail(1, "init_menu()"); @@ -164,7 +167,8 @@ void init_menu(void) menu_handle_t *menu_driver_resolve(void) { - if (!driver.menu) + driver_t *driver = driver_get_ptr(); + if (!driver->menu) return NULL; - return driver.menu; + return driver->menu; } diff --git a/menu/menu_entries.c b/menu/menu_entries.c index 0d9214392b..c95776d445 100644 --- a/menu/menu_entries.c +++ b/menu/menu_entries.c @@ -87,6 +87,7 @@ int menu_entries_push_list(menu_handle_t *menu, unsigned type, unsigned setting_flags) { rarch_setting_t *setting = NULL; + driver_t *driver = driver_get_ptr(); settings_list_free(menu->list_settings); menu->list_settings = (rarch_setting_t *)setting_data_new(setting_flags); @@ -110,8 +111,8 @@ int menu_entries_push_list(menu_handle_t *menu, setting->name, menu_entries_setting_set_flags(setting), 0); } - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } @@ -332,9 +333,11 @@ int menu_entries_parse_list( if (!*dir) { + driver_t *driver = driver_get_ptr(); + menu_entries_parse_drive_list(list); - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(dir, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(dir, label, type); return 0; } #if defined(GEKKO) && defined(HW_RVL) @@ -442,7 +445,9 @@ int menu_entries_parse_list( if (!strcmp(label, "core_list")) { - menu_list_get_last_stack(driver.menu->menu_list, &dir, NULL, NULL); + driver_t *driver = driver_get_ptr(); + + menu_list_get_last_stack(driver->menu->menu_list, &dir, NULL, NULL); list_size = file_list_get_size(list); for (i = 0; i < list_size; i++) @@ -476,17 +481,18 @@ int menu_entries_deferred_push(file_list_t *list, file_list_t *menu_list) const char *path = NULL; const char *label = NULL; menu_file_list_cbs_t *cbs = NULL; + driver_t *driver = driver_get_ptr(); - menu_list_get_last_stack(driver.menu->menu_list, &path, &label, &type); + menu_list_get_last_stack(driver->menu->menu_list, &path, &label, &type); if (!strcmp(label, "Main Menu")) - return menu_entries_push_list(driver.menu, list, path, label, type, + return menu_entries_push_list(driver->menu, list, path, label, type, SL_FLAG_MAIN_MENU); else if (!strcmp(label, "Horizontal Menu")) - return menu_entries_push_horizontal_menu_list(driver.menu, list, path, label, type); + return menu_entries_push_horizontal_menu_list(driver->menu, list, path, label, type); cbs = (menu_file_list_cbs_t*) - menu_list_get_last_stack_actiondata(driver.menu->menu_list); + menu_list_get_last_stack_actiondata(driver->menu->menu_list); if (!cbs->action_deferred_push) return 0; diff --git a/menu/menu_entries_cbs_deferred_push.c b/menu/menu_entries_cbs_deferred_push.c index 597e992d49..6e2573ace7 100644 --- a/menu/menu_entries_cbs_deferred_push.c +++ b/menu/menu_entries_cbs_deferred_push.c @@ -133,6 +133,7 @@ static int deferred_push_core_information(void *data, void *userdata, core_info_t *info = NULL; file_list_t *list = (file_list_t*)data; file_list_t *menu_list = (file_list_t*)userdata; + driver_t *driver = driver_get_ptr(); if (!list || !menu_list) return -1; @@ -263,8 +264,8 @@ static int deferred_push_core_information(void *data, void *userdata, "No information available.", "", MENU_SETTINGS_CORE_OPTION_NONE, 0); - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } @@ -283,6 +284,7 @@ static int deferred_push_rdb_entry_detail(void *data, void *userdata, file_list_t *menu_list = NULL; struct string_list *str_list = NULL; menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return -1; @@ -539,8 +541,8 @@ static int deferred_push_rdb_entry_detail(void *data, void *userdata, "No information available.", "", 0, 0); - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, str_list->elems[0].data, type); ret = 0; @@ -774,6 +776,7 @@ static int deferred_push_core_information(void *data, void *userdata, core_info_t *info = NULL; file_list_t *list = (file_list_t*)data; file_list_t *menu_list = (file_list_t*)userdata; + driver_t *driver = driver_get_ptr(); if (!list || !menu_list) return -1; @@ -904,8 +907,8 @@ static int deferred_push_core_information(void *data, void *userdata, "No information available.", "", MENU_SETTINGS_CORE_OPTION_NONE, 0); - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } @@ -916,6 +919,7 @@ static int deferred_push_performance_counters(void *data, void *userdata, { file_list_t *list = (file_list_t*)data; file_list_t *menu_list = (file_list_t*)userdata; + driver_t *driver = driver_get_ptr(); if (!list || !menu_list) return -1; @@ -926,8 +930,8 @@ static int deferred_push_performance_counters(void *data, void *userdata, menu_list_push(list, "Core Counters", "core_counters", MENU_SETTING_ACTION, 0); - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } @@ -939,6 +943,7 @@ static int deferred_push_video_shader_parameters_common(void *data, void *userda unsigned i; file_list_t *list = (file_list_t*)data; file_list_t *menu_list = (file_list_t*)userdata; + driver_t *driver = driver_get_ptr(); if (!list || !menu_list) return -1; @@ -952,8 +957,8 @@ static int deferred_push_video_shader_parameters_common(void *data, void *userda base_parameter + i, 0); } - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } @@ -995,6 +1000,7 @@ static int deferred_push_settings(void *data, void *userdata, file_list_t *list = NULL; file_list_t *menu_list = NULL; menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return -1; @@ -1048,8 +1054,8 @@ static int deferred_push_settings(void *data, void *userdata, } } - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } @@ -1063,6 +1069,7 @@ static int deferred_push_settings_subgroup(void *data, void *userdata, file_list_t *list = NULL; file_list_t *menu_list = NULL; menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return -1; @@ -1122,8 +1129,8 @@ static int deferred_push_settings_subgroup(void *data, void *userdata, group_label, menu_entries_setting_set_flags(setting), 0); } - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } @@ -1145,6 +1152,7 @@ static int deferred_push_video_options(void *data, void *userdata, file_list_t *list = NULL; file_list_t *menu_list = NULL; menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return -1; @@ -1167,8 +1175,8 @@ static int deferred_push_video_options(void *data, void *userdata, 0, 0); #endif - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } @@ -1181,6 +1189,7 @@ static int deferred_push_shader_options(void *data, void *userdata, file_list_t *list = NULL; file_list_t *menu_list = NULL; menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return -1; @@ -1227,8 +1236,8 @@ static int deferred_push_shader_options(void *data, void *userdata, MENU_SETTINGS_SHADER_PASS_SCALE_0 + i, 0); } - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } @@ -1238,6 +1247,7 @@ static int deferred_push_options(void *data, void *userdata, { file_list_t *list = (file_list_t*)data; file_list_t *menu_list = (file_list_t*)userdata; + driver_t *driver = driver_get_ptr(); if (!list || !menu_list) return -1; @@ -1263,8 +1273,8 @@ static int deferred_push_options(void *data, void *userdata, MENU_SETTING_ACTION, 0); #endif - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } @@ -1274,6 +1284,7 @@ static int deferred_push_management_options(void *data, void *userdata, { file_list_t *list = (file_list_t*)data; file_list_t *menu_list = (file_list_t*)userdata; + driver_t *driver = driver_get_ptr(); if (!list || !menu_list) return -1; @@ -1287,8 +1298,8 @@ static int deferred_push_management_options(void *data, void *userdata, MENU_SETTING_ACTION, 0); #endif - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } @@ -1319,6 +1330,7 @@ static int push_perfcounter_generic( file_list_t *list = NULL; file_list_t *menu_list = NULL; menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return -1; @@ -1332,8 +1344,8 @@ static int push_perfcounter_generic( menu_list_clear(list); push_perfcounter(menu, list, counters, num, ident); - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } @@ -1360,6 +1372,7 @@ static int deferred_push_core_cheat_options(void *data, void *userdata, unsigned i; file_list_t *list = (file_list_t*)data; cheat_manager_t *cheat = g_extern.cheat; + driver_t *driver = driver_get_ptr(); (void)userdata; (void)type; @@ -1395,8 +1408,8 @@ static int deferred_push_core_cheat_options(void *data, void *userdata, menu_list_push(list, cheat_label, "", MENU_SETTINGS_CHEAT_BEGIN + i, 0); } - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } @@ -1406,6 +1419,7 @@ static int deferred_push_core_input_remapping_options(void *data, void *userdata { unsigned p, retro_id; file_list_t *list = (file_list_t*)data; + driver_t *driver = driver_get_ptr(); (void)userdata; (void)type; @@ -1438,8 +1452,8 @@ static int deferred_push_core_input_remapping_options(void *data, void *userdata } } - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } @@ -1449,6 +1463,7 @@ static int deferred_push_core_options(void *data, void *userdata, { unsigned i; file_list_t *list = (file_list_t*)data; + driver_t *driver = driver_get_ptr(); (void)userdata; @@ -1470,8 +1485,8 @@ static int deferred_push_core_options(void *data, void *userdata, menu_list_push(list, "No options available.", "", MENU_SETTINGS_CORE_OPTION_NONE, 0); - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } @@ -1480,6 +1495,7 @@ static int deferred_push_disk_options(void *data, void *userdata, const char *path, const char *label, unsigned type) { file_list_t *list = (file_list_t*)data; + driver_t *driver = driver_get_ptr(); (void)userdata; @@ -1494,8 +1510,8 @@ static int deferred_push_disk_options(void *data, void *userdata, menu_list_push(list, "Disk Image Append", "disk_image_append", MENU_SETTINGS_CORE_DISK_OPTIONS_DISK_IMAGE_APPEND, 0); - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } diff --git a/menu/menu_entries_cbs_iterate.c b/menu/menu_entries_cbs_iterate.c index a218aaf6bc..28668f6d8d 100644 --- a/menu/menu_entries_cbs_iterate.c +++ b/menu/menu_entries_cbs_iterate.c @@ -111,6 +111,7 @@ static int load_or_open_zip_iterate(unsigned action) { char msg[PATH_MAX_LENGTH]; menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return -1; @@ -121,11 +122,11 @@ static int load_or_open_zip_iterate(unsigned action) " - OK to open as Folder\n" " - Cancel/Back to Load \n"); - if (driver.video_data && driver.menu_ctx - && driver.menu_ctx->render_messagebox) + if (driver->video_data && driver->menu_ctx + && driver->menu_ctx->render_messagebox) { if (*msg && msg[0] != '\0') - driver.menu_ctx->render_messagebox(msg); + driver->menu_ctx->render_messagebox(msg); } switch (action) @@ -174,10 +175,11 @@ static int mouse_post_iterate(menu_file_list_cbs_t *cbs, const char *path, { if (!menu->mouse.oldleft) { + driver_t *driver = driver_get_ptr(); rarch_setting_t *setting = (rarch_setting_t*)setting_data_find_setting - (driver.menu->list_settings, - driver.menu->menu_list->selection_buf->list[menu->navigation.selection_ptr].label); + (driver->menu->list_settings, + driver->menu->menu_list->selection_buf->list[menu->navigation.selection_ptr].label); menu->mouse.oldleft = true; #if 0 @@ -240,11 +242,13 @@ static int action_iterate_help(const char *label, unsigned action) char desc[ARRAY_SIZE(binds)][64]; char msg[PATH_MAX_LENGTH]; menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); + if (!menu) return 0; - if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render) - driver.menu_ctx->render(); + if (driver->video_data && driver->menu_ctx && driver->menu_ctx->render) + driver->menu_ctx->render(); for (i = 0; i < ARRAY_SIZE(binds); i++) { @@ -281,8 +285,8 @@ static int action_iterate_help(const char *label, unsigned action) "Press Accept/OK to continue.", desc[0], desc[1], desc[2], desc[3], desc[4], desc[5], desc[6], desc[7]); - if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render_messagebox) - driver.menu_ctx->render_messagebox(msg); + if (driver->video_data && driver->menu_ctx && driver->menu_ctx->render_messagebox) + driver->menu_ctx->render_messagebox(msg); if (action == MENU_ACTION_OK) menu_list_pop(menu->menu_list->menu_stack, NULL); @@ -298,13 +302,14 @@ static int action_iterate_info(const char *label, unsigned action) rarch_setting_t *current_setting = NULL; file_list_t *list = NULL; menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return 0; list = (file_list_t*)menu->menu_list->selection_buf; - if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render) - driver.menu_ctx->render(); + if (driver->video_data && driver->menu_ctx && driver->menu_ctx->render) + driver->menu_ctx->render(); current_setting = (rarch_setting_t*)setting_data_find_setting( menu->list_settings, @@ -332,11 +337,11 @@ static int action_iterate_info(const char *label, unsigned action) setting_data_get_description(needle, msg, sizeof(msg)); - if (driver.video_data && driver.menu_ctx && - driver.menu_ctx->render_messagebox) + if (driver->video_data && driver->menu_ctx && + driver->menu_ctx->render_messagebox) { if (*msg && msg[0] != '\0') - driver.menu_ctx->render_messagebox(msg); + driver->menu_ctx->render_messagebox(msg); } if (action == MENU_ACTION_OK) @@ -371,6 +376,7 @@ static int action_iterate_menu_viewport(const char *label, unsigned action) unsigned type = 0; video_viewport_t *custom = &g_extern.console.screen.viewports.custom_vp; menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return -1; @@ -463,9 +469,9 @@ static int action_iterate_menu_viewport(const char *label, unsigned action) { video_viewport_t vp; - if (driver.video_data && driver.video && - driver.video->viewport_info) - driver.video->viewport_info(driver.video_data, &vp); + if (driver->video_data && driver->video && + driver->video->viewport_info) + driver->video->viewport_info(driver->video_data, &vp); if (type == MENU_SETTINGS_CUSTOM_VIEWPORT) { @@ -494,8 +500,8 @@ static int action_iterate_menu_viewport(const char *label, unsigned action) menu_list_get_last_stack(menu->menu_list, NULL, &label, &type); - if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render) - driver.menu_ctx->render(); + if (driver->video_data && driver->menu_ctx && driver->menu_ctx->render) + driver->menu_ctx->render(); if (g_settings.video.scale_integer) { @@ -524,9 +530,9 @@ static int action_iterate_menu_viewport(const char *label, unsigned action) base_msg, custom->x, custom->y, custom->width, custom->height); } - if (driver.video_data && driver.menu_ctx && - driver.menu_ctx->render_messagebox) - driver.menu_ctx->render_messagebox(msg); + if (driver->video_data && driver->menu_ctx && + driver->menu_ctx->render_messagebox) + driver->menu_ctx->render_messagebox(msg); if (!custom->width) custom->width = stride_x; @@ -564,12 +570,14 @@ static int action_iterate_custom_bind_keyboard(const char *label, unsigned actio static int action_iterate_message(const char *label, unsigned action) { menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); + if (!menu) return -1; - if (driver.video_data && driver.menu_ctx - && driver.menu_ctx->render_messagebox) - driver.menu_ctx->render_messagebox(menu->message_contents); + if (driver->video_data && driver->menu_ctx + && driver->menu_ctx->render_messagebox) + driver->menu_ctx->render_messagebox(menu->message_contents); if (action == MENU_ACTION_OK) menu_list_pop_stack(menu->menu_list); @@ -582,6 +590,7 @@ static int mouse_iterate(unsigned *action) const struct retro_keybind *binds[MAX_USERS]; menu_handle_t *menu = menu_driver_resolve(); runloop_t *runloop = rarch_main_get_ptr(); + driver_t *driver = driver_get_ptr(); if (!menu) return -1; @@ -616,21 +625,21 @@ static int mouse_iterate(unsigned *action) return 0; } - menu->mouse.left = driver.input->input_state(driver.input_data, + menu->mouse.left = driver->input->input_state(driver->input_data, binds, 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_LEFT); - menu->mouse.right = driver.input->input_state(driver.input_data, + menu->mouse.right = driver->input->input_state(driver->input_data, binds, 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_RIGHT); - menu->mouse.wheelup = driver.input->input_state(driver.input_data, + menu->mouse.wheelup = driver->input->input_state(driver->input_data, binds, 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_WHEELUP); - menu->mouse.wheeldown = driver.input->input_state(driver.input_data, + menu->mouse.wheeldown = driver->input->input_state(driver->input_data, binds, 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_WHEELDOWN); - menu->mouse.hwheelup = driver.input->input_state(driver.input_data, + menu->mouse.hwheelup = driver->input->input_state(driver->input_data, binds, 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP); - menu->mouse.hwheeldown = driver.input->input_state(driver.input_data, + menu->mouse.hwheeldown = driver->input->input_state(driver->input_data, binds, 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN); - menu->mouse.dx = driver.input->input_state(driver.input_data, + menu->mouse.dx = driver->input->input_state(driver->input_data, binds, 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_X); - menu->mouse.dy = driver.input->input_state(driver.input_data, + menu->mouse.dy = driver->input->input_state(driver->input_data, binds, 0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_Y); menu->mouse.x += menu->mouse.dx; @@ -665,6 +674,7 @@ static int action_iterate_main(const char *label, unsigned action) const char *path_offset = NULL; menu_file_list_cbs_t *cbs = NULL; menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return 0; @@ -774,8 +784,8 @@ static int action_iterate_main(const char *label, unsigned action) ret = mouse_post_iterate(cbs, path_offset, label_offset, type_offset, action); - if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render) - driver.menu_ctx->render(); + if (driver->video_data && driver->menu_ctx && driver->menu_ctx->render) + driver->menu_ctx->render(); /* Have to defer it so we let settings refresh. */ if (menu->push_start_screen) diff --git a/menu/menu_entries_cbs_ok.c b/menu/menu_entries_cbs_ok.c index 5a354e6683..540a5742aa 100644 --- a/menu/menu_entries_cbs_ok.c +++ b/menu/menu_entries_cbs_ok.c @@ -262,10 +262,11 @@ static int action_ok_core_updater_list(const char *path, { char url_path[PATH_MAX_LENGTH]; menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return -1; - driver.menu->nonblocking_refresh = true; + driver->menu->nonblocking_refresh = true; (void)url_path; #ifdef HAVE_NETWORKING @@ -835,6 +836,7 @@ static int action_ok_custom_viewport(const char *path, /* Start with something sane. */ video_viewport_t *custom = &g_extern.console.screen.viewports.custom_vp; menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return -1; @@ -847,9 +849,9 @@ static int action_ok_custom_viewport(const char *path, MENU_SETTINGS_CUSTOM_VIEWPORT, idx); - if (driver.video_data && driver.video && - driver.video->viewport_info) - driver.video->viewport_info(driver.video_data, custom); + if (driver->video_data && driver->video && + driver->video->viewport_info) + driver->video->viewport_info(driver->video_data, custom); aspectratio_lut[ASPECT_RATIO_CUSTOM].value = (float)custom->width / custom->height; @@ -1064,6 +1066,7 @@ static int action_ok_help(const char *path, static int action_ok_video_resolution(const char *path, const char *label, unsigned type, size_t idx) { + #ifdef __CELLOS_LV2__ if (g_extern.console.screen.resolutions.list[ g_extern.console.screen.resolutions.current.idx] == @@ -1080,16 +1083,18 @@ static int action_ok_video_resolution(const char *path, rarch_main_command(RARCH_CMD_REINIT); #else - if (driver.video_data && driver.video_poke && - driver.video_poke->get_video_output_size) + driver_t *driver = driver_get_ptr(); + + if (driver->video_data && driver->video_poke && + driver->video_poke->get_video_output_size) { unsigned width = 0, height = 0; - driver.video_poke->get_video_output_size(driver.video_data, + driver->video_poke->get_video_output_size(driver->video_data, &width, &height); - if (driver.video_data && driver.video_poke && - driver.video_poke->set_video_mode) - driver.video_poke->set_video_mode(driver.video_data, + if (driver->video_data && driver->video_poke && + driver->video_poke->set_video_mode) + driver->video_poke->set_video_mode(driver->video_data, width, height, true); } #endif diff --git a/menu/menu_entries_cbs_representation.c b/menu/menu_entries_cbs_representation.c index 3373517cc0..b5d255288e 100644 --- a/menu/menu_entries_cbs_representation.c +++ b/menu/menu_entries_cbs_representation.c @@ -207,10 +207,11 @@ static void menu_action_setting_disp_set_label_shader_parameter( const struct video_shader_parameter *param = NULL; struct video_shader *shader = NULL; #endif + driver_t *driver = driver_get_ptr(); - if (!driver.video_poke) + if (!driver->video_poke) return; - if (!driver.video_data) + if (!driver->video_data) return; *type_str = '\0'; @@ -493,6 +494,8 @@ static void menu_action_setting_disp_set_label_menu_video_resolution( char *path_buf, size_t path_buf_size) { unsigned width = 0, height = 0; + driver_t *driver = driver_get_ptr(); + *w = 19; *type_str = '\0'; @@ -501,10 +504,10 @@ static void menu_action_setting_disp_set_label_menu_video_resolution( strlcpy(path_buf, path, path_buf_size); - if (driver.video_data && driver.video_poke && - driver.video_poke->get_video_output_size) + if (driver->video_data && driver->video_poke && + driver->video_poke->get_video_output_size) { - driver.video_poke->get_video_output_size(driver.video_data, + driver->video_poke->get_video_output_size(driver->video_data, &width, &height); snprintf(type_str, type_str_size, "%ux%u", width, height); } diff --git a/menu/menu_entries_cbs_toggle.c b/menu/menu_entries_cbs_toggle.c index 3cdb1a9356..dbd2db3d18 100644 --- a/menu/menu_entries_cbs_toggle.c +++ b/menu/menu_entries_cbs_toggle.c @@ -201,13 +201,15 @@ static int action_toggle_mainmenu(unsigned type, const char *label, { menu_file_list_cbs_t *cbs = NULL; unsigned push_list = 0; + driver_t *driver = driver_get_ptr(); menu_handle_t *menu = menu_driver_resolve(); if (!menu) return -1; if (file_list_get_size(menu->menu_list->menu_stack) == 1) { - if (!strcmp(driver.menu_ctx->ident, "xmb")) + + if (!strcmp(driver->menu_ctx->ident, "xmb")) { menu->navigation.selection_ptr = 0; switch (action) @@ -235,8 +237,8 @@ static int action_toggle_mainmenu(unsigned type, const char *label, switch (push_list) { case 1: - if (driver.menu_ctx->list_cache) - driver.menu_ctx->list_cache(true, action); + if (driver->menu_ctx->list_cache) + driver->menu_ctx->list_cache(true, action); if (cbs && cbs->action_content_list_switch) return cbs->action_content_list_switch( @@ -409,6 +411,8 @@ static int action_toggle_shader_num_passes(unsigned type, const char *label, static int action_toggle_video_resolution(unsigned type, const char *label, unsigned action, bool wraparound) { + driver_t *driver = driver_get_ptr(); + #if defined(__CELLOS_LV2__) switch (action) { @@ -436,17 +440,17 @@ static int action_toggle_video_resolution(unsigned type, const char *label, switch (action) { case MENU_ACTION_LEFT: - if (driver.video_data && driver.video_poke && - driver.video_poke->get_video_output_prev) + if (driver->video_data && driver->video_poke && + driver->video_poke->get_video_output_prev) { - driver.video_poke->get_video_output_prev(driver.video_data); + driver->video_poke->get_video_output_prev(driver->video_data); } break; case MENU_ACTION_RIGHT: - if (driver.video_data && driver.video_poke && - driver.video_poke->get_video_output_next) + if (driver->video_data && driver->video_poke && + driver->video_poke->get_video_output_next) { - driver.video_poke->get_video_output_next(driver.video_data); + driver->video_poke->get_video_output_next(driver->video_data); } break; } diff --git a/menu/menu_input.c b/menu/menu_input.c index 9e1c5e230d..655f8983c6 100644 --- a/menu/menu_input.c +++ b/menu/menu_input.c @@ -51,6 +51,7 @@ void menu_input_key_start_line(const char *label, static void menu_input_key_end_line(void) { + driver_t *driver = driver_get_ptr(); menu_handle_t *menu = menu_driver_resolve(); if (!menu) return; @@ -60,7 +61,7 @@ static void menu_input_key_end_line(void) menu->keyboard.label_setting = NULL; /* Avoid triggering states on pressing return. */ - driver.flushing_input = true; + driver->flushing_input = true; } static void menu_input_search_callback(void *userdata, const char *str) @@ -169,6 +170,7 @@ void menu_input_st_cheat_callback(void *userdata, const char *str) void menu_input_search_start(void) { + driver_t *driver = driver_get_ptr(); menu_handle_t *menu = menu_driver_resolve(); if (!menu) return; @@ -176,7 +178,7 @@ void menu_input_search_start(void) menu->keyboard.display = true; menu->keyboard.label = "Search: "; menu->keyboard.buffer = - input_keyboard_start_line(driver.menu, menu_input_search_callback); + input_keyboard_start_line(driver->menu, menu_input_search_callback); } void menu_input_key_event(bool down, unsigned keycode, @@ -194,16 +196,17 @@ void menu_input_poll_bind_state(struct menu_bind_state *state) { unsigned i, b, a, h; const rarch_joypad_driver_t *joypad = NULL; + driver_t *driver = driver_get_ptr(); if (!state) return; memset(state->state, 0, sizeof(state->state)); - state->skip = driver.input->input_state(driver.input_data, NULL, 0, + state->skip = driver->input->input_state(driver->input_data, NULL, 0, RETRO_DEVICE_KEYBOARD, 0, RETROK_RETURN); - if (driver.input && driver.input_data && driver.input->get_joypad_driver) - joypad = driver.input->get_joypad_driver(driver.input_data); + if (driver->input && driver->input_data && driver->input->get_joypad_driver) + joypad = driver->input->get_joypad_driver(driver->input_data); if (!joypad) { @@ -240,12 +243,13 @@ void menu_input_poll_bind_get_rested_axes(struct menu_bind_state *state) { unsigned i, a; const rarch_joypad_driver_t *joypad = NULL; + driver_t *driver = driver_get_ptr(); if (!state) return; - if (driver.input && driver.input_data && driver.input->get_joypad_driver) - joypad = driver.input->get_joypad_driver(driver.input_data); + if (driver->input && driver->input_data && driver->input->get_joypad_driver) + joypad = driver->input->get_joypad_driver(driver->input_data); if (!joypad) { @@ -373,34 +377,35 @@ int menu_input_bind_iterate(void) char msg[PATH_MAX_LENGTH]; struct menu_bind_state binds; menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return 1; binds = menu->binds; - if (driver.video_data && driver.menu_ctx && - driver.menu_ctx->render) - driver.menu_ctx->render(); + if (driver->video_data && driver->menu_ctx && + driver->menu_ctx->render) + driver->menu_ctx->render(); snprintf(msg, sizeof(msg), "[%s]\npress joypad\n(RETURN to skip)", input_config_bind_map[ menu->binds.begin - MENU_SETTINGS_BIND_BEGIN].desc); - if (driver.video_data && driver.menu_ctx - && driver.menu_ctx->render_messagebox) - driver.menu_ctx->render_messagebox( msg); + if (driver->video_data && driver->menu_ctx + && driver->menu_ctx->render_messagebox) + driver->menu_ctx->render_messagebox( msg); - driver.block_input = true; + driver->block_input = true; menu_input_poll_bind_state(&binds); if ((binds.skip && !menu->binds.skip) || menu_input_poll_find_trigger(&menu->binds, &binds)) { - driver.block_input = false; + driver->block_input = false; /* Avoid new binds triggering things right away. */ - driver.flushing_input = true; + driver->flushing_input = true; binds.begin++; @@ -421,13 +426,14 @@ int menu_input_bind_iterate_keyboard(void) int timeout = 0; bool timed_out = false; menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return -1; - if (driver.video_data && driver.menu_ctx && - driver.menu_ctx->render) - driver.menu_ctx->render(); + if (driver->video_data && driver->menu_ctx && + driver->menu_ctx->render) + driver->menu_ctx->render(); current = rarch_get_time_usec(); timeout = (menu->binds.timeout_end - current) / 1000000; @@ -436,9 +442,9 @@ int menu_input_bind_iterate_keyboard(void) menu->binds.begin - MENU_SETTINGS_BIND_BEGIN].desc, timeout); - if (driver.video_data && driver.menu_ctx - && driver.menu_ctx->render_messagebox) - driver.menu_ctx->render_messagebox(msg); + if (driver->video_data && driver->menu_ctx + && driver->menu_ctx->render_messagebox) + driver->menu_ctx->render_messagebox(msg); if (timeout <= 0) { @@ -457,7 +463,7 @@ int menu_input_bind_iterate_keyboard(void) if (menu->binds.begin > menu->binds.last) { /* Avoid new binds triggering things right away. */ - driver.flushing_input = true; + driver->flushing_input = true; /* We won't be getting any key events, so just cancel early. */ if (timed_out) @@ -481,11 +487,12 @@ unsigned menu_input_frame(retro_input_t input, retro_input_t trigger_input) | (1ULL << RETRO_DEVICE_ID_JOYPAD_L) | (1ULL << RETRO_DEVICE_ID_JOYPAD_R); menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return 0; - driver.retro_ctx.poll_cb(); + driver->retro_ctx.poll_cb(); /* don't run anything first frame, only capture held inputs * for old_input_state. */ @@ -518,7 +525,7 @@ unsigned menu_input_frame(retro_input_t input, retro_input_t trigger_input) menu->delay.count += menu->dt / IDEAL_DT; - if (driver.block_input) + if (driver->block_input) trigger_input = 0; if (trigger_input & (1ULL << RETRO_DEVICE_ID_JOYPAD_UP)) return MENU_ACTION_UP; diff --git a/menu/menu_list.c b/menu/menu_list.c index f72e1ed0f6..e6a4e26cf4 100644 --- a/menu/menu_list.c +++ b/menu/menu_list.c @@ -139,17 +139,18 @@ static void menu_entries_build_scroll_indices(file_list_t *list) static void menu_list_destroy(file_list_t *list) { unsigned i; + driver_t *driver = driver_get_ptr(); if (!list) return; - if (!driver.menu_ctx) + if (!driver->menu_ctx) goto end; for (i = 0; i < list->size; i++) { - if (driver.menu_ctx->list_delete) - driver.menu_ctx->list_delete(list, i, list->size); + if (driver->menu_ctx->list_delete) + driver->menu_ctx->list_delete(list, i, list->size); menu_common_list_delete(list, i, list->size); } @@ -279,14 +280,15 @@ void menu_list_flush_stack_by_needle(menu_list_t *list, void menu_list_pop_stack(menu_list_t *list) { menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu || !list) return; if (file_list_get_size(list->menu_stack) <= 1) return; - if (driver.menu_ctx->list_cache) - driver.menu_ctx->list_cache(false, 0); + if (driver->menu_ctx->list_cache) + driver->menu_ctx->list_cache(false, 0); menu_list_pop(list->menu_stack, &menu->navigation.selection_ptr); menu->need_refresh = true; @@ -315,37 +317,39 @@ void menu_list_pop_stack_by_needle(menu_list_t *list, void menu_list_pop(file_list_t *list, size_t *directory_ptr) { - if (!driver.menu_ctx) + driver_t *driver = driver_get_ptr(); + if (!driver->menu_ctx) goto end; if (list->size != 0) { size_t list_size = list->size - 1; - if (driver.menu_ctx->list_delete) - driver.menu_ctx->list_delete(list, list_size, list_size); + if (driver->menu_ctx->list_delete) + driver->menu_ctx->list_delete(list, list_size, list_size); menu_common_list_delete(list, list_size, list_size); } end: file_list_pop(list, directory_ptr); - if (!driver.menu_ctx) + if (!driver->menu_ctx) return; - if (driver.menu_ctx->list_set_selection) - driver.menu_ctx->list_set_selection(list); + if (driver->menu_ctx->list_set_selection) + driver->menu_ctx->list_set_selection(list); menu_common_list_set_selection(list); } void menu_list_clear(file_list_t *list) { - if (!driver.menu_ctx) + driver_t *driver = driver_get_ptr(); + if (!driver->menu_ctx) goto end; - if (driver.menu_ctx->list_clear) - driver.menu_ctx->list_clear(list); + if (driver->menu_ctx->list_clear) + driver->menu_ctx->list_clear(list); end: menu_common_list_clear(list); @@ -355,11 +359,12 @@ static void menu_list_insert(file_list_t *list, const char *path, const char *label, unsigned type, size_t directory_ptr) { - if (!driver.menu_ctx) + driver_t *driver = driver_get_ptr(); + if (!driver->menu_ctx) return; - if (driver.menu_ctx->list_insert) - driver.menu_ctx->list_insert(list, path, label, list->size - 1); + if (driver->menu_ctx->list_insert) + driver->menu_ctx->list_insert(list, path, label, list->size - 1); menu_common_list_insert(list, path, label, type, list->size - 1); } @@ -399,13 +404,14 @@ int menu_list_push_stack_refresh(menu_list_t *list, const char *path, const char unsigned type, size_t directory_ptr) { menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return -1; if (!list) return -1; - if (driver.menu_ctx->list_cache) - driver.menu_ctx->list_cache(false, 0); + if (driver->menu_ctx->list_cache) + driver->menu_ctx->list_cache(false, 0); menu_list_push_stack(list, path, label, type, directory_ptr); menu_navigation_clear(&menu->navigation, true); @@ -435,6 +441,7 @@ int menu_list_populate_generic(file_list_t *list, const char *path, const char *label, unsigned type) { menu_handle_t *menu = menu_driver_resolve(); + driver_t *driver = driver_get_ptr(); if (!menu) return -1; @@ -444,8 +451,8 @@ int menu_list_populate_generic(file_list_t *list, const char *path, menu_entries_build_scroll_indices(list); menu_entries_refresh(list); - if (driver.menu_ctx && driver.menu_ctx->populate_entries) - driver.menu_ctx->populate_entries(path, label, type); + if (driver->menu_ctx && driver->menu_ctx->populate_entries) + driver->menu_ctx->populate_entries(path, label, type); return 0; } diff --git a/menu/menu_navigation.c b/menu/menu_navigation.c index 732bd8b929..31dd26af19 100644 --- a/menu/menu_navigation.c +++ b/menu/menu_navigation.c @@ -30,13 +30,14 @@ **/ void menu_navigation_clear(menu_navigation_t *nav, bool pending_push) { + driver_t *driver = driver_get_ptr(); if (!nav) return; nav->selection_ptr = 0; - if (driver.menu_ctx && driver.menu_ctx->navigation_clear) - driver.menu_ctx->navigation_clear(pending_push); + if (driver->menu_ctx && driver->menu_ctx->navigation_clear) + driver->menu_ctx->navigation_clear(pending_push); } /** @@ -46,6 +47,8 @@ void menu_navigation_clear(menu_navigation_t *nav, bool pending_push) **/ void menu_navigation_decrement(menu_navigation_t *nav, unsigned scroll_speed) { + driver_t *driver = driver_get_ptr(); + if (!nav) return; @@ -56,13 +59,13 @@ void menu_navigation_decrement(menu_navigation_t *nav, unsigned scroll_speed) { if (g_settings.menu.navigation.wraparound.vertical_enable) menu_navigation_set(nav, - menu_list_get_size(driver.menu->menu_list) - 1, true); + menu_list_get_size(driver->menu->menu_list) - 1, true); else menu_navigation_set(nav, 0, true); } - if (driver.menu_ctx && driver.menu_ctx->navigation_decrement) - driver.menu_ctx->navigation_decrement(); + if (driver->menu_ctx && driver->menu_ctx->navigation_decrement) + driver->menu_ctx->navigation_decrement(); } /** @@ -72,10 +75,11 @@ void menu_navigation_decrement(menu_navigation_t *nav, unsigned scroll_speed) **/ void menu_navigation_increment(menu_navigation_t *nav, unsigned scroll_speed) { + driver_t *driver = driver_get_ptr(); if (!nav) return; - if (nav->selection_ptr + scroll_speed < (menu_list_get_size(driver.menu->menu_list))) + if (nav->selection_ptr + scroll_speed < (menu_list_get_size(driver->menu->menu_list))) menu_navigation_set(nav, nav->selection_ptr + scroll_speed, true); else @@ -84,11 +88,11 @@ void menu_navigation_increment(menu_navigation_t *nav, unsigned scroll_speed) menu_navigation_clear(nav, false); else menu_navigation_set(nav, - menu_list_get_size(driver.menu->menu_list) - 1, true); + menu_list_get_size(driver->menu->menu_list) - 1, true); } - if (driver.menu_ctx && driver.menu_ctx->navigation_increment) - driver.menu_ctx->navigation_increment(); + if (driver->menu_ctx && driver->menu_ctx->navigation_increment) + driver->menu_ctx->navigation_increment(); } /** @@ -101,13 +105,14 @@ void menu_navigation_increment(menu_navigation_t *nav, unsigned scroll_speed) void menu_navigation_set(menu_navigation_t *nav, size_t idx, bool scroll) { + driver_t *driver = driver_get_ptr(); if (!nav) return; nav->selection_ptr = idx; - if (driver.menu_ctx && driver.menu_ctx->navigation_set) - driver.menu_ctx->navigation_set(scroll); + if (driver->menu_ctx && driver->menu_ctx->navigation_set) + driver->menu_ctx->navigation_set(scroll); } /** @@ -117,14 +122,15 @@ void menu_navigation_set(menu_navigation_t *nav, **/ void menu_navigation_set_last(menu_navigation_t *nav) { + driver_t *driver = driver_get_ptr(); menu_handle_t *menu = menu_driver_resolve(); if (!menu || !nav) return; nav->selection_ptr = menu_list_get_size(menu->menu_list) - 1; - if (driver.menu_ctx && driver.menu_ctx->navigation_set_last) - driver.menu_ctx->navigation_set_last(); + if (driver->menu_ctx && driver->menu_ctx->navigation_set_last) + driver->menu_ctx->navigation_set_last(); } /** @@ -139,6 +145,7 @@ void menu_navigation_set_last(menu_navigation_t *nav) **/ void menu_navigation_descend_alphabet(menu_navigation_t *nav, size_t *ptr_out) { + driver_t *driver = driver_get_ptr(); size_t i = 0, ptr = *ptr_out; if (!nav) return; @@ -155,8 +162,8 @@ void menu_navigation_descend_alphabet(menu_navigation_t *nav, size_t *ptr_out) i--; *ptr_out = nav->scroll.indices.list[i - 1]; - if (driver.menu_ctx && driver.menu_ctx->navigation_descend_alphabet) - driver.menu_ctx->navigation_descend_alphabet(ptr_out); + if (driver->menu_ctx && driver->menu_ctx->navigation_descend_alphabet) + driver->menu_ctx->navigation_descend_alphabet(ptr_out); } /** @@ -171,6 +178,7 @@ void menu_navigation_descend_alphabet(menu_navigation_t *nav, size_t *ptr_out) **/ void menu_navigation_ascend_alphabet(menu_navigation_t *nav, size_t *ptr_out) { + driver_t *driver = driver_get_ptr(); size_t i = 0, ptr = *ptr_out; if (!nav) return; @@ -186,6 +194,6 @@ void menu_navigation_ascend_alphabet(menu_navigation_t *nav, size_t *ptr_out) i++; *ptr_out = nav->scroll.indices.list[i + 1]; - if (driver.menu_ctx && driver.menu_ctx->navigation_descend_alphabet) - driver.menu_ctx->navigation_descend_alphabet(ptr_out); + if (driver->menu_ctx && driver->menu_ctx->navigation_descend_alphabet) + driver->menu_ctx->navigation_descend_alphabet(ptr_out); } diff --git a/menu/menu_setting.c b/menu/menu_setting.c index e521d7ed3e..0515467631 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -99,6 +99,7 @@ int menu_setting_handler(rarch_setting_t *setting, unsigned action) static int menu_action_handle_setting(rarch_setting_t *setting, unsigned type, unsigned action, bool wraparound) { + driver_t *driver = driver_get_ptr(); if (!setting) return -1; @@ -107,11 +108,11 @@ static int menu_action_handle_setting(rarch_setting_t *setting, case ST_PATH: if (action == MENU_ACTION_OK) menu_list_push_stack_refresh( - driver.menu->menu_list, + driver->menu->menu_list, setting->default_value.string, setting->name, type, - driver.menu->navigation.selection_ptr); + driver->menu->navigation.selection_ptr); /* fall-through. */ case ST_BOOL: case ST_INT: @@ -132,17 +133,19 @@ static int menu_action_handle_setting(rarch_setting_t *setting, rarch_setting_t *menu_setting_find(const char *label) { + driver_t *driver = driver_get_ptr(); return (rarch_setting_t*)setting_data_find_setting( - driver.menu->list_settings, label); + driver->menu->list_settings, label); } int menu_setting_set(unsigned type, const char *label, unsigned action, bool wraparound) { int ret = 0; + driver_t *driver = driver_get_ptr(); rarch_setting_t *setting = menu_setting_find( - driver.menu->menu_list->selection_buf->list - [driver.menu->navigation.selection_ptr].label); + driver->menu->menu_list->selection_buf->list + [driver->menu->navigation.selection_ptr].label); if (!setting) return 0; diff --git a/menu/menu_shader.c b/menu/menu_shader.c index 6b14d1c92e..b866b086e0 100644 --- a/menu/menu_shader.c +++ b/menu/menu_shader.c @@ -123,12 +123,13 @@ void menu_shader_manager_set_preset(struct video_shader *shader, { #ifdef HAVE_SHADER_MANAGER config_file_t *conf = NULL; + driver_t *driver = driver_get_ptr(); g_settings.video.shader_enable = false; - if (!driver.video->set_shader) + if (!driver->video->set_shader) return; - if (!driver.video->set_shader(driver.video_data, + if (!driver->video->set_shader(driver->video_data, (enum rarch_shader_type)type, preset_path)) return; @@ -161,7 +162,7 @@ void menu_shader_manager_set_preset(struct video_shader *shader, } config_file_free(conf); - driver.menu->need_refresh = true; + driver->menu->need_refresh = true; #endif } @@ -180,14 +181,15 @@ void menu_shader_manager_save_preset( unsigned d, type = RARCH_SHADER_NONE; config_file_t *conf = NULL; bool ret = false; + driver_t *driver = driver_get_ptr(); - if (!driver.menu) + if (!driver->menu) { RARCH_ERR("Cannot save shader preset, menu handle is not initialized.\n"); return; } - type = menu_shader_manager_get_type(driver.menu->shader); + type = menu_shader_manager_get_type(driver->menu->shader); if (type == RARCH_SHADER_NONE) return; @@ -210,7 +212,7 @@ void menu_shader_manager_save_preset( else { const char *conf_path = (type == RARCH_SHADER_GLSL) ? - driver.menu->default_glslp : driver.menu->default_cgp; + driver->menu->default_glslp : driver->menu->default_cgp; strlcpy(buffer, conf_path, sizeof(buffer)); } @@ -226,7 +228,7 @@ void menu_shader_manager_save_preset( if (!(conf = (config_file_t*)config_file_new(NULL))) return; - video_shader_write_conf_cgp(conf, driver.menu->shader); + video_shader_write_conf_cgp(conf, driver->menu->shader); for (d = 0; d < ARRAY_SIZE(dirs); d++) { @@ -303,9 +305,10 @@ unsigned menu_shader_manager_get_type(const struct video_shader *shader) void menu_shader_manager_apply_changes(void) { #ifdef HAVE_SHADER_MANAGER - unsigned shader_type = menu_shader_manager_get_type(driver.menu->shader); + driver_t *driver = driver_get_ptr(); + unsigned shader_type = menu_shader_manager_get_type(driver->menu->shader); - if (driver.menu->shader->passes + if (driver->menu->shader->passes && shader_type != RARCH_SHADER_NONE) { menu_shader_manager_save_preset(NULL, true); diff --git a/menu/menu_texture.c b/menu/menu_texture.c index bdad51778a..47ada0ccc5 100644 --- a/menu/menu_texture.c +++ b/menu/menu_texture.c @@ -87,7 +87,8 @@ unsigned menu_texture_load(void *data, if (g_settings.video.threaded && !g_extern.system.hw_render_callback.context_type) { - thread_video_t *thr = (thread_video_t*)driver.video_data; + driver_t *driver = driver_get_ptr(); + thread_video_t *thr = (thread_video_t*)driver->video_data; if (!thr) return 0; diff --git a/netplay.c b/netplay.c index f61dc27d5f..1f0fb2ad04 100644 --- a/netplay.c +++ b/netplay.c @@ -186,8 +186,9 @@ static bool get_self_input_state(netplay_t *netplay) unsigned i; struct delta_frame *ptr = &netplay->buffer[netplay->self_ptr]; uint32_t state = 0; + driver_t *driver = driver_get_ptr(); - if (!driver.block_libretro_input && netplay->frame_count > 0) + if (!driver->block_libretro_input && netplay->frame_count > 0) { /* First frame we always give zero input since relying on * input from first frame screws up when we use -F 0. */ @@ -475,7 +476,8 @@ static bool netplay_poll(netplay_t *netplay) void input_poll_net(void) { - netplay_t *netplay = (netplay_t*)driver.netplay_data; + driver_t *driver = driver_get_ptr(); + netplay_t *netplay = (netplay_t*)driver->netplay_data; if (!netplay_should_skip(netplay) && netplay_can_poll(netplay)) netplay_poll(netplay); } @@ -483,21 +485,24 @@ void input_poll_net(void) void video_frame_net(const void *data, unsigned width, unsigned height, size_t pitch) { - netplay_t *netplay = (netplay_t*)driver.netplay_data; + driver_t *driver = driver_get_ptr(); + netplay_t *netplay = (netplay_t*)driver->netplay_data; if (!netplay_should_skip(netplay)) netplay->cbs.frame_cb(data, width, height, pitch); } void audio_sample_net(int16_t left, int16_t right) { - netplay_t *netplay = (netplay_t*)driver.netplay_data; + driver_t *driver = driver_get_ptr(); + netplay_t *netplay = (netplay_t*)driver->netplay_data; if (!netplay_should_skip(netplay)) netplay->cbs.sample_cb(left, right); } size_t audio_sample_batch_net(const int16_t *data, size_t frames) { - netplay_t *netplay = (netplay_t*)driver.netplay_data; + driver_t *driver = driver_get_ptr(); + netplay_t *netplay = (netplay_t*)driver->netplay_data; if (!netplay_should_skip(netplay)) return netplay->cbs.sample_batch_cb(data, frames); return frames; @@ -552,7 +557,8 @@ static int16_t netplay_input_state(netplay_t *netplay, bool port, unsigned devic int16_t input_state_net(unsigned port, unsigned device, unsigned idx, unsigned id) { - netplay_t *netplay = (netplay_t*)driver.netplay_data; + driver_t *driver = driver_get_ptr(); + netplay_t *netplay = (netplay_t*)driver->netplay_data; if (netplay_is_alive(netplay)) return netplay_input_state(netplay, port, device, idx, id); return netplay->cbs.state_cb(port, device, idx, id); @@ -1352,7 +1358,8 @@ static void netplay_set_spectate_input(netplay_t *netplay, int16_t input) int16_t input_state_spectate(unsigned port, unsigned device, unsigned idx, unsigned id) { - netplay_t *netplay = (netplay_t*)driver.netplay_data; + driver_t *driver = driver_get_ptr(); + netplay_t *netplay = (netplay_t*)driver->netplay_data; int16_t res = netplay->cbs.state_cb(port, device, idx, id); netplay_set_spectate_input(netplay, res); @@ -1377,7 +1384,8 @@ static int16_t netplay_get_spectate_input(netplay_t *netplay, bool port, int16_t input_state_spectate_client(unsigned port, unsigned device, unsigned idx, unsigned id) { - return netplay_get_spectate_input((netplay_t*)driver.netplay_data, port, + driver_t *driver = driver_get_ptr(); + return netplay_get_spectate_input((netplay_t*)driver->netplay_data, port, device, idx, id); } diff --git a/record/record_driver.c b/record/record_driver.c index 8054262ffc..e5669b5a81 100644 --- a/record/record_driver.c +++ b/record/record_driver.c @@ -92,8 +92,9 @@ void recording_dump_frame(const void *data, unsigned width, unsigned height, size_t pitch) { struct ffemu_video_data ffemu_data = {0}; + driver_t *driver = driver_get_ptr(); - if (!driver.recording_data) + if (!driver->recording_data) return; ffemu_data.pitch = pitch; @@ -105,8 +106,8 @@ void recording_dump_frame(const void *data, unsigned width, { struct video_viewport vp = {0}; - if (driver.video && driver.video->viewport_info) - driver.video->viewport_info(driver.video_data, &vp); + if (driver->video && driver->video->viewport_info) + driver->video->viewport_info(driver->video_data, &vp); if (!vp.width || !vp.height) { @@ -132,8 +133,8 @@ void recording_dump_frame(const void *data, unsigned width, /* Big bottleneck. * Since we might need to do read-backs asynchronously, * it might take 3-4 times before this returns true. */ - if (driver.video && driver.video->read_viewport) - if (!driver.video->read_viewport(driver.video_data, + if (driver->video && driver->video->read_viewport) + if (!driver->video->read_viewport(driver->video_data, g_extern.record.gpu_buffer)) return; @@ -149,23 +150,25 @@ void recording_dump_frame(const void *data, unsigned width, if (!g_extern.record.gpu_buffer) ffemu_data.is_dupe = !data; - if (driver.recording && driver.recording->push_video) - driver.recording->push_video(driver.recording_data, &ffemu_data); + if (driver->recording && driver->recording->push_video) + driver->recording->push_video(driver->recording_data, &ffemu_data); } bool recording_deinit(void) { - if (!driver.recording_data || !driver.recording) + driver_t *driver = driver_get_ptr(); + + if (!driver->recording_data || !driver->recording) return false; - if (driver.recording->finalize) - driver.recording->finalize(driver.recording_data); + if (driver->recording->finalize) + driver->recording->finalize(driver->recording_data); - if (driver.recording->free) - driver.recording->free(driver.recording_data); + if (driver->recording->free) + driver->recording->free(driver->recording_data); - driver.recording_data = NULL; - driver.recording = NULL; + driver->recording_data = NULL; + driver->recording = NULL; rarch_main_command(RARCH_CMD_GPU_RECORD_DEINIT); @@ -183,6 +186,7 @@ bool recording_init(void) { struct ffemu_params params = {0}; const struct retro_system_av_info *info = &g_extern.system.av_info; + driver_t *driver = driver_get_ptr(); if (!g_extern.record.enable) return false; @@ -219,12 +223,12 @@ bool recording_init(void) if (*g_extern.record.config) params.config = g_extern.record.config; - if (g_settings.video.gpu_record && driver.video->read_viewport) + if (g_settings.video.gpu_record && driver->video->read_viewport) { struct video_viewport vp = {0}; - if (driver.video && driver.video->viewport_info) - driver.video->viewport_info(driver.video_data, &vp); + if (driver->video && driver->video->viewport_info) + driver->video->viewport_info(driver->video_data, &vp); if (!vp.width || !vp.height) { @@ -295,7 +299,7 @@ bool recording_init(void) params.fb_width, params.fb_height, (unsigned)params.pix_fmt); - if (!ffemu_init_first(&driver.recording, &driver.recording_data, ¶ms)) + if (!ffemu_init_first(&driver->recording, &driver->recording_data, ¶ms)) { RARCH_ERR(RETRO_LOG_INIT_RECORDING_FAILED); rarch_main_command(RARCH_CMD_GPU_RECORD_DEINIT); diff --git a/retroarch.c b/retroarch.c index 4be1b0c9d2..13f4fa0fa2 100644 --- a/retroarch.c +++ b/retroarch.c @@ -77,28 +77,31 @@ **/ void rarch_render_cached_frame(void) { - void *recording = driver.recording_data; + void *recording = NULL; + driver_t *driver = driver_get_ptr(); runloop_t *runloop = rarch_main_get_ptr(); + recording = driver->recording_data; + if (runloop->is_idle) return; /* Cannot allow recording when pushing duped frames. */ - driver.recording_data = NULL; + driver->recording_data = NULL; /* Not 100% safe, since the library might have * freed the memory, but no known implementations do this. * It would be really stupid at any rate ... */ - if (driver.retro_ctx.frame_cb) - driver.retro_ctx.frame_cb( + if (driver->retro_ctx.frame_cb) + driver->retro_ctx.frame_cb( (g_extern.frame_cache.data == RETRO_HW_FRAME_BUFFER_VALID) ? NULL : g_extern.frame_cache.data, g_extern.frame_cache.width, g_extern.frame_cache.height, g_extern.frame_cache.pitch); - driver.recording_data = recording; + driver->recording_data = recording; } #include "config.features.h" @@ -882,9 +885,11 @@ static void init_remapping(void) static void init_cheats(void) { + driver_t *driver = driver_get_ptr(); bool allow_cheats = true; + #ifdef HAVE_NETPLAY - allow_cheats &= !driver.netplay_data; + allow_cheats &= !driver->netplay_data; #endif allow_cheats &= !g_extern.bsv.movie; @@ -897,8 +902,10 @@ static void init_cheats(void) static void init_rewind(void) { void *state = NULL; + driver_t *driver = driver_get_ptr(); + #ifdef HAVE_NETPLAY - if (driver.netplay_data) + if (driver->netplay_data) return; #endif @@ -987,6 +994,7 @@ static void init_movie(void) static bool init_netplay(void) { struct retro_callbacks cbs = {0}; + driver_t *driver = driver_get_ptr(); if (!g_extern.netplay_enable) return false; @@ -1007,13 +1015,13 @@ static bool init_netplay(void) else RARCH_LOG("Waiting for client...\n"); - driver.netplay_data = (netplay_t*)netplay_new( + driver->netplay_data = (netplay_t*)netplay_new( g_extern.netplay_is_client ? g_extern.netplay_server : NULL, g_extern.netplay_port ? g_extern.netplay_port : RARCH_DEFAULT_PORT, g_extern.netplay_sync_frames, &cbs, g_extern.netplay_is_spectate, g_settings.username); - if (driver.netplay_data) + if (driver->netplay_data) return true; g_extern.netplay_is_client = false; @@ -1029,17 +1037,19 @@ static bool init_netplay(void) #ifdef HAVE_COMMAND static void init_command(void) { + driver_t *driver = driver_get_ptr(); + if (!g_settings.stdin_cmd_enable && !g_settings.network_cmd_enable) return; - if (g_settings.stdin_cmd_enable && driver.stdin_claimed) + if (g_settings.stdin_cmd_enable && driver->stdin_claimed) { RARCH_WARN("stdin command interface is desired, but input driver has already claimed stdin.\n" "Cannot use this command interface.\n"); } - if (!(driver.command = rarch_cmd_new(g_settings.stdin_cmd_enable - && !driver.stdin_claimed, + if (!(driver->command = rarch_cmd_new(g_settings.stdin_cmd_enable + && !driver->stdin_claimed, g_settings.network_cmd_enable, g_settings.network_cmd_port))) RARCH_ERR("Failed to initialize command interface.\n"); } @@ -1577,8 +1587,10 @@ static void check_disk_prev( static void init_state(void) { - driver.video_active = true; - driver.audio_active = true; + driver_t *driver = driver_get_ptr(); + + driver->video_active = true; + driver->audio_active = true; } /** @@ -1807,6 +1819,8 @@ static bool init_content(void) static bool init_core(void) { + driver_t *driver = driver_get_ptr(); + verify_api_version(); pretro_init(); @@ -1816,7 +1830,7 @@ static bool init_core(void) if (!init_content()) return false; - retro_init_libretro_cbs(&driver.retro_ctx); + retro_init_libretro_cbs(&driver->retro_ctx); init_system_av_info(); return true; @@ -1877,11 +1891,14 @@ int rarch_main_init(int argc, char *argv[]) rarch_main_command(RARCH_CMD_SAVEFILES_INIT); #if defined(GEKKO) && defined(HW_RVL) - rarch_main_command(RARCH_CMD_VIDEO_SET_ASPECT_RATIO); - if (driver.video_data && driver.video_poke - && driver.video_poke->set_aspect_ratio) - driver.video_poke->set_aspect_ratio(driver.video_data, - g_settings.video.aspect_ratio_idx); + { + driver_t *driver = driver_get_ptr(); + rarch_main_command(RARCH_CMD_VIDEO_SET_ASPECT_RATIO); + if (driver->video_data && driver->video_poke + && driver->video_poke->set_aspect_ratio) + driver->video_poke->set_aspect_ratio(driver->video_data, + g_settings.video.aspect_ratio_idx); + } #endif g_extern.error_in_init = false; @@ -1962,6 +1979,7 @@ void rarch_main_init_wrap(const struct rarch_main_wrap *args, void rarch_main_set_state(unsigned cmd) { runloop_t *runloop = rarch_main_get_ptr(); + driver_t *driver = driver_get_ptr(); switch (cmd) { @@ -1972,8 +1990,8 @@ void rarch_main_set_state(unsigned cmd) if (!menu) return; - if (driver.menu_ctx && driver.menu_ctx->toggle) - driver.menu_ctx->toggle(true); + if (driver->menu_ctx && driver->menu_ctx->toggle) + driver->menu_ctx->toggle(true); /* Menu should always run with vsync on. */ rarch_main_command(RARCH_CMD_VIDEO_SET_BLOCKING_STATE); @@ -2001,32 +2019,32 @@ void rarch_main_set_state(unsigned cmd) if (!menu_load_content()) rarch_main_set_state(RARCH_ACTION_STATE_MENU_RUNNING); #endif - if (driver.frontend_ctx && driver.frontend_ctx->content_loaded) - driver.frontend_ctx->content_loaded(); + if (driver->frontend_ctx && driver->frontend_ctx->content_loaded) + driver->frontend_ctx->content_loaded(); break; case RARCH_ACTION_STATE_MENU_RUNNING_FINISHED: #ifdef HAVE_MENU menu_apply_deferred_settings(); - if (driver.menu_ctx && driver.menu_ctx->toggle) - driver.menu_ctx->toggle(false); + if (driver->menu_ctx && driver->menu_ctx->toggle) + driver->menu_ctx->toggle(false); runloop->is_menu = false; - driver_set_nonblock_state(driver.nonblock_state); + driver_set_nonblock_state(driver->nonblock_state); if (g_settings.menu.pause_libretro) rarch_main_command(RARCH_CMD_AUDIO_START); /* Prevent stray input from going to libretro core */ - driver.flushing_input = true; + driver->flushing_input = true; /* Restore libretro keyboard callback. */ g_extern.system.key_event = g_extern.frontend_key_event; #endif - if (driver.video_data && driver.video_poke && - driver.video_poke->set_texture_enable) - driver.video_poke->set_texture_enable(driver.video_data, + if (driver->video_data && driver->video_poke && + driver->video_poke->set_texture_enable) + driver->video_poke->set_texture_enable(driver->video_data, false, false); break; case RARCH_ACTION_STATE_QUIT: @@ -2169,6 +2187,7 @@ bool rarch_main_command(unsigned cmd) unsigned i = 0; bool boolean = false; runloop_t *runloop = rarch_main_get_ptr(); + driver_t *driver = driver_get_ptr(); (void)i; @@ -2220,7 +2239,7 @@ bool rarch_main_command(unsigned cmd) return false; #ifdef HAVE_NETPLAY - if (driver.netplay_data) + if (driver->netplay_data) return false; #endif main_state(cmd); @@ -2284,14 +2303,14 @@ bool rarch_main_command(unsigned cmd) rarch_main_set_state(RARCH_ACTION_STATE_QUIT); break; case RARCH_CMD_REINIT: - driver.video_cache_context = + driver->video_cache_context = g_extern.system.hw_render_callback.cache_context; - driver.video_cache_context_ack = false; + driver->video_cache_context_ack = false; rarch_main_command(RARCH_CMD_RESET_CONTEXT); - driver.video_cache_context = false; + driver->video_cache_context = false; /* Poll input to avoid possibly stale data to corrupt things. */ - driver.input->poll(driver.input_data); + driver->input->poll(driver->input_data); #ifdef HAVE_MENU runloop->frames.video.current.menu.framebuf.dirty = true; @@ -2316,7 +2335,7 @@ bool rarch_main_command(unsigned cmd) break; case RARCH_CMD_REWIND_DEINIT: #ifdef HAVE_NETPLAY - if (driver.netplay_data) + if (driver->netplay_data) return false; #endif if (g_extern.rewind.state) @@ -2347,22 +2366,22 @@ bool rarch_main_command(unsigned cmd) save_auto_state(); break; case RARCH_CMD_AUDIO_STOP: - if (!driver.audio_data) + if (!driver->audio_data) return false; - if (!driver.audio->alive(driver.audio_data)) + if (!driver->audio->alive(driver->audio_data)) return false; - driver.audio->stop(driver.audio_data); + driver->audio->stop(driver->audio_data); break; case RARCH_CMD_AUDIO_START: - if (!driver.audio_data || driver.audio->alive(driver.audio_data)) + if (!driver->audio_data || driver->audio->alive(driver->audio_data)) return false; if (!g_settings.audio.mute_enable - && !driver.audio->start(driver.audio_data)) + && !driver->audio->start(driver->audio_data)) { RARCH_ERR("Failed to start audio driver. Will continue without audio.\n"); - driver.audio_active = false; + driver->audio_active = false; } break; case RARCH_CMD_AUDIO_MUTE_TOGGLE: @@ -2382,17 +2401,17 @@ bool rarch_main_command(unsigned cmd) break; case RARCH_CMD_OVERLAY_DEINIT: #ifdef HAVE_OVERLAY - if (driver.overlay) - input_overlay_free(driver.overlay); - driver.overlay = NULL; + if (driver->overlay) + input_overlay_free(driver->overlay); + driver->overlay = NULL; - memset(&driver.overlay_state, 0, sizeof(driver.overlay_state)); + memset(&driver->overlay_state, 0, sizeof(driver->overlay_state)); #endif break; case RARCH_CMD_OVERLAY_INIT: rarch_main_command(RARCH_CMD_OVERLAY_DEINIT); #ifdef HAVE_OVERLAY - if (driver.osk_enable) + if (driver->osk_enable) { if (!*g_settings.osk.overlay) break; @@ -2403,16 +2422,16 @@ bool rarch_main_command(unsigned cmd) break; } - driver.overlay = input_overlay_new(driver.osk_enable ? g_settings.osk.overlay : g_settings.input.overlay, - driver.osk_enable ? g_settings.osk.enable : g_settings.input.overlay_enable, + driver->overlay = input_overlay_new(driver->osk_enable ? g_settings.osk.overlay : g_settings.input.overlay, + driver->osk_enable ? g_settings.osk.enable : g_settings.input.overlay_enable, g_settings.input.overlay_opacity, g_settings.input.overlay_scale); - if (!driver.overlay) + if (!driver->overlay) RARCH_ERR("Failed to load overlay.\n"); #endif break; case RARCH_CMD_OVERLAY_NEXT: #ifdef HAVE_OVERLAY - input_overlay_next(driver.overlay, g_settings.input.overlay_opacity); + input_overlay_next(driver->overlay, g_settings.input.overlay_opacity); #endif break; case RARCH_CMD_DSP_FILTER_DEINIT: @@ -2478,37 +2497,37 @@ bool rarch_main_command(unsigned cmd) return false; break; case RARCH_CMD_VIDEO_APPLY_STATE_CHANGES: - if (driver.video_data && driver.video_poke - && driver.video_poke->apply_state_changes) - driver.video_poke->apply_state_changes(driver.video_data); + if (driver->video_data && driver->video_poke + && driver->video_poke->apply_state_changes) + driver->video_poke->apply_state_changes(driver->video_data); break; case RARCH_CMD_VIDEO_SET_NONBLOCKING_STATE: boolean = true; /* fall-through */ case RARCH_CMD_VIDEO_SET_BLOCKING_STATE: - if (driver.video && driver.video->set_nonblock_state) - driver.video->set_nonblock_state(driver.video_data, boolean); + if (driver->video && driver->video->set_nonblock_state) + driver->video->set_nonblock_state(driver->video_data, boolean); break; case RARCH_CMD_VIDEO_SET_ASPECT_RATIO: - if (driver.video_data && driver.video_poke - && driver.video_poke->set_aspect_ratio) - driver.video_poke->set_aspect_ratio(driver.video_data, + if (driver->video_data && driver->video_poke + && driver->video_poke->set_aspect_ratio) + driver->video_poke->set_aspect_ratio(driver->video_data, g_settings.video.aspect_ratio_idx); break; case RARCH_CMD_AUDIO_SET_NONBLOCKING_STATE: boolean = true; /* fall-through */ case RARCH_CMD_AUDIO_SET_BLOCKING_STATE: - if (driver.audio && driver.audio->set_nonblock_state) - driver.audio->set_nonblock_state(driver.audio_data, boolean); + if (driver->audio && driver->audio->set_nonblock_state) + driver->audio->set_nonblock_state(driver->audio_data, boolean); break; case RARCH_CMD_OVERLAY_SET_SCALE_FACTOR: #ifdef HAVE_OVERLAY - input_overlay_set_scale_factor(driver.overlay, + input_overlay_set_scale_factor(driver->overlay, g_settings.input.overlay_scale); #endif break; case RARCH_CMD_OVERLAY_SET_ALPHA_MOD: #ifdef HAVE_OVERLAY - input_overlay_set_alpha_mod(driver.overlay, + input_overlay_set_alpha_mod(driver->overlay, g_settings.input.overlay_opacity); #endif break; @@ -2538,8 +2557,8 @@ bool rarch_main_command(unsigned cmd) SALAMANDER_FILE, sizeof(g_extern.fullpath)); #endif - if (driver.frontend_ctx && driver.frontend_ctx->set_fork) - driver.frontend_ctx->set_fork(true, false); + if (driver->frontend_ctx && driver->frontend_ctx->set_fork) + driver->frontend_ctx->set_fork(true, false); break; case RARCH_CMD_MENU_SAVE_CONFIG: if (!save_core_config()) @@ -2629,7 +2648,7 @@ bool rarch_main_command(unsigned cmd) case RARCH_CMD_SAVEFILES_INIT: g_extern.use_sram = g_extern.use_sram && !g_extern.sram_save_disable #ifdef HAVE_NETPLAY - && (!driver.netplay_data || !g_extern.netplay_is_client) + && (!driver->netplay_data || !g_extern.netplay_is_client) #endif ; @@ -2659,10 +2678,10 @@ bool rarch_main_command(unsigned cmd) case RARCH_CMD_NETPLAY_DEINIT: #ifdef HAVE_NETPLAY { - netplay_t *netplay = (netplay_t*)driver.netplay_data; + netplay_t *netplay = (netplay_t*)driver->netplay_data; if (netplay) netplay_free(netplay); - driver.netplay_data = NULL; + driver->netplay_data = NULL; } #endif break; @@ -2686,7 +2705,7 @@ bool rarch_main_command(unsigned cmd) case RARCH_CMD_NETPLAY_FLIP_PLAYERS: #ifdef HAVE_NETPLAY { - netplay_t *netplay = (netplay_t*)driver.netplay_data; + netplay_t *netplay = (netplay_t*)driver->netplay_data; if (!netplay) return false; netplay_flip_users(netplay); @@ -2694,11 +2713,11 @@ bool rarch_main_command(unsigned cmd) #endif break; case RARCH_CMD_FULLSCREEN_TOGGLE: - if (!driver.video) + if (!driver->video) return false; /* If video driver/context does not support windowed * mode, don't perform command. */ - if (!driver.video->has_windowed(driver.video_data)) + if (!driver->video->has_windowed(driver->video_data)) return false; /* If we go fullscreen we drop all drivers and @@ -2708,9 +2727,9 @@ bool rarch_main_command(unsigned cmd) break; case RARCH_CMD_COMMAND_DEINIT: #ifdef HAVE_COMMAND - if (driver.command) - rarch_cmd_free(driver.command); - driver.command = NULL; + if (driver->command) + rarch_cmd_free(driver->command); + driver->command = NULL; #endif break; case RARCH_CMD_COMMAND_INIT: @@ -2795,17 +2814,17 @@ bool rarch_main_command(unsigned cmd) { static bool grab_mouse_state = false; - if (!driver.input || !driver.input->grab_mouse) + if (!driver->input || !driver->input->grab_mouse) return false; grab_mouse_state = !grab_mouse_state; RARCH_LOG("Grab mouse state: %s.\n", grab_mouse_state ? "yes" : "no"); - driver.input->grab_mouse(driver.input_data, grab_mouse_state); + driver->input->grab_mouse(driver->input_data, grab_mouse_state); - if (driver.video_poke && driver.video_poke->show_mouse) - driver.video_poke->show_mouse( - driver.video_data, !grab_mouse_state); + if (driver->video_poke && driver->video_poke->show_mouse) + driver->video_poke->show_mouse( + driver->video_data, !grab_mouse_state); } break; case RARCH_CMD_PERFCNT_REPORT_FRONTEND_LOG: diff --git a/runloop.c b/runloop.c index 3c1f632491..74bd2c1026 100644 --- a/runloop.c +++ b/runloop.c @@ -139,18 +139,20 @@ static INLINE bool check_is_oneshot(bool oneshot_pressed, bool rewind_pressed) static void check_fast_forward_button(bool fastforward_pressed, bool hold_pressed, bool old_hold_pressed) { + driver_t *driver = driver_get_ptr(); + /* To avoid continous switching if we hold the button down, we require * that the button must go from pressed to unpressed back to pressed * to be able to toggle between then. */ if (fastforward_pressed) - driver.nonblock_state = !driver.nonblock_state; + driver->nonblock_state = !driver->nonblock_state; else if (old_hold_pressed != hold_pressed) - driver.nonblock_state = hold_pressed; + driver->nonblock_state = hold_pressed; else return; - driver_set_nonblock_state(driver.nonblock_state); + driver_set_nonblock_state(driver->nonblock_state); } /** @@ -564,6 +566,8 @@ static int do_state_checks( retro_input_t input, retro_input_t old_input, retro_input_t trigger_input) { + driver_t *driver = driver_get_ptr(); + if (g_runloop.is_idle) return 1; @@ -579,7 +583,7 @@ static int do_state_checks( set_volume(-0.5f); #ifdef HAVE_NETPLAY - if (driver.netplay_data) + if (driver->netplay_data) return do_netplay_state_checks(input, old_input, trigger_input); #endif @@ -659,10 +663,11 @@ static INLINE int time_to_exit(retro_input_t input) **/ static void rarch_update_frame_time(void) { + driver_t *driver = driver_get_ptr(); retro_time_t curr_time = rarch_get_time_usec(); retro_time_t delta = curr_time - g_extern.system.frame_time_last; - bool is_locked_fps = g_runloop.is_paused || driver.nonblock_state; - is_locked_fps |= !!driver.recording_data; + bool is_locked_fps = g_runloop.is_paused || driver->nonblock_state; + is_locked_fps |= !!driver->recording_data; if (!g_extern.system.frame_time_last || is_locked_fps) delta = g_extern.system.frame_time.reference; @@ -726,10 +731,11 @@ static bool check_block_hotkey(bool enable_hotkey) &g_settings.input.binds[0][RARCH_ENABLE_HOTKEY]; static const struct retro_keybind *autoconf_bind = &g_settings.input.autoconf_binds[0][RARCH_ENABLE_HOTKEY]; + driver_t *driver = driver_get_ptr(); /* Don't block the check to RARCH_ENABLE_HOTKEY * unless we're really supposed to. */ - driver.block_hotkey = driver.block_input; + driver->block_hotkey = driver->block_input; // If we haven't bound anything to this, always allow hotkeys. use_hotkey_enable = bind->key != RETROK_UNKNOWN || @@ -739,7 +745,7 @@ static bool check_block_hotkey(bool enable_hotkey) autoconf_bind->joykey != NO_BTN || autoconf_bind->joyaxis != AXIS_NONE; - driver.block_hotkey = driver.block_input || + driver->block_hotkey = driver->block_input || (use_hotkey_enable && !enable_hotkey); /* If we hold ENABLE_HOTKEY button, block all libretro input to allow @@ -780,14 +786,15 @@ static INLINE retro_input_t input_keys_pressed(void) g_settings.input.binds[15], }; retro_input_t ret = 0; + driver_t *driver = driver_get_ptr(); - if (!driver.input || !driver.input_data) + if (!driver->input || !driver->input_data) return 0; g_extern.turbo_count++; - driver.block_libretro_input = check_block_hotkey( - driver.input->key_pressed(driver.input_data, + driver->block_libretro_input = check_block_hotkey( + driver->input->key_pressed(driver->input_data, RARCH_ENABLE_HOTKEY)); for (i = 0; i < g_settings.input.max_users; i++) @@ -800,12 +807,12 @@ static INLINE retro_input_t input_keys_pressed(void) g_extern.turbo_frame_enable[i] = 0; } - if (!driver.block_libretro_input) + if (!driver->block_libretro_input) { for (i = 0; i < g_settings.input.max_users; i++) { g_extern.turbo_frame_enable[i] = - driver.input->input_state(driver.input_data, binds, i, + driver->input->input_state(driver->input_data, binds, i, RETRO_DEVICE_JOYPAD, 0, RARCH_TURBO_ENABLE); } } @@ -872,18 +879,19 @@ static int rarch_main_iterate_quit(void) static void rarch_main_iterate_linefeed_overlay(void) { static char prev_overlay_restore = false; + driver_t *driver = driver_get_ptr(); - if (driver.osk_enable && !driver.keyboard_linefeed_enable) + if (driver->osk_enable && !driver->keyboard_linefeed_enable) { - driver.osk_enable = false; - prev_overlay_restore = true; + driver->osk_enable = false; + prev_overlay_restore = true; rarch_main_command(RARCH_CMD_OVERLAY_DEINIT); return; } - else if (!driver.osk_enable && driver.keyboard_linefeed_enable) + else if (!driver->osk_enable && driver->keyboard_linefeed_enable) { - driver.osk_enable = true; - prev_overlay_restore = false; + driver->osk_enable = true; + prev_overlay_restore = false; rarch_main_command(RARCH_CMD_OVERLAY_INIT); return; } @@ -951,9 +959,10 @@ int rarch_main_iterate(void) retro_input_t old_input = last_input; retro_input_t input = input_keys_pressed(); last_input = input; + driver_t *driver = driver_get_ptr(); - if (driver.flushing_input) - driver.flushing_input = (input) ? input_flush(&input) : false; + if (driver->flushing_input) + driver->flushing_input = (input) ? input_flush(&input) : false; trigger_input = input & ~old_input; @@ -994,7 +1003,7 @@ int rarch_main_iterate(void) if (do_state_checks(input, old_input, trigger_input)) { /* RetroArch has been paused */ - driver.retro_ctx.poll_cb(); + driver->retro_ctx.poll_cb(); rarch_sleep(10); return 1; @@ -1005,8 +1014,8 @@ int rarch_main_iterate(void) #endif #ifdef HAVE_NETPLAY - if (driver.netplay_data) - netplay_pre_frame((netplay_t*)driver.netplay_data); + if (driver->netplay_data) + netplay_pre_frame((netplay_t*)driver->netplay_data); #endif if (g_extern.bsv.movie) @@ -1027,7 +1036,7 @@ int rarch_main_iterate(void) g_settings.input.analog_dpad_mode[i]); } - if ((g_settings.video.frame_delay > 0) && !driver.nonblock_state) + if ((g_settings.video.frame_delay > 0) && !driver->nonblock_state) rarch_sleep(g_settings.video.frame_delay); @@ -1047,8 +1056,8 @@ int rarch_main_iterate(void) bsv_movie_set_frame_end(g_extern.bsv.movie); #ifdef HAVE_NETPLAY - if (driver.netplay_data) - netplay_post_frame((netplay_t*)driver.netplay_data); + if (driver->netplay_data) + netplay_post_frame((netplay_t*)driver->netplay_data); #endif #if defined(HAVE_THREADS) diff --git a/runloop_data.c b/runloop_data.c index ec5ebb855f..304a962264 100644 --- a/runloop_data.c +++ b/runloop_data.c @@ -239,6 +239,7 @@ static int rarch_main_data_http_iterate_poll(http_handle_t *http) static int cb_image_menu_wallpaper_upload(void *data, size_t len) { nbio_handle_t *nbio = (nbio_handle_t*)data; + driver_t *driver = driver_get_ptr(); if (!nbio || !data) return -1; @@ -247,8 +248,8 @@ static int cb_image_menu_wallpaper_upload(void *data, size_t len) nbio->image.processing_final_state == IMAGE_PROCESS_ERROR_END) return -1; - if (driver.menu_ctx && driver.menu_ctx->load_background) - driver.menu_ctx->load_background(&nbio->image.ti); + if (driver->menu_ctx && driver->menu_ctx->load_background) + driver->menu_ctx->load_background(&nbio->image.ti); texture_image_free(&nbio->image.ti); @@ -591,24 +592,26 @@ static int rarch_main_data_nbio_iterate_parse(nbio_handle_t *nbio) #ifdef HAVE_MENU static void rarch_main_data_rdl_iterate(void) { - if (!driver.menu->rdl) + driver_t *driver = driver_get_ptr(); + + if (!driver->menu->rdl) return; - if (driver.menu->rdl->blocking) + if (driver->menu->rdl->blocking) { /* Do nonblocking I/O transfers here. */ return; } #ifdef HAVE_LIBRETRODB - if (!driver.menu->rdl->iterating) + if (!driver->menu->rdl->iterating) { - database_info_write_rdl_free(driver.menu->rdl); - driver.menu->rdl = NULL; + database_info_write_rdl_free(driver->menu->rdl); + driver->menu->rdl = NULL; return; } - database_info_write_rdl_iterate(driver.menu->rdl); + database_info_write_rdl_iterate(driver->menu->rdl); #endif } @@ -675,8 +678,9 @@ static void rarch_main_data_http_iterate(http_handle_t *http) static void rarch_main_data_db_iterate(void) { + driver_t *driver = driver_get_ptr(); #ifdef HAVE_MENU - if (driver.menu && driver.menu->rdl) + if (driver->menu && driver->menu->rdl) rarch_main_data_rdl_iterate(); #endif } @@ -685,30 +689,32 @@ static void rarch_main_data_db_iterate(void) static void rarch_main_data_overlay_iterate(void) { runloop_t *runloop = rarch_main_get_ptr(); + driver_t *driver = driver_get_ptr(); + if (runloop->is_idle) return; - if (!driver.overlay) + if (!driver->overlay) return; - switch (driver.overlay->state) + switch (driver->overlay->state) { case OVERLAY_STATUS_NONE: case OVERLAY_STATUS_ALIVE: break; case OVERLAY_STATUS_DEFERRED_LOAD: - input_overlay_load_overlays(driver.overlay); + input_overlay_load_overlays(driver->overlay); break; case OVERLAY_STATUS_DEFERRED_LOADING: - input_overlay_load_overlays_iterate(driver.overlay); + input_overlay_load_overlays_iterate(driver->overlay); break; case OVERLAY_STATUS_DEFERRED_LOADING_RESOLVE: - input_overlay_load_overlays_resolve_iterate(driver.overlay); + input_overlay_load_overlays_resolve_iterate(driver->overlay); break; case OVERLAY_STATUS_DEFERRED_DONE: - input_overlay_new_done(driver.overlay); + input_overlay_new_done(driver->overlay); break; case OVERLAY_STATUS_DEFERRED_ERROR: - input_overlay_free(driver.overlay); + input_overlay_free(driver->overlay); break; default: break; diff --git a/screenshot.c b/screenshot.c index e6c03dcd41..4af47dc53e 100644 --- a/screenshot.c +++ b/screenshot.c @@ -178,9 +178,10 @@ static bool take_screenshot_viewport(void) uint8_t *buffer = NULL; bool retval = false; struct video_viewport vp = {0}; + driver_t *driver = driver_get_ptr(); - if (driver.video && driver.video->viewport_info) - driver.video->viewport_info(driver.video_data, &vp); + if (driver->video && driver->video->viewport_info) + driver->video->viewport_info(driver->video_data, &vp); if (!vp.width || !vp.height) return false; @@ -188,8 +189,8 @@ static bool take_screenshot_viewport(void) if (!(buffer = (uint8_t*)malloc(vp.width * vp.height * 3))) return false; - if (driver.video && driver.video->read_viewport) - if (!driver.video->read_viewport(driver.video_data, buffer)) + if (driver->video && driver->video->read_viewport) + if (!driver->video->read_viewport(driver->video_data, buffer)) goto done; screenshot_dir = g_settings.screenshot_directory; @@ -249,6 +250,7 @@ bool take_screenshot(void) bool ret = true; const char *msg = NULL; runloop_t *runloop = rarch_main_get_ptr(); + driver_t *driver = driver_get_ptr(); /* No way to infer screenshot directory. */ if ((!*g_settings.screenshot_directory) && (!*g_extern.basename)) @@ -256,19 +258,19 @@ bool take_screenshot(void) viewport_read = (g_settings.video.gpu_screenshot || ((g_extern.system.hw_render_callback.context_type - != RETRO_HW_CONTEXT_NONE) && !driver.video->read_frame_raw)) - && driver.video->read_viewport && driver.video->viewport_info; + != RETRO_HW_CONTEXT_NONE) && !driver->video->read_frame_raw)) + && driver->video->read_viewport && driver->video->viewport_info; if (viewport_read) { #ifdef HAVE_MENU /* Avoid taking screenshot of GUI overlays. */ - if (driver.video_poke && driver.video_poke->set_texture_enable) - driver.video_poke->set_texture_enable(driver.video_data, + if (driver->video_poke && driver->video_poke->set_texture_enable) + driver->video_poke->set_texture_enable(driver->video_data, false, false); #endif - if (driver.video) + if (driver->video) rarch_render_cached_frame(); } @@ -277,15 +279,15 @@ bool take_screenshot(void) else if (g_extern.frame_cache.data && (g_extern.frame_cache.data != RETRO_HW_FRAME_BUFFER_VALID)) ret = take_screenshot_raw(); - else if (driver.video->read_frame_raw) + else if (driver->video->read_frame_raw) { const void* old_data = g_extern.frame_cache.data; unsigned old_width = g_extern.frame_cache.width; unsigned old_height = g_extern.frame_cache.height; size_t old_pitch = g_extern.frame_cache.pitch; - void* frame_data = driver.video->read_frame_raw - (driver.video_data, &g_extern.frame_cache.width, + void* frame_data = driver->video->read_frame_raw + (driver->video_data, &g_extern.frame_cache.width, &g_extern.frame_cache.height, &g_extern.frame_cache.pitch); if (frame_data) diff --git a/settings_data.c b/settings_data.c index 3b62ceb35c..95f51e8322 100644 --- a/settings_data.c +++ b/settings_data.c @@ -2967,6 +2967,7 @@ static void general_write_handler(void *data) { unsigned rarch_cmd = RARCH_CMD_NONE; rarch_setting_t *setting = (rarch_setting_t*)data; + driver_t *driver = driver_get_ptr(); if (!setting) return; @@ -3005,9 +3006,9 @@ static void general_write_handler(void *data) } else if (!strcmp(setting->name, "video_smooth")) { - if (driver.video_data && driver.video_poke - && driver.video_poke->set_filtering) - driver.video_poke->set_filtering(driver.video_data, + if (driver->video_data && driver->video_poke + && driver->video_poke->set_filtering) + driver->video_poke->set_filtering(driver->video_data, 1, g_settings.video.smooth); } else if (!strcmp(setting->name, "pal60_enable")) @@ -3019,8 +3020,8 @@ static void general_write_handler(void *data) } else if (!strcmp(setting->name, "video_rotation")) { - if (driver.video && driver.video->set_rotation) - driver.video->set_rotation(driver.video_data, + if (driver->video && driver->video->set_rotation) + driver->video->set_rotation(driver->video_data, (*setting->value.unsigned_integer + g_extern.system.rotation) % 4); } @@ -3060,7 +3061,7 @@ static void general_write_handler(void *data) g_settings.audio.max_timing_skew = *setting->value.fraction; else if (!strcmp(setting->name, "video_refresh_rate_auto")) { - if (driver.video && driver.video_data) + if (driver->video && driver->video_data) { driver_set_refresh_rate(*setting->value.fraction); @@ -3282,6 +3283,7 @@ static bool setting_data_append_list_main_menu_options( { rarch_setting_group_info_t group_info; rarch_setting_group_info_t subgroup_info; + driver_t *driver = driver_get_ptr(); START_GROUP(group_info, "Main Menu"); START_SUB_GROUP(list, list_info, "State", group_info.name, subgroup_info); @@ -3320,7 +3322,7 @@ static bool setting_data_append_list_main_menu_options( subgroup_info.name); } if ( - driver.menu + driver->menu && g_extern.core_info && core_info_list_num_info_files(g_extern.core_info)) { diff --git a/tools/retroarch-joyconfig.c b/tools/retroarch-joyconfig.c index ad523a6ba1..a5401f7586 100644 --- a/tools/retroarch-joyconfig.c +++ b/tools/retroarch-joyconfig.c @@ -46,6 +46,11 @@ static char *g_auto_path = NULL; static char *g_driver = NULL; static unsigned g_meta_level = 0; +driver_t *driver_get_ptr(void) +{ + return &driver; +} + static void print_help(void) { puts("=====================");