Merge branch 'master' into ios13-controllers

This commit is contained in:
Yoshi Sugawara 2019-06-05 06:22:51 -10:00
commit 22d84eaef2
32 changed files with 898 additions and 783 deletions

View File

@ -31,6 +31,8 @@ matrix:
env: DISABLE_MENU=1 CC=gcc-8 CXX=g++-8
- compiler: gcc
env: ENABLE_GLES=1 CC=gcc-8 CXX=g++-8
- compiler: gcc
env: ENABLE_GLES=1 ENABLE_GLES3=1 CC=gcc-8 CXX=g++-8
- compiler: clang
env: CC=clang-6.0 CXX=clang++-6.0
- compiler: clang
@ -73,7 +75,7 @@ before_install:
script:
- |
if [ -n "$CROSS_COMPILE" ]; then
ARGS="$ARGS --disable-d3d8 --disable-d3d9 --disable-d3d10 --disable-d3d11 --disable-d3d12 --enable-builtinzlib"
ARGS="$ARGS --disable-d3d8 --disable-d3d9 --disable-d3d10 --disable-d3d11 --disable-d3d12"
fi
- |
if [ -n "$DISABLE_MENU" ]; then

View File

@ -1342,15 +1342,14 @@ endif
ifeq ($(HAVE_D3D9), 1)
HAVE_D3D_COMMON = 1
HAVE_D3DX = 1
DEFINES += -DHAVE_D3D9
ifeq ($(HAVE_D3DX), 1)
DEFINES += -DHAVE_D3DX
ifeq ($(HAVE_D3DX9), 1)
HAVE_D3DX_COMMON = 1
endif
ifneq ($(HAVE_DYLIB), 1)
LIBS += -ld3d9
ifeq ($(HAVE_D3DX), 1)
LIBS += -ld3dx9
LIBS += $(D3D9_LIBS)
ifeq ($(HAVE_D3DX9), 1)
LIBS += $(D3DX9_LIBS)
endif
endif
HAVE_DX_COMMON = 1
@ -1412,14 +1411,21 @@ ifeq ($(HAVE_D3D8), 1)
HAVE_D3D_COMMON = 1
HAVE_DX_COMMON = 1
DEFINES += -DHAVE_D3D8
ifeq ($(HAVE_D3DX8), 1)
HAVE_D3DX_COMMON = 1
endif
ifneq ($(HAVE_DYLIB), 1)
LIBS += -ld3d8
ifeq ($(HAVE_D3DX), 1)
LIBS += -ld3dx8
LIBS += $(D3D8_LIBS)
ifeq ($(HAVE_D3DX8), 1)
LIBS += $(D3DX8_LIBS)
endif
endif
endif
ifeq ($(HAVE_D3DX_COMMON), 1)
DEFINES += -DHAVE_D3DX
endif
ifeq ($(HAVE_DX_COMMON), 1)
LIBS += -ldxguid
endif

View File

@ -60,6 +60,20 @@ HAVE_CHEEVOS := 1
HAVE_SHADERPIPELINE := 1
HAVE_IMAGEVIEWER := 1
ifeq ($(HAVE_D3D8), 1)
D3D8_LIBS := -ld3d8
ifeq ($(HAVE_D3DX), 1)
D3DX8_LIBS := -ld3dx8
endif
endif
ifeq ($(HAVE_D3D9), 1)
D3D9_LIBS := -ld3d9
ifeq ($(HAVE_D3DX), 1)
D3DX9_LIBS := -ld3dx9
endif
endif
include Makefile.common
INCLUDE_DIRS := $(patsubst -isystem%,-I%,$(INCLUDE_DIRS))
CFLAGS := $(filter-out -Wno-unknown-pragmas,$(DEF_FLAGS))

View File

@ -56,6 +56,20 @@ SDL2_LIBS := -lSDL2
SDL2_CFLAGS := -ISDL2 -DHAVE_SDL2
endif
ifeq ($(HAVE_D3D8), 1)
D3D8_LIBS := -ld3d8
ifeq ($(HAVE_D3DX), 1)
D3DX8_LIBS := -ld3dx8
endif
endif
ifeq ($(HAVE_D3D9), 1)
D3D9_LIBS := -ld3d9
ifeq ($(HAVE_D3DX), 1)
D3DX9_LIBS := -ld3dx9
endif
endif
ifeq ($(HAVE_RSOUND), 1)
RSOUND_CFLAGS := -DHAVE_RSOUND
RSOUND_LIBS := -lrsound

View File

@ -70,7 +70,7 @@
#endif
#ifdef HAVE_MATERIALUI
static bool materialui_icons_enable = true;
#define DEFAULT_MATERIALUI_ICONS_ENABLE true
#endif
static const unsigned crt_switch_resolution = CRT_SWITCH_NONE;
@ -78,19 +78,18 @@ static const int crt_switch_resolution_super = 2560;
static const int crt_switch_center_adjust = 0;
static const bool def_history_list_enable = true;
static const bool def_playlist_entry_remove = true;
static const bool def_playlist_entry_rename = true;
static const unsigned int def_user_language = 0;
#if (defined(_WIN32) && !defined(_XBOX)) || (defined(__linux) && !defined(ANDROID) && !defined(HAVE_LAKKA)) || (defined(__MACH__) && !defined(IOS)) || defined(EMSCRIPTEN)
static const bool def_mouse_enable = true;
#define DEFAULT_MOUSE_ENABLE true
#else
static const bool def_mouse_enable = false;
#define DEFAULT_MOUSE_ENABLE false
#endif
#ifdef HAVE_CHEEVOS
static const bool cheevos_enable = false;
#define DEFAULT_CHEEVOS_ENABLE false
#endif
/* VIDEO */
@ -105,87 +104,87 @@ static const bool cheevos_enable = false;
* Real x resolution = aspect * base_size * x scale
* Real y resolution = base_size * y scale
*/
static const float scale = 3.0;
#define DEFAULT_SCALE (3.0)
/* Fullscreen */
/* To start in Fullscreen, or not. */
static const bool fullscreen = false;
#define DEFAULT_FULLSCREEN false
/* To use windowed mode or not when going fullscreen. */
static const bool windowed_fullscreen = true;
#define DEFAULT_WINDOWED_FULLSCREEN true
/* Which monitor to prefer. 0 is any monitor, 1 and up selects
* specific monitors, 1 being the first monitor. */
static const unsigned monitor_index = 0;
#define DEFAULT_MONITOR_INDEX 0
/* Window */
/* Window size. A value of 0 uses window scale
* multiplied by the core framebuffer size. */
static const unsigned window_width = 1280;
static const unsigned window_height = 720;
#define DEFAULT_WINDOW_WIDTH 1280
#define DEFAULT_WINDOW_HEIGHT 720
/* Fullscreen resolution. A value of 0 uses the desktop
* resolution. */
static const unsigned fullscreen_x = 0;
static const unsigned fullscreen_y = 0;
#define DEFAULT_FULLSCREEN_X 0
#define DEFAULT_FULLSCREEN_Y 0
/* Number of threads to use for video recording */
static const unsigned video_record_threads = 2;
#define DEFAULT_VIDEO_RECORD_THREADS 2
/* Amount of transparency to use for the main window.
* 1 is the most transparent while 100 is opaque.
*/
static const unsigned window_opacity = 100;
#define DEFAULT_WINDOW_OPACITY 100
/* Whether to show the usual window decorations like border, titlebar etc. */
static const bool window_decorations = true;
#define DEFAULT_WINDOW_DECORATIONS true
#if defined(RARCH_CONSOLE) || defined(__APPLE__)
static const bool load_dummy_on_core_shutdown = false;
#define DEFAULT_LOAD_DUMMY_ON_CORE_SHUTDOWN false
#else
static const bool load_dummy_on_core_shutdown = true;
#define DEFAULT_LOAD_DUMMY_ON_CORE_SHUTDOWN true
#endif
static const bool check_firmware_before_loading = false;
#define DEFAULT_CHECK_FIRMWARE_BEFORE_LOADING false
/* Forcibly disable composition.
* Only valid on Windows Vista/7/8 for now. */
static const bool disable_composition = false;
#define DEFAULT_DISABLE_COMPOSITION false
/* Video VSYNC (recommended) */
static const bool vsync = true;
#define DEFAULT_VSYNC false
static const unsigned max_swapchain_images = 3;
#define DEFAULT_MAX_SWAPCHAIN_IMAGES 3
static const bool adaptive_vsync = false;
#define DEFAULT_ADAPTIVE_VSYNC false
/* Attempts to hard-synchronize CPU and GPU.
* Can reduce latency at cost of performance. */
static const bool hard_sync = false;
#define DEFAULT_HARD_SYNC false
/* Configures how many frames the GPU can run ahead of CPU.
* 0: Syncs to GPU immediately.
* 1: Syncs to previous frame.
* 2: Etc ...
*/
static const unsigned hard_sync_frames = 0;
#define DEFAULT_HARD_SYNC_FRAMES 0
/* Sets how many milliseconds to delay after VSync before running the core.
* Can reduce latency at cost of higher risk of stuttering.
*/
static const unsigned frame_delay = 0;
#define DEFAULT_FRAME_DELAY 0
/* Inserts a black frame inbetween frames.
* Useful for 120 Hz monitors who want to play 60 Hz material with eliminated
* ghosting. video_refresh_rate should still be configured as if it
* is a 60 Hz monitor (divide refresh rate by 2).
*/
static bool black_frame_insertion = false;
#define DEFAULT_BLACK_FRAME_INSERTION false
/* Uses a custom swap interval for VSync.
* Set this to effectively halve monitor refresh rate.
*/
static unsigned swap_interval = 1;
#define DEFAULT_SWAP_INTERVAL 1
/* Threaded video. Will possibly increase performance significantly
* at the cost of worse synchronization and latency.
@ -199,87 +198,90 @@ static unsigned swap_interval = 1;
#if defined(HAVE_THREADS)
#if defined(GEKKO) || defined(PSP) || defined(PS2)
/* For single-core consoles right now it's best to have this be disabled. */
static const bool threaded_data_runloop_enable = false;
#define DEFAULT_THREADED_DATA_RUNLOOP_ENABLE false
#else
static const bool threaded_data_runloop_enable = true;
#define DEFAULT_THREADED_DATA_RUNLOOP_ENABLE true
#endif
#else
static const bool threaded_data_runloop_enable = false;
#define DEFAULT_THREADED_DATA_RUNLOOP_ENABLE false
#endif
/* Set to true if HW render cores should get their private context. */
static const bool video_shared_context = false;
#define DEFAULT_VIDEO_SHARED_CONTEXT false
/* Sets GC/Wii screen width. */
static const unsigned video_viwidth = 640;
#define DEFAULT_VIDEO_VI_WIDTH 640
#ifdef GEKKO
/* Removes 480i flicker, smooths picture a little. */
static const bool video_vfilter = true;
#define DEFAULT_VIDEO_VFILTER true
/* Allow overscan to be corrected on displays that
* do not have proper 'pixel perfect' scaling */
#define DEFAULT_VIDEO_OVERSCAN_CORRECTION_TOP 0
#define DEFAULT_VIDEO_OVERSCAN_CORRECTION_BOTTOM 0
#endif
/* Smooths picture. */
static const bool video_smooth = true;
#define DEFAULT_VIDEO_SMOOTH true
/* On resize and fullscreen, rendering area will stay 4:3 */
static const bool force_aspect = true;
#define DEFAULT_FORCE_ASPECT true
/* Enable use of shaders. */
#ifdef RARCH_CONSOLE
static const bool shader_enable = true;
#define DEFAULT_SHADER_ENABLE true
#else
static const bool shader_enable = false;
#define DEFAULT_SHADER_ENABLE false
#endif
/* Only scale in integer steps.
* The base size depends on system-reported geometry and aspect ratio.
* If video_force_aspect is not set, X/Y will be integer scaled independently.
*/
static const bool scale_integer = false;
#define DEFAULT_SCALE_INTEGER false
/* Controls aspect ratio handling. */
/* Automatic */
static const float aspect_ratio = DEFAULT_ASPECT_RATIO;
/* 1:1 PAR */
static const bool aspect_ratio_auto = false;
#define DEFAULT_ASPECT_RATIO_AUTO false
#if defined(__CELLOS_LV2) || defined(_XBOX360)
static unsigned aspect_ratio_idx = ASPECT_RATIO_16_9;
#define DEFAULT_ASPECT_RATIO_IDX ASPECT_RATIO_16_9
#elif defined(PSP)
static unsigned aspect_ratio_idx = ASPECT_RATIO_CORE;
#define DEFAULT_ASPECT_RATIO_IDX ASPECT_RATIO_CORE
#elif defined(_3DS)
/* Previously defaulted to ASPECT_RATIO_4_3.
* Non-4:3 content looks dreadful when stretched
* to 4:3 on the 3DS screen... */
static unsigned aspect_ratio_idx = ASPECT_RATIO_CORE;
#define DEFAULT_ASPECT_RATIO_IDX ASPECT_RATIO_CORE
#elif defined(RARCH_CONSOLE)
static unsigned aspect_ratio_idx = ASPECT_RATIO_4_3;
#define DEFAULT_ASPECT_RATIO_IDX ASPECT_RATIO_4_3
#else
static unsigned aspect_ratio_idx = ASPECT_RATIO_CORE;
#define DEFAULT_ASPECT_RATIO_IDX ASPECT_RATIO_CORE
#endif
/* Save configuration file on exit. */
static bool config_save_on_exit = true;
#define DEFAULT_CONFIG_SAVE_ON_EXIT true
static bool show_hidden_files = false;
#define DEFAULT_SHOW_HIDDEN_FILES false
static const bool overlay_hide_in_menu = true;
#define DEFAULT_OVERLAY_HIDE_IN_MENU true
#define DEFAULT_OVERLAY_SHOW_MOUSE_CURSOR true
static const bool display_keyboard_overlay = false;
#define DEFAULT_DISPLAY_KEYBOARD_OVERLAY false
#ifdef HAKCHI
static const float default_input_overlay_opacity = 0.5f;
#define DEFAULT_INPUT_OVERLAY_OPACITY 0.5f
#else
static const float default_input_overlay_opacity = 0.7f;
#define DEFAULT_INPUT_OVERLAY_OPACITY 0.7f
#endif
#ifdef HAVE_MENU
#include "menu/menu_driver.h"
#include "menu/menu_animation.h"
static bool default_block_config_read = true;
#define DEFAULT_BLOCK_CONFIG_READ true
#ifdef HAVE_LIBNX
static bool menu_use_preferred_system_color_theme = true;
@ -370,8 +372,6 @@ static bool xmb_shadows_enable = true;
#endif
#endif
static bool automatically_add_content_to_playlist = false;
static float menu_framebuffer_opacity = 0.900;
static float menu_wallpaper_opacity = 0.300;
@ -402,10 +402,11 @@ static unsigned rgui_particle_effect = RGUI_PARTICLE_EFFECT_NONE;
static bool rgui_extended_ascii = false;
#else
static bool default_block_config_read = false;
static bool automatically_add_content_to_playlist = false;
#define DEFAULT_BLOCK_CONFIG_READ false
#endif
static bool automatically_add_content_to_playlist = false;
static bool default_game_specific_options = true;
static bool default_auto_overrides_enable = true;
static bool default_auto_remaps_enable = true;
@ -456,13 +457,13 @@ static bool default_log_to_file = false;
static bool log_to_file_timestamp = false;
/* Crop overscanned frames. */
static const bool crop_overscan = true;
#define DEFAULT_CROP_OVERSCAN true
/* Font size for on-screen messages. */
#if defined(HAVE_LIBDBGFONT)
static const float font_size = 1.0f;
#define DEFAULT_FONT_SIZE 1.0f
#else
static const float font_size = 32;
#define DEFAULT_FONT_SIZE 32
#endif
/* Offset for where messages will be placed on-screen.
@ -536,7 +537,7 @@ static const unsigned video_3ds_display_mode = CTR_VIDEO_MODE_3D;
/* AUDIO */
/* Will enable audio or not. */
static const bool audio_enable = true;
#define DEFAULT_AUDIO_ENABLE true
/* Enable menu audio sounds. */
static const bool audio_enable_menu = false;
@ -553,11 +554,11 @@ static const bool menu_enable_widgets = false;
/* Output samplerate. */
#ifdef GEKKO
static const unsigned out_rate = 32000;
#define DEFAULT_OUTPUT_RATE 32000
#elif defined(_3DS)
static const unsigned out_rate = 32730;
#define DEFAULT_OUTPUT_RATE 32730
#else
static const unsigned out_rate = 48000;
#define DEFAULT_OUTPUT_RATE 48000
#endif
/* Audio device (e.g. hw:0,0 or /dev/audio). If NULL, will use defaults. */
@ -567,34 +568,34 @@ static const char *audio_device = NULL;
* if driver can't provide given latency. */
#if defined(ANDROID) || defined(EMSCRIPTEN)
/* For most Android devices, 64ms is way too low. */
static const int out_latency = 128;
#define DEFAULT_OUT_LATENCY 128
#else
static const int out_latency = 64;
#define DEFAULT_OUT_LATENCY 64
#endif
/* Will sync audio. (recommended) */
static const bool audio_sync = true;
#define DEFAULT_AUDIO_SYNC true
/* Audio rate control. */
#if !defined(RARCH_CONSOLE)
static const bool rate_control = true;
#define DEFAULT_RATE_CONTROL true
#else
static const bool rate_control = false;
#define DEFAULT_RATE_CONTROL false
#endif
/* Rate control delta. Defines how much rate_control
* is allowed to adjust input rate. */
static const float rate_control_delta = 0.005;
#define DEFAULT_RATE_CONTROL_DELTA 0.005
/* Maximum timing skew. Defines how much adjust_system_rates
* is allowed to adjust input rate. */
static const float max_timing_skew = 0.05;
#define DEFAULT_MAX_TIMING_SKEW 0.05
/* Default audio volume in dB. (0.0 dB == unity gain). */
static const float audio_volume = 0.0;
#define DEFAULT_AUDIO_VOLUME 0.0
/* Default audio volume of the audio mixer in dB. (0.0 dB == unity gain). */
static const float audio_mixer_volume = 0.0;
#define DEFAULT_AUDIO_MIXER_VOLUME 0.0
#ifdef HAVE_WASAPI
/* WASAPI defaults */
@ -606,56 +607,56 @@ static const int wasapi_sh_buffer_length = -16; /* auto */
/* MISC */
/* Enables displaying the current frames per second. */
static const bool fps_show = false;
#define DEFAULT_FPS_SHOW false
/* Enables displaying the current frame count. */
static const bool framecount_show = false;
#define DEFAULT_FRAMECOUNT_SHOW false
/* Includes displaying the current memory usage/total with FPS/Frames. */
static const bool memory_show = false;
#define DEFAULT_MEMORY_SHOW false
/* Enables displaying various timing statistics. */
static const bool statistics_show = false;
#define DEFAULT_STATISTICS_SHOW false
/* Enables use of rewind. This will incur some memory footprint
* depending on the save state buffer. */
static const bool rewind_enable = false;
#define DEFAULT_REWIND_ENABLE false
/* When set, any time a cheat is toggled it is immediately applied. */
static const bool apply_cheats_after_toggle = false;
#define DEFAULT_APPLY_CHEATS_AFTER_TOGGLE false
/* When set, all enabled cheats are auto-applied when a game is loaded. */
static const bool apply_cheats_after_load = false;
#define DEFAULT_APPLY_CHEATS_AFTER_LOAD false
/* The buffer size for the rewind buffer. This needs to be about
* 15-20MB per minute. Very game dependant. */
static const unsigned rewind_buffer_size = 20 << 20; /* 20MiB */
#define DEFAULT_REWIND_BUFFER_SIZE (20 << 20) /* 20MiB */
/* The amount of MB to increase/decrease the rewind_buffer_size when it is changed via the UI. */
static const unsigned rewind_buffer_size_step = 10; /* 10MB */
#define DEFAULT_REWIND_BUFFER_SIZE_STEP 10 /* 10MB */
/* How many frames to rewind at a time. */
static const unsigned rewind_granularity = 1;
#define DEFAULT_REWIND_GRANULARITY 1
/* Pause gameplay when gameplay loses focus. */
#ifdef EMSCRIPTEN
static const bool pause_nonactive = false;
#define DEFAULT_PAUSE_NONACTIVE false
#else
static const bool pause_nonactive = true;
#define DEFAULT_PAUSE_NONACTIVE true
#endif
/* Saves non-volatile SRAM at a regular interval.
* It is measured in seconds. A value of 0 disables autosave. */
#if defined(__i386__) || defined(__i486__) || defined(__i686__) || defined(__x86_64__) || defined(_M_X64) || defined(_WIN32) || defined(OSX) || defined(ANDROID) || defined(IOS)
/* Flush to file every 10 seconds on modern platforms by default */
static const unsigned autosave_interval = 10;
#define DEFAULT_AUTOSAVE_INTERVAL 10
#else
/* Default to disabled on I/O-constrained platforms */
static const unsigned autosave_interval = 0;
#define DEFAULT_AUTOSAVE_INTERVAL 0
#endif
/* Publicly announce netplay */
static const bool netplay_public_announce = true;
#define DEFAULT_NETPLAY_PUBLIC_ANNOUNCE true
/* Start netplay in spectator mode */
static const bool netplay_start_as_spectator = false;
@ -691,7 +692,7 @@ static const unsigned netplay_share_analog = RARCH_NETPLAY_SHARE_ANALOG_NO_PREFE
/* On save state load, block SRAM from being overwritten.
* This could potentially lead to buggy games. */
static const bool block_sram_overwrite = false;
#define DEFAULT_BLOCK_SRAM_OVERWRITE false
/* When saving savestates, state index is automatically
* incremented before saving.
@ -709,16 +710,16 @@ static const bool savestate_auto_load = false;
static const bool savestate_thumbnail_enable = false;
/* Slowmotion ratio. */
static const float slowmotion_ratio = 3.0;
#define DEFAULT_SLOWMOTION_RATIO 3.0
/* Maximum fast forward ratio. */
static const float fastforward_ratio = 0.0;
#define DEFAULT_FASTFORWARD_RATIO 0.0
/* Enable runloop for variable refresh rate screens. Force x1 speed while handling fast forward too. */
static const bool vrr_runloop_enable = false;
#define DEFAULT_VRR_RUNLOOP_ENABLE false
/* Run core logic one or more frames ahead then load the state back to reduce perceived input lag. */
static const unsigned run_ahead_frames = 1;
#define DEFAULT_RUN_AHEAD_FRAMES 1
/* When using the Run Ahead feature, use a secondary instance of the core. */
static const bool run_ahead_secondary_instance = true;
@ -750,6 +751,8 @@ static const unsigned playlist_show_inline_core_name = PLAYLIST_INLINE_CORE_DISP
/* Specifies which runtime record to use on playlist sublabels */
static const unsigned playlist_sublabel_runtime_type = PLAYLIST_RUNTIME_PER_CORE;
static const unsigned playlist_entry_remove_enable = PLAYLIST_ENTRY_REMOVE_ENABLE_ALL;
#endif
static const bool scan_without_core_match = false;
@ -858,8 +861,8 @@ static const unsigned midi_volume = 100;
/* Only applies to Android 7.0 (API 24) and up */
static const bool sustained_performance_mode = false;
static const bool vibrate_on_keypress = false;
static const bool enable_device_vibration = false;
static const bool vibrate_on_keypress = false;
static const bool enable_device_vibration = false;
#if defined(HAKCHI)
static char buildbot_server_url[] = "http://hakchicloud.com/Libretro_Cores/";

View File

@ -1357,7 +1357,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
SETTING_BOOL("all_users_control_menu", &settings->bools.input_all_users_control_menu, true, all_users_control_menu, false);
SETTING_BOOL("menu_swap_ok_cancel_buttons", &settings->bools.input_menu_swap_ok_cancel_buttons, true, menu_swap_ok_cancel_buttons, false);
#ifdef HAVE_NETWORKING
SETTING_BOOL("netplay_public_announce", &settings->bools.netplay_public_announce, true, netplay_public_announce, false);
SETTING_BOOL("netplay_public_announce", &settings->bools.netplay_public_announce, true, DEFAULT_NETPLAY_PUBLIC_ANNOUNCE, false);
SETTING_BOOL("netplay_start_as_spectator", &settings->bools.netplay_start_as_spectator, false, netplay_start_as_spectator, false);
SETTING_BOOL("netplay_allow_slaves", &settings->bools.netplay_allow_slaves, true, netplay_allow_slaves, false);
SETTING_BOOL("netplay_require_slaves", &settings->bools.netplay_require_slaves, true, netplay_require_slaves, false);
@ -1384,53 +1384,53 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
#endif
SETTING_BOOL("input_descriptor_label_show", &settings->bools.input_descriptor_label_show, true, input_descriptor_label_show, false);
SETTING_BOOL("input_descriptor_hide_unbound", &settings->bools.input_descriptor_hide_unbound, true, input_descriptor_hide_unbound, false);
SETTING_BOOL("load_dummy_on_core_shutdown", &settings->bools.load_dummy_on_core_shutdown, true, load_dummy_on_core_shutdown, false);
SETTING_BOOL("check_firmware_before_loading", &settings->bools.check_firmware_before_loading, true, check_firmware_before_loading, false);
SETTING_BOOL("load_dummy_on_core_shutdown", &settings->bools.load_dummy_on_core_shutdown, true, DEFAULT_LOAD_DUMMY_ON_CORE_SHUTDOWN, false);
SETTING_BOOL("check_firmware_before_loading", &settings->bools.check_firmware_before_loading, true, DEFAULT_CHECK_FIRMWARE_BEFORE_LOADING, false);
SETTING_BOOL("builtin_mediaplayer_enable", &settings->bools.multimedia_builtin_mediaplayer_enable, false, false /* TODO */, false);
SETTING_BOOL("builtin_imageviewer_enable", &settings->bools.multimedia_builtin_imageviewer_enable, true, true, false);
SETTING_BOOL("fps_show", &settings->bools.video_fps_show, true, fps_show, false);
SETTING_BOOL("statistics_show", &settings->bools.video_statistics_show, true, statistics_show, false);
SETTING_BOOL("framecount_show", &settings->bools.video_framecount_show, true, framecount_show, false);
SETTING_BOOL("memory_show", &settings->bools.video_memory_show, true, memory_show, false);
SETTING_BOOL("fps_show", &settings->bools.video_fps_show, true, DEFAULT_FPS_SHOW, false);
SETTING_BOOL("statistics_show", &settings->bools.video_statistics_show, true, DEFAULT_STATISTICS_SHOW, false);
SETTING_BOOL("framecount_show", &settings->bools.video_framecount_show, true, DEFAULT_FRAMECOUNT_SHOW, false);
SETTING_BOOL("memory_show", &settings->bools.video_memory_show, true, DEFAULT_MEMORY_SHOW, false);
SETTING_BOOL("ui_menubar_enable", &settings->bools.ui_menubar_enable, true, true, false);
SETTING_BOOL("suspend_screensaver_enable", &settings->bools.ui_suspend_screensaver_enable, true, true, false);
SETTING_BOOL("rewind_enable", &settings->bools.rewind_enable, true, rewind_enable, false);
SETTING_BOOL("vrr_runloop_enable", &settings->bools.vrr_runloop_enable, true, vrr_runloop_enable, false);
SETTING_BOOL("apply_cheats_after_toggle", &settings->bools.apply_cheats_after_toggle, true, apply_cheats_after_toggle, false);
SETTING_BOOL("apply_cheats_after_load", &settings->bools.apply_cheats_after_load, true, apply_cheats_after_load, false);
SETTING_BOOL("rewind_enable", &settings->bools.rewind_enable, true, DEFAULT_REWIND_ENABLE, false);
SETTING_BOOL("vrr_runloop_enable", &settings->bools.vrr_runloop_enable, true, DEFAULT_VRR_RUNLOOP_ENABLE, false);
SETTING_BOOL("apply_cheats_after_toggle", &settings->bools.apply_cheats_after_toggle, true, DEFAULT_APPLY_CHEATS_AFTER_TOGGLE, false);
SETTING_BOOL("apply_cheats_after_load", &settings->bools.apply_cheats_after_load, true, DEFAULT_APPLY_CHEATS_AFTER_LOAD, false);
SETTING_BOOL("run_ahead_enabled", &settings->bools.run_ahead_enabled, true, false, false);
SETTING_BOOL("run_ahead_secondary_instance", &settings->bools.run_ahead_secondary_instance, true, false, false);
SETTING_BOOL("run_ahead_hide_warnings", &settings->bools.run_ahead_hide_warnings, true, false, false);
SETTING_BOOL("audio_sync", &settings->bools.audio_sync, true, audio_sync, false);
SETTING_BOOL("video_shader_enable", &settings->bools.video_shader_enable, true, shader_enable, false);
SETTING_BOOL("audio_sync", &settings->bools.audio_sync, true, DEFAULT_AUDIO_SYNC, false);
SETTING_BOOL("video_shader_enable", &settings->bools.video_shader_enable, true, DEFAULT_SHADER_ENABLE, false);
SETTING_BOOL("video_shader_watch_files", &settings->bools.video_shader_watch_files, true, video_shader_watch_files, false);
/* Let implementation decide if automatic, or 1:1 PAR. */
SETTING_BOOL("video_aspect_ratio_auto", &settings->bools.video_aspect_ratio_auto, true, aspect_ratio_auto, false);
SETTING_BOOL("video_aspect_ratio_auto", &settings->bools.video_aspect_ratio_auto, true, DEFAULT_ASPECT_RATIO_AUTO, false);
SETTING_BOOL("video_allow_rotate", &settings->bools.video_allow_rotate, true, allow_rotate, false);
SETTING_BOOL("video_windowed_fullscreen", &settings->bools.video_windowed_fullscreen, true, windowed_fullscreen, false);
SETTING_BOOL("video_crop_overscan", &settings->bools.video_crop_overscan, true, crop_overscan, false);
SETTING_BOOL("video_scale_integer", &settings->bools.video_scale_integer, true, scale_integer, false);
SETTING_BOOL("video_smooth", &settings->bools.video_smooth, true, video_smooth, false);
SETTING_BOOL("video_force_aspect", &settings->bools.video_force_aspect, true, force_aspect, false);
SETTING_BOOL("video_windowed_fullscreen", &settings->bools.video_windowed_fullscreen, true, DEFAULT_WINDOWED_FULLSCREEN, false);
SETTING_BOOL("video_crop_overscan", &settings->bools.video_crop_overscan, true, DEFAULT_CROP_OVERSCAN, false);
SETTING_BOOL("video_scale_integer", &settings->bools.video_scale_integer, true, DEFAULT_SCALE_INTEGER, false);
SETTING_BOOL("video_smooth", &settings->bools.video_smooth, true, DEFAULT_VIDEO_SMOOTH, false);
SETTING_BOOL("video_force_aspect", &settings->bools.video_force_aspect, true, DEFAULT_FORCE_ASPECT, false);
SETTING_BOOL("video_threaded", video_driver_get_threaded(), true, DEFAULT_VIDEO_THREADED, false);
SETTING_BOOL("video_shared_context", &settings->bools.video_shared_context, true, video_shared_context, false);
SETTING_BOOL("video_shared_context", &settings->bools.video_shared_context, true, DEFAULT_VIDEO_SHARED_CONTEXT, false);
SETTING_BOOL("auto_screenshot_filename", &settings->bools.auto_screenshot_filename, true, auto_screenshot_filename, false);
SETTING_BOOL("video_force_srgb_disable", &settings->bools.video_force_srgb_disable, true, false, false);
SETTING_BOOL("video_fullscreen", &settings->bools.video_fullscreen, true, fullscreen, false);
SETTING_BOOL("video_fullscreen", &settings->bools.video_fullscreen, true, DEFAULT_FULLSCREEN, false);
SETTING_BOOL("bundle_assets_extract_enable", &settings->bools.bundle_assets_extract_enable, true, DEFAULT_BUNDLE_ASSETS_EXTRACT_ENABLE, false);
SETTING_BOOL("video_vsync", &settings->bools.video_vsync, true, vsync, false);
SETTING_BOOL("video_adaptive_vsync", &settings->bools.video_adaptive_vsync, true, adaptive_vsync, false);
SETTING_BOOL("video_hard_sync", &settings->bools.video_hard_sync, true, hard_sync, false);
SETTING_BOOL("video_black_frame_insertion", &settings->bools.video_black_frame_insertion, true, black_frame_insertion, false);
SETTING_BOOL("video_disable_composition", &settings->bools.video_disable_composition, true, disable_composition, false);
SETTING_BOOL("pause_nonactive", &settings->bools.pause_nonactive, true, pause_nonactive, false);
SETTING_BOOL("video_vsync", &settings->bools.video_vsync, true, DEFAULT_VSYNC, false);
SETTING_BOOL("video_adaptive_vsync", &settings->bools.video_adaptive_vsync, true, DEFAULT_ADAPTIVE_VSYNC, false);
SETTING_BOOL("video_hard_sync", &settings->bools.video_hard_sync, true, DEFAULT_HARD_SYNC, false);
SETTING_BOOL("video_black_frame_insertion", &settings->bools.video_black_frame_insertion, true, DEFAULT_BLACK_FRAME_INSERTION, false);
SETTING_BOOL("video_disable_composition", &settings->bools.video_disable_composition, true, DEFAULT_DISABLE_COMPOSITION, false);
SETTING_BOOL("pause_nonactive", &settings->bools.pause_nonactive, true, DEFAULT_PAUSE_NONACTIVE, false);
SETTING_BOOL("video_gpu_screenshot", &settings->bools.video_gpu_screenshot, true, gpu_screenshot, false);
SETTING_BOOL("video_post_filter_record", &settings->bools.video_post_filter_record, true, post_filter_record, false);
SETTING_BOOL("keyboard_gamepad_enable", &settings->bools.input_keyboard_gamepad_enable, true, true, false);
SETTING_BOOL("core_set_supports_no_game_enable", &settings->bools.set_supports_no_game_enable, true, true, false);
SETTING_BOOL("audio_enable", &settings->bools.audio_enable, true, audio_enable, false);
SETTING_BOOL("audio_enable", &settings->bools.audio_enable, true, DEFAULT_AUDIO_ENABLE, false);
SETTING_BOOL("menu_enable_widgets", &settings->bools.menu_enable_widgets, true, menu_enable_widgets, false);
SETTING_BOOL("audio_enable_menu", &settings->bools.audio_enable_menu, true, audio_enable_menu, false);
SETTING_BOOL("audio_enable_menu_ok", &settings->bools.audio_enable_menu_ok, true, audio_enable_menu_ok, false);
@ -1452,10 +1452,10 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
SETTING_BOOL("small_keyboard_enable", &settings->bools.input_small_keyboard_enable, true, false, false);
#endif
#ifdef GEKKO
SETTING_BOOL("video_vfilter", &settings->bools.video_vfilter, true, video_vfilter, false);
SETTING_BOOL("video_vfilter", &settings->bools.video_vfilter, true, DEFAULT_VIDEO_VFILTER, false);
#endif
#ifdef HAVE_THREADS
SETTING_BOOL("threaded_data_runloop_enable", &settings->bools.threaded_data_runloop_enable, true, threaded_data_runloop_enable, false);
SETTING_BOOL("threaded_data_runloop_enable", &settings->bools.threaded_data_runloop_enable, true, DEFAULT_THREADED_DATA_RUNLOOP_ENABLE, false);
#endif
#ifdef HAVE_MENU
SETTING_BOOL("menu_unified_controls", &settings->bools.menu_unified_controls, true, false, false);
@ -1464,7 +1464,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
SETTING_BOOL("menu_horizontal_animation", &settings->bools.menu_horizontal_animation, true, true, false);
SETTING_BOOL("dpi_override_enable", &settings->bools.menu_dpi_override_enable, true, menu_dpi_override_enable, false);
SETTING_BOOL("menu_pause_libretro", &settings->bools.menu_pause_libretro, true, true, false);
SETTING_BOOL("menu_mouse_enable", &settings->bools.menu_mouse_enable, true, def_mouse_enable, false);
SETTING_BOOL("menu_mouse_enable", &settings->bools.menu_mouse_enable, true, DEFAULT_MOUSE_ENABLE, false);
SETTING_BOOL("menu_pointer_enable", &settings->bools.menu_pointer_enable, true, DEFAULT_POINTER_ENABLE, false);
SETTING_BOOL("menu_timedate_enable", &settings->bools.menu_timedate_enable, true, true, false);
SETTING_BOOL("menu_battery_level_enable", &settings->bools.menu_battery_level_enable, true, true, false);
@ -1536,7 +1536,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
&settings->bools.menu_navigation_browser_filter_supported_extensions_enable, true, true, false);
SETTING_BOOL("menu_show_advanced_settings", &settings->bools.menu_show_advanced_settings, true, show_advanced_settings, false);
#ifdef HAVE_MATERIALUI
SETTING_BOOL("materialui_icons_enable", &settings->bools.menu_materialui_icons_enable, true, materialui_icons_enable, false);
SETTING_BOOL("materialui_icons_enable", &settings->bools.menu_materialui_icons_enable, true, DEFAULT_MATERIALUI_ICONS_ENABLE, false);
#endif
#ifdef HAVE_RGUI
SETTING_BOOL("rgui_background_filler_thickness_enable", &settings->bools.menu_rgui_background_filler_thickness_enable, true, true, false);
@ -1554,7 +1554,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
#endif
#endif
#ifdef HAVE_CHEEVOS
SETTING_BOOL("cheevos_enable", &settings->bools.cheevos_enable, true, cheevos_enable, false);
SETTING_BOOL("cheevos_enable", &settings->bools.cheevos_enable, true, DEFAULT_CHEEVOS_ENABLE, false);
SETTING_BOOL("cheevos_test_unofficial", &settings->bools.cheevos_test_unofficial, true, false, false);
SETTING_BOOL("cheevos_hardcore_mode_enable", &settings->bools.cheevos_hardcore_mode_enable, true, false, false);
SETTING_BOOL("cheevos_leaderboards_enable", &settings->bools.cheevos_leaderboards_enable, true, false, false);
@ -1568,7 +1568,8 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
SETTING_BOOL("input_overlay_enable", &settings->bools.input_overlay_enable, true, config_overlay_enable_default(), false);
SETTING_BOOL("input_overlay_enable_autopreferred", &settings->bools.input_overlay_enable_autopreferred, true, true, false);
SETTING_BOOL("input_overlay_show_physical_inputs", &settings->bools.input_overlay_show_physical_inputs, true, false, false);
SETTING_BOOL("input_overlay_hide_in_menu", &settings->bools.input_overlay_hide_in_menu, true, overlay_hide_in_menu, false);
SETTING_BOOL("input_overlay_hide_in_menu", &settings->bools.input_overlay_hide_in_menu, true, DEFAULT_OVERLAY_HIDE_IN_MENU, false);
SETTING_BOOL("input_overlay_show_mouse_cursor", &settings->bools.input_overlay_show_mouse_cursor, true, DEFAULT_OVERLAY_SHOW_MOUSE_CURSOR, false);
#endif
#ifdef HAVE_VIDEO_LAYOUT
SETTING_BOOL("video_layout_enable", &settings->bools.video_layout_enable, true, true, false);
@ -1583,13 +1584,12 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
#ifdef HAVE_NETWORKING
SETTING_BOOL("netplay_nat_traversal", &settings->bools.netplay_nat_traversal, true, true, false);
#endif
SETTING_BOOL("block_sram_overwrite", &settings->bools.block_sram_overwrite, true, block_sram_overwrite, false);
SETTING_BOOL("block_sram_overwrite", &settings->bools.block_sram_overwrite, true, DEFAULT_BLOCK_SRAM_OVERWRITE, false);
SETTING_BOOL("savestate_auto_index", &settings->bools.savestate_auto_index, true, savestate_auto_index, false);
SETTING_BOOL("savestate_auto_save", &settings->bools.savestate_auto_save, true, savestate_auto_save, false);
SETTING_BOOL("savestate_auto_load", &settings->bools.savestate_auto_load, true, savestate_auto_load, false);
SETTING_BOOL("savestate_thumbnail_enable", &settings->bools.savestate_thumbnail_enable, true, savestate_thumbnail_enable, false);
SETTING_BOOL("history_list_enable", &settings->bools.history_list_enable, true, def_history_list_enable, false);
SETTING_BOOL("playlist_entry_remove", &settings->bools.playlist_entry_remove, true, def_playlist_entry_remove, false);
SETTING_BOOL("playlist_entry_rename", &settings->bools.playlist_entry_rename, true, def_playlist_entry_rename, false);
SETTING_BOOL("game_specific_options", &settings->bools.game_specific_options, true, default_game_specific_options, false);
SETTING_BOOL("auto_overrides_enable", &settings->bools.auto_overrides_enable, true, default_auto_overrides_enable, false);
@ -1598,10 +1598,10 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
SETTING_BOOL("scan_without_core_match", &settings->bools.scan_without_core_match, true, scan_without_core_match, false);
SETTING_BOOL("sort_savefiles_enable", &settings->bools.sort_savefiles_enable, true, default_sort_savefiles_enable, false);
SETTING_BOOL("sort_savestates_enable", &settings->bools.sort_savestates_enable, true, default_sort_savestates_enable, false);
SETTING_BOOL("config_save_on_exit", &settings->bools.config_save_on_exit, true, config_save_on_exit, false);
SETTING_BOOL("show_hidden_files", &settings->bools.show_hidden_files, true, show_hidden_files, false);
SETTING_BOOL("config_save_on_exit", &settings->bools.config_save_on_exit, true, DEFAULT_CONFIG_SAVE_ON_EXIT, false);
SETTING_BOOL("show_hidden_files", &settings->bools.show_hidden_files, true, DEFAULT_SHOW_HIDDEN_FILES, false);
SETTING_BOOL("input_autodetect_enable", &settings->bools.input_autodetect_enable, true, input_autodetect_enable, false);
SETTING_BOOL("audio_rate_control", &settings->bools.audio_rate_control, true, rate_control, false);
SETTING_BOOL("audio_rate_control", &settings->bools.audio_rate_control, true, DEFAULT_RATE_CONTROL, false);
#ifdef HAVE_WASAPI
SETTING_BOOL("audio_wasapi_exclusive_mode", &settings->bools.audio_wasapi_exclusive_mode, true, wasapi_exclusive_mode, false);
SETTING_BOOL("audio_wasapi_float_format", &settings->bools.audio_wasapi_float_format, true, wasapi_float_format, false);
@ -1613,7 +1613,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
SETTING_BOOL("screenshots_in_content_dir", &settings->bools.screenshots_in_content_dir, true, default_screenshots_in_content_dir, false);
SETTING_BOOL("video_msg_bgcolor_enable", &settings->bools.video_msg_bgcolor_enable, true, message_bgcolor_enable, false);
SETTING_BOOL("video_window_show_decorations", &settings->bools.video_window_show_decorations, true, window_decorations, false);
SETTING_BOOL("video_window_show_decorations", &settings->bools.video_window_show_decorations, true, DEFAULT_WINDOW_DECORATIONS, false);
SETTING_BOOL("video_window_save_positions", &settings->bools.video_window_save_positions, true, false, false);
SETTING_BOOL("sustained_performance_mode", &settings->bools.sustained_performance_mode, true, sustained_performance_mode, false);
@ -1655,16 +1655,16 @@ static struct config_float_setting *populate_settings_float(settings_t *settings
if (!tmp)
return NULL;
SETTING_FLOAT("video_aspect_ratio", &settings->floats.video_aspect_ratio, true, aspect_ratio, false);
SETTING_FLOAT("video_aspect_ratio", &settings->floats.video_aspect_ratio, true, DEFAULT_ASPECT_RATIO, false);
SETTING_FLOAT("video_scale", &settings->floats.video_scale, false, 0.0f, false);
SETTING_FLOAT("crt_video_refresh_rate", &settings->floats.crt_video_refresh_rate, true, crt_refresh_rate, false);
SETTING_FLOAT("video_refresh_rate", &settings->floats.video_refresh_rate, true, refresh_rate, false);
SETTING_FLOAT("audio_rate_control_delta", audio_get_float_ptr(AUDIO_ACTION_RATE_CONTROL_DELTA), true, rate_control_delta, false);
SETTING_FLOAT("audio_max_timing_skew", &settings->floats.audio_max_timing_skew, true, max_timing_skew, false);
SETTING_FLOAT("audio_volume", &settings->floats.audio_volume, true, audio_volume, false);
SETTING_FLOAT("audio_mixer_volume", &settings->floats.audio_mixer_volume, true, audio_mixer_volume, false);
SETTING_FLOAT("audio_rate_control_delta", audio_get_float_ptr(AUDIO_ACTION_RATE_CONTROL_DELTA), true, DEFAULT_RATE_CONTROL_DELTA, false);
SETTING_FLOAT("audio_max_timing_skew", &settings->floats.audio_max_timing_skew, true, DEFAULT_MAX_TIMING_SKEW, false);
SETTING_FLOAT("audio_volume", &settings->floats.audio_volume, true, DEFAULT_AUDIO_VOLUME, false);
SETTING_FLOAT("audio_mixer_volume", &settings->floats.audio_mixer_volume, true, DEFAULT_AUDIO_MIXER_VOLUME, false);
#ifdef HAVE_OVERLAY
SETTING_FLOAT("input_overlay_opacity", &settings->floats.input_overlay_opacity, true, default_input_overlay_opacity, false);
SETTING_FLOAT("input_overlay_opacity", &settings->floats.input_overlay_opacity, true, DEFAULT_INPUT_OVERLAY_OPACITY, false);
SETTING_FLOAT("input_overlay_scale", &settings->floats.input_overlay_scale, true, 1.0f, false);
#endif
#ifdef HAVE_MENU
@ -1676,9 +1676,9 @@ static struct config_float_setting *populate_settings_float(settings_t *settings
#endif
SETTING_FLOAT("video_message_pos_x", &settings->floats.video_msg_pos_x, true, message_pos_offset_x, false);
SETTING_FLOAT("video_message_pos_y", &settings->floats.video_msg_pos_y, true, message_pos_offset_y, false);
SETTING_FLOAT("video_font_size", &settings->floats.video_font_size, true, font_size, false);
SETTING_FLOAT("fastforward_ratio", &settings->floats.fastforward_ratio, true, fastforward_ratio, false);
SETTING_FLOAT("slowmotion_ratio", &settings->floats.slowmotion_ratio, true, slowmotion_ratio, false);
SETTING_FLOAT("video_font_size", &settings->floats.video_font_size, true, DEFAULT_FONT_SIZE, false);
SETTING_FLOAT("fastforward_ratio", &settings->floats.fastforward_ratio, true, DEFAULT_FASTFORWARD_RATIO, false);
SETTING_FLOAT("slowmotion_ratio", &settings->floats.slowmotion_ratio, true, DEFAULT_SLOWMOTION_RATIO, false);
SETTING_FLOAT("input_axis_threshold", input_driver_get_float(INPUT_ACTION_AXIS_THRESHOLD), true, axis_threshold, false);
SETTING_FLOAT("input_analog_deadzone", &settings->floats.input_analog_deadzone, true, analog_deadzone, false);
SETTING_FLOAT("input_analog_sensitivity", &settings->floats.input_analog_sensitivity, true, analog_sensitivity, false);
@ -1713,16 +1713,16 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings,
#ifdef ANDROID
SETTING_UINT("input_block_timeout", &settings->uints.input_block_timeout, true, 1, false);
#endif
SETTING_UINT("rewind_granularity", &settings->uints.rewind_granularity, true, rewind_granularity, false);
SETTING_UINT("rewind_buffer_size_step", &settings->uints.rewind_buffer_size_step, true, rewind_buffer_size_step, false);
SETTING_UINT("autosave_interval", &settings->uints.autosave_interval, true, autosave_interval, false);
SETTING_UINT("rewind_granularity", &settings->uints.rewind_granularity, true, DEFAULT_REWIND_GRANULARITY, false);
SETTING_UINT("rewind_buffer_size_step", &settings->uints.rewind_buffer_size_step, true, DEFAULT_REWIND_BUFFER_SIZE_STEP, false);
SETTING_UINT("autosave_interval", &settings->uints.autosave_interval, true, DEFAULT_AUTOSAVE_INTERVAL, false);
SETTING_UINT("libretro_log_level", &settings->uints.libretro_log_level, true, libretro_log_level, false);
SETTING_UINT("keyboard_gamepad_mapping_type",&settings->uints.input_keyboard_gamepad_mapping_type, true, 1, false);
SETTING_UINT("input_poll_type_behavior", &settings->uints.input_poll_type_behavior, true, 2, false);
SETTING_UINT("video_monitor_index", &settings->uints.video_monitor_index, true, monitor_index, false);
SETTING_UINT("video_fullscreen_x", &settings->uints.video_fullscreen_x, true, fullscreen_x, false);
SETTING_UINT("video_fullscreen_y", &settings->uints.video_fullscreen_y, true, fullscreen_y, false);
SETTING_UINT("video_window_opacity", &settings->uints.video_window_opacity, true, window_opacity, false);
SETTING_UINT("video_monitor_index", &settings->uints.video_monitor_index, true, DEFAULT_MONITOR_INDEX, false);
SETTING_UINT("video_fullscreen_x", &settings->uints.video_fullscreen_x, true, DEFAULT_FULLSCREEN_X, false);
SETTING_UINT("video_fullscreen_y", &settings->uints.video_fullscreen_y, true, DEFAULT_FULLSCREEN_Y, false);
SETTING_UINT("video_window_opacity", &settings->uints.video_window_opacity, true, DEFAULT_WINDOW_OPACITY, false);
#ifdef HAVE_VIDEO_LAYOUT
SETTING_UINT("video_layout_selected_view", &settings->uints.video_layout_selected_view, true, 0, false);
#endif
@ -1733,7 +1733,9 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings,
SETTING_UINT("network_remote_base_port", &settings->uints.network_remote_base_port, true, network_remote_base_port, false);
#endif
#ifdef GEKKO
SETTING_UINT("video_viwidth", &settings->uints.video_viwidth, true, video_viwidth, false);
SETTING_UINT("video_viwidth", &settings->uints.video_viwidth, true, DEFAULT_VIDEO_VI_WIDTH, false);
SETTING_UINT("video_overscan_correction_top", &settings->uints.video_overscan_correction_top, true, DEFAULT_VIDEO_OVERSCAN_CORRECTION_TOP, false);
SETTING_UINT("video_overscan_correction_bottom", &settings->uints.video_overscan_correction_bottom, true, DEFAULT_VIDEO_OVERSCAN_CORRECTION_BOTTOM, false);
#endif
#ifdef HAVE_MENU
SETTING_UINT("dpi_override_value", &settings->uints.menu_dpi_override_value, true, menu_dpi_override_value, false);
@ -1779,20 +1781,20 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings,
SETTING_UINT("ozone_menu_color_theme", &settings->uints.menu_ozone_color_theme, true, 1, false);
#endif
#endif
SETTING_UINT("audio_out_rate", &settings->uints.audio_out_rate, true, out_rate, false);
SETTING_UINT("audio_out_rate", &settings->uints.audio_out_rate, true, DEFAULT_OUTPUT_RATE, false);
SETTING_UINT("custom_viewport_width", &settings->video_viewport_custom.width, false, 0 /* TODO */, false);
SETTING_UINT("crt_switch_resolution_super", &settings->uints.crt_switch_resolution_super, true, crt_switch_resolution_super, false);
SETTING_UINT("custom_viewport_height", &settings->video_viewport_custom.height, false, 0 /* TODO */, false);
SETTING_UINT("custom_viewport_x", (unsigned*)&settings->video_viewport_custom.x, false, 0 /* TODO */, false);
SETTING_UINT("custom_viewport_y", (unsigned*)&settings->video_viewport_custom.y, false, 0 /* TODO */, false);
SETTING_UINT("content_history_size", &settings->uints.content_history_size, true, default_content_history_size, false);
SETTING_UINT("video_hard_sync_frames", &settings->uints.video_hard_sync_frames, true, hard_sync_frames, false);
SETTING_UINT("video_frame_delay", &settings->uints.video_frame_delay, true, frame_delay, false);
SETTING_UINT("video_max_swapchain_images", &settings->uints.video_max_swapchain_images, true, max_swapchain_images, false);
SETTING_UINT("video_swap_interval", &settings->uints.video_swap_interval, true, swap_interval, false);
SETTING_UINT("video_hard_sync_frames", &settings->uints.video_hard_sync_frames, true, DEFAULT_HARD_SYNC_FRAMES, false);
SETTING_UINT("video_frame_delay", &settings->uints.video_frame_delay, true, DEFAULT_FRAME_DELAY, false);
SETTING_UINT("video_max_swapchain_images", &settings->uints.video_max_swapchain_images, true, DEFAULT_MAX_SWAPCHAIN_IMAGES, false);
SETTING_UINT("video_swap_interval", &settings->uints.video_swap_interval, true, DEFAULT_SWAP_INTERVAL, false);
SETTING_UINT("video_rotation", &settings->uints.video_rotation, true, ORIENTATION_NORMAL, false);
SETTING_UINT("screen_orientation", &settings->uints.screen_orientation, true, ORIENTATION_NORMAL, false);
SETTING_UINT("aspect_ratio_index", &settings->uints.video_aspect_ratio_idx, true, aspect_ratio_idx, false);
SETTING_UINT("aspect_ratio_index", &settings->uints.video_aspect_ratio_idx, true, DEFAULT_ASPECT_RATIO_IDX, false);
#ifdef HAVE_NETWORKING
SETTING_UINT("netplay_ip_port", &settings->uints.netplay_port, true, RARCH_DEFAULT_PORT, false);
SETTING_OVERRIDE(RARCH_OVERRIDE_SETTING_NETPLAY_IP_PORT);
@ -1822,10 +1824,10 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings,
SETTING_UINT("video_stream_scale_factor", &settings->uints.video_stream_scale_factor, true, 1, false);
SETTING_UINT("video_windowed_position_x", &settings->uints.window_position_x, true, 0, false);
SETTING_UINT("video_windowed_position_y", &settings->uints.window_position_y, true, 0, false);
SETTING_UINT("video_windowed_position_width", &settings->uints.window_position_width, true, window_width, false);
SETTING_UINT("video_windowed_position_height", &settings->uints.window_position_height, true, window_height, false);
SETTING_UINT("video_windowed_position_width", &settings->uints.window_position_width, true, DEFAULT_WINDOW_WIDTH, false);
SETTING_UINT("video_windowed_position_height", &settings->uints.window_position_height, true, DEFAULT_WINDOW_HEIGHT, false);
SETTING_UINT("video_record_threads", &settings->uints.video_record_threads, true, video_record_threads, false);
SETTING_UINT("video_record_threads", &settings->uints.video_record_threads, true, DEFAULT_VIDEO_RECORD_THREADS, false);
#ifdef HAVE_LIBNX
SETTING_UINT("libnx_overclock", &settings->uints.libnx_overclock, true, SWITCH_DEFAULT_CPU_PROFILE, false);
@ -1836,6 +1838,7 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings,
#endif
#ifdef HAVE_MENU
SETTING_UINT("playlist_entry_remove_enable", &settings->uints.playlist_entry_remove_enable, true, playlist_entry_remove_enable, false);
SETTING_UINT("playlist_show_inline_core_name", &settings->uints.playlist_show_inline_core_name, true, playlist_show_inline_core_name, false);
SETTING_UINT("playlist_sublabel_runtime_type", &settings->uints.playlist_sublabel_runtime_type, true, playlist_sublabel_runtime_type, false);
#endif
@ -1853,7 +1856,7 @@ static struct config_size_setting *populate_settings_size(settings_t *settings,
if (!tmp)
return NULL;
SETTING_SIZE("rewind_buffer_size", &settings->sizes.rewind_buffer_size, true, rewind_buffer_size, false);
SETTING_SIZE("rewind_buffer_size", &settings->sizes.rewind_buffer_size, true, DEFAULT_REWIND_BUFFER_SIZE, false);
*size = count;
@ -2038,7 +2041,7 @@ void config_set_defaults(void)
#else
configuration_set_bool(settings, settings->bools.multimedia_builtin_mediaplayer_enable, false);
#endif
settings->floats.video_scale = scale;
settings->floats.video_scale = DEFAULT_SCALE;
if (g_defaults.settings.video_threaded_enable != DEFAULT_VIDEO_THREADED)
video_driver_set_threaded(g_defaults.settings.video_threaded_enable);
@ -2056,7 +2059,7 @@ void config_set_defaults(void)
audio_device, sizeof(settings->arrays.audio_device));
if (!g_defaults.settings.out_latency)
g_defaults.settings.out_latency = out_latency;
g_defaults.settings.out_latency = DEFAULT_OUT_LATENCY;
settings->uints.audio_latency = g_defaults.settings.out_latency;
@ -2364,7 +2367,7 @@ void config_set_defaults(void)
midi_output, sizeof(settings->arrays.midi_output));
/* Avoid reloading config on every content load */
if (default_block_config_read)
if (DEFAULT_BLOCK_CONFIG_READ)
rarch_ctl(RARCH_CTL_SET_BLOCK_CONFIG_READ, NULL);
else
rarch_ctl(RARCH_CTL_UNSET_BLOCK_CONFIG_READ, NULL);

View File

@ -129,6 +129,7 @@ typedef struct settings
bool input_overlay_enable_autopreferred;
bool input_overlay_hide_in_menu;
bool input_overlay_show_physical_inputs;
bool input_overlay_show_mouse_cursor;
bool input_descriptor_label_show;
bool input_descriptor_hide_unbound;
bool input_all_users_control_menu;
@ -275,7 +276,6 @@ typedef struct settings
bool set_supports_no_game_enable;
bool auto_screenshot_filename;
bool history_list_enable;
bool playlist_entry_remove;
bool playlist_entry_rename;
bool rewind_enable;
bool vrr_runloop_enable;
@ -449,6 +449,10 @@ typedef struct settings
#ifdef HAVE_VIDEO_LAYOUT
unsigned video_layout_selected_view;
#endif
#ifdef GEKKO
unsigned video_overscan_correction_top;
unsigned video_overscan_correction_bottom;
#endif
unsigned menu_timedate_style;
unsigned menu_thumbnails;
@ -477,6 +481,7 @@ typedef struct settings
unsigned menu_rgui_particle_effect;
unsigned menu_ticker_type;
unsigned playlist_entry_remove_enable;
unsigned playlist_show_inline_core_name;
unsigned playlist_sublabel_runtime_type;

299
dynamic.c
View File

@ -473,6 +473,33 @@ bool libretro_get_system_info(const char *path,
return true;
}
#define CORE_SYMBOLS(x) \
x(retro_init); \
x(retro_deinit); \
x(retro_api_version); \
x(retro_get_system_info); \
x(retro_get_system_av_info); \
x(retro_set_environment); \
x(retro_set_video_refresh); \
x(retro_set_audio_sample); \
x(retro_set_audio_sample_batch); \
x(retro_set_input_poll); \
x(retro_set_input_state); \
x(retro_set_controller_port_device); \
x(retro_reset); \
x(retro_run); \
x(retro_serialize_size); \
x(retro_serialize); \
x(retro_unserialize); \
x(retro_cheat_reset); \
x(retro_cheat_set); \
x(retro_load_game); \
x(retro_load_game_special); \
x(retro_unload_game); \
x(retro_get_region); \
x(retro_get_memory_data); \
x(retro_get_memory_size);
/**
* load_symbols:
* @type : Type of core to be loaded.
@ -542,296 +569,40 @@ bool init_libretro_sym_custom(enum rarch_core_type type,
#endif
#endif
SYMBOL(retro_init);
SYMBOL(retro_deinit);
SYMBOL(retro_api_version);
SYMBOL(retro_get_system_info);
SYMBOL(retro_get_system_av_info);
SYMBOL(retro_set_environment);
SYMBOL(retro_set_video_refresh);
SYMBOL(retro_set_audio_sample);
SYMBOL(retro_set_audio_sample_batch);
SYMBOL(retro_set_input_poll);
SYMBOL(retro_set_input_state);
SYMBOL(retro_set_controller_port_device);
SYMBOL(retro_reset);
SYMBOL(retro_run);
SYMBOL(retro_serialize_size);
SYMBOL(retro_serialize);
SYMBOL(retro_unserialize);
SYMBOL(retro_cheat_reset);
SYMBOL(retro_cheat_set);
SYMBOL(retro_load_game);
SYMBOL(retro_load_game_special);
SYMBOL(retro_unload_game);
SYMBOL(retro_get_region);
SYMBOL(retro_get_memory_data);
SYMBOL(retro_get_memory_size);
CORE_SYMBOLS(SYMBOL);
}
break;
case CORE_TYPE_DUMMY:
SYMBOL_DUMMY(retro_init);
SYMBOL_DUMMY(retro_deinit);
SYMBOL_DUMMY(retro_api_version);
SYMBOL_DUMMY(retro_get_system_info);
SYMBOL_DUMMY(retro_get_system_av_info);
SYMBOL_DUMMY(retro_set_environment);
SYMBOL_DUMMY(retro_set_video_refresh);
SYMBOL_DUMMY(retro_set_audio_sample);
SYMBOL_DUMMY(retro_set_audio_sample_batch);
SYMBOL_DUMMY(retro_set_input_poll);
SYMBOL_DUMMY(retro_set_input_state);
SYMBOL_DUMMY(retro_set_controller_port_device);
SYMBOL_DUMMY(retro_reset);
SYMBOL_DUMMY(retro_run);
SYMBOL_DUMMY(retro_serialize_size);
SYMBOL_DUMMY(retro_serialize);
SYMBOL_DUMMY(retro_unserialize);
SYMBOL_DUMMY(retro_cheat_reset);
SYMBOL_DUMMY(retro_cheat_set);
SYMBOL_DUMMY(retro_load_game);
SYMBOL_DUMMY(retro_load_game_special);
SYMBOL_DUMMY(retro_unload_game);
SYMBOL_DUMMY(retro_get_region);
SYMBOL_DUMMY(retro_get_memory_data);
SYMBOL_DUMMY(retro_get_memory_size);
CORE_SYMBOLS(SYMBOL_DUMMY);
break;
case CORE_TYPE_FFMPEG:
#ifdef HAVE_FFMPEG
SYMBOL_FFMPEG(retro_init);
SYMBOL_FFMPEG(retro_deinit);
SYMBOL_FFMPEG(retro_api_version);
SYMBOL_FFMPEG(retro_get_system_info);
SYMBOL_FFMPEG(retro_get_system_av_info);
SYMBOL_FFMPEG(retro_set_environment);
SYMBOL_FFMPEG(retro_set_video_refresh);
SYMBOL_FFMPEG(retro_set_audio_sample);
SYMBOL_FFMPEG(retro_set_audio_sample_batch);
SYMBOL_FFMPEG(retro_set_input_poll);
SYMBOL_FFMPEG(retro_set_input_state);
SYMBOL_FFMPEG(retro_set_controller_port_device);
SYMBOL_FFMPEG(retro_reset);
SYMBOL_FFMPEG(retro_run);
SYMBOL_FFMPEG(retro_serialize_size);
SYMBOL_FFMPEG(retro_serialize);
SYMBOL_FFMPEG(retro_unserialize);
SYMBOL_FFMPEG(retro_cheat_reset);
SYMBOL_FFMPEG(retro_cheat_set);
SYMBOL_FFMPEG(retro_load_game);
SYMBOL_FFMPEG(retro_load_game_special);
SYMBOL_FFMPEG(retro_unload_game);
SYMBOL_FFMPEG(retro_get_region);
SYMBOL_FFMPEG(retro_get_memory_data);
SYMBOL_FFMPEG(retro_get_memory_size);
CORE_SYMBOLS(SYMBOL_FFMPEG);
#endif
break;
case CORE_TYPE_MPV:
#ifdef HAVE_MPV
SYMBOL_MPV(retro_init);
SYMBOL_MPV(retro_deinit);
SYMBOL_MPV(retro_api_version);
SYMBOL_MPV(retro_get_system_info);
SYMBOL_MPV(retro_get_system_av_info);
SYMBOL_MPV(retro_set_environment);
SYMBOL_MPV(retro_set_video_refresh);
SYMBOL_MPV(retro_set_audio_sample);
SYMBOL_MPV(retro_set_audio_sample_batch);
SYMBOL_MPV(retro_set_input_poll);
SYMBOL_MPV(retro_set_input_state);
SYMBOL_MPV(retro_set_controller_port_device);
SYMBOL_MPV(retro_reset);
SYMBOL_MPV(retro_run);
SYMBOL_MPV(retro_serialize_size);
SYMBOL_MPV(retro_serialize);
SYMBOL_MPV(retro_unserialize);
SYMBOL_MPV(retro_cheat_reset);
SYMBOL_MPV(retro_cheat_set);
SYMBOL_MPV(retro_load_game);
SYMBOL_MPV(retro_load_game_special);
SYMBOL_MPV(retro_unload_game);
SYMBOL_MPV(retro_get_region);
SYMBOL_MPV(retro_get_memory_data);
SYMBOL_MPV(retro_get_memory_size);
CORE_SYMBOLS(SYMBOL_MPV);
#endif
break;
case CORE_TYPE_IMAGEVIEWER:
#ifdef HAVE_IMAGEVIEWER
SYMBOL_IMAGEVIEWER(retro_init);
SYMBOL_IMAGEVIEWER(retro_deinit);
SYMBOL_IMAGEVIEWER(retro_api_version);
SYMBOL_IMAGEVIEWER(retro_get_system_info);
SYMBOL_IMAGEVIEWER(retro_get_system_av_info);
SYMBOL_IMAGEVIEWER(retro_set_environment);
SYMBOL_IMAGEVIEWER(retro_set_video_refresh);
SYMBOL_IMAGEVIEWER(retro_set_audio_sample);
SYMBOL_IMAGEVIEWER(retro_set_audio_sample_batch);
SYMBOL_IMAGEVIEWER(retro_set_input_poll);
SYMBOL_IMAGEVIEWER(retro_set_input_state);
SYMBOL_IMAGEVIEWER(retro_set_controller_port_device);
SYMBOL_IMAGEVIEWER(retro_reset);
SYMBOL_IMAGEVIEWER(retro_run);
SYMBOL_IMAGEVIEWER(retro_serialize_size);
SYMBOL_IMAGEVIEWER(retro_serialize);
SYMBOL_IMAGEVIEWER(retro_unserialize);
SYMBOL_IMAGEVIEWER(retro_cheat_reset);
SYMBOL_IMAGEVIEWER(retro_cheat_set);
SYMBOL_IMAGEVIEWER(retro_load_game);
SYMBOL_IMAGEVIEWER(retro_load_game_special);
SYMBOL_IMAGEVIEWER(retro_unload_game);
SYMBOL_IMAGEVIEWER(retro_get_region);
SYMBOL_IMAGEVIEWER(retro_get_memory_data);
SYMBOL_IMAGEVIEWER(retro_get_memory_size);
CORE_SYMBOLS(SYMBOL_IMAGEVIEWER);
#endif
break;
case CORE_TYPE_NETRETROPAD:
#if defined(HAVE_NETWORKING) && defined(HAVE_NETWORKGAMEPAD)
SYMBOL_NETRETROPAD(retro_init);
SYMBOL_NETRETROPAD(retro_deinit);
SYMBOL_NETRETROPAD(retro_api_version);
SYMBOL_NETRETROPAD(retro_get_system_info);
SYMBOL_NETRETROPAD(retro_get_system_av_info);
SYMBOL_NETRETROPAD(retro_set_environment);
SYMBOL_NETRETROPAD(retro_set_video_refresh);
SYMBOL_NETRETROPAD(retro_set_audio_sample);
SYMBOL_NETRETROPAD(retro_set_audio_sample_batch);
SYMBOL_NETRETROPAD(retro_set_input_poll);
SYMBOL_NETRETROPAD(retro_set_input_state);
SYMBOL_NETRETROPAD(retro_set_controller_port_device);
SYMBOL_NETRETROPAD(retro_reset);
SYMBOL_NETRETROPAD(retro_run);
SYMBOL_NETRETROPAD(retro_serialize_size);
SYMBOL_NETRETROPAD(retro_serialize);
SYMBOL_NETRETROPAD(retro_unserialize);
SYMBOL_NETRETROPAD(retro_cheat_reset);
SYMBOL_NETRETROPAD(retro_cheat_set);
SYMBOL_NETRETROPAD(retro_load_game);
SYMBOL_NETRETROPAD(retro_load_game_special);
SYMBOL_NETRETROPAD(retro_unload_game);
SYMBOL_NETRETROPAD(retro_get_region);
SYMBOL_NETRETROPAD(retro_get_memory_data);
SYMBOL_NETRETROPAD(retro_get_memory_size);
CORE_SYMBOLS(SYMBOL_NETRETROPAD);
#endif
break;
case CORE_TYPE_VIDEO_PROCESSOR:
#if defined(HAVE_VIDEOPROCESSOR)
SYMBOL_VIDEOPROCESSOR(retro_init);
SYMBOL_VIDEOPROCESSOR(retro_deinit);
SYMBOL_VIDEOPROCESSOR(retro_api_version);
SYMBOL_VIDEOPROCESSOR(retro_get_system_info);
SYMBOL_VIDEOPROCESSOR(retro_get_system_av_info);
SYMBOL_VIDEOPROCESSOR(retro_set_environment);
SYMBOL_VIDEOPROCESSOR(retro_set_video_refresh);
SYMBOL_VIDEOPROCESSOR(retro_set_audio_sample);
SYMBOL_VIDEOPROCESSOR(retro_set_audio_sample_batch);
SYMBOL_VIDEOPROCESSOR(retro_set_input_poll);
SYMBOL_VIDEOPROCESSOR(retro_set_input_state);
SYMBOL_VIDEOPROCESSOR(retro_set_controller_port_device);
SYMBOL_VIDEOPROCESSOR(retro_reset);
SYMBOL_VIDEOPROCESSOR(retro_run);
SYMBOL_VIDEOPROCESSOR(retro_serialize_size);
SYMBOL_VIDEOPROCESSOR(retro_serialize);
SYMBOL_VIDEOPROCESSOR(retro_unserialize);
SYMBOL_VIDEOPROCESSOR(retro_cheat_reset);
SYMBOL_VIDEOPROCESSOR(retro_cheat_set);
SYMBOL_VIDEOPROCESSOR(retro_load_game);
SYMBOL_VIDEOPROCESSOR(retro_load_game_special);
SYMBOL_VIDEOPROCESSOR(retro_unload_game);
SYMBOL_VIDEOPROCESSOR(retro_get_region);
SYMBOL_VIDEOPROCESSOR(retro_get_memory_data);
SYMBOL_VIDEOPROCESSOR(retro_get_memory_size);
CORE_SYMBOLS(SYMBOL_VIDEOPROCESSOR);
#endif
break;
case CORE_TYPE_GONG:
#ifdef HAVE_EASTEREGG
SYMBOL_GONG(retro_init);
SYMBOL_GONG(retro_deinit);
SYMBOL_GONG(retro_api_version);
SYMBOL_GONG(retro_get_system_info);
SYMBOL_GONG(retro_get_system_av_info);
SYMBOL_GONG(retro_set_environment);
SYMBOL_GONG(retro_set_video_refresh);
SYMBOL_GONG(retro_set_audio_sample);
SYMBOL_GONG(retro_set_audio_sample_batch);
SYMBOL_GONG(retro_set_input_poll);
SYMBOL_GONG(retro_set_input_state);
SYMBOL_GONG(retro_set_controller_port_device);
SYMBOL_GONG(retro_reset);
SYMBOL_GONG(retro_run);
SYMBOL_GONG(retro_serialize_size);
SYMBOL_GONG(retro_serialize);
SYMBOL_GONG(retro_unserialize);
SYMBOL_GONG(retro_cheat_reset);
SYMBOL_GONG(retro_cheat_set);
SYMBOL_GONG(retro_load_game);
SYMBOL_GONG(retro_load_game_special);
SYMBOL_GONG(retro_unload_game);
SYMBOL_GONG(retro_get_region);
SYMBOL_GONG(retro_get_memory_data);
SYMBOL_GONG(retro_get_memory_size);
CORE_SYMBOLS(SYMBOL_GONG);
#endif
break;
}

View File

@ -1987,21 +1987,12 @@ static int frontend_unix_parse_drive_list(void *data, bool load_content)
enum_idx,
FILE_TYPE_DIRECTORY, 0, 0);
}
/* this path is not really desirable a user with root permissions could
screw up his system messing with it */
menu_entries_append_enum(list, "/",
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
enum_idx,
FILE_TYPE_DIRECTORY, 0, 0);
#else
menu_entries_append_enum(list, "/",
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
enum_idx,
FILE_TYPE_DIRECTORY, 0, 0);
#endif
menu_entries_append_enum(list, "/",
msg_hash_to_str(MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR),
enum_idx,
FILE_TYPE_DIRECTORY, 0, 0);
#endif
return 0;

View File

@ -333,7 +333,8 @@ static void *wiiu_gfx_init(const video_info_t *video,
wiiu->menu.texture.surface.format = GX2_SURFACE_FORMAT_UNORM_R4_G4_B4_A4;
wiiu->menu.texture.surface.tileMode = GX2_TILE_MODE_LINEAR_ALIGNED;
wiiu->menu.texture.viewNumSlices = 1;
wiiu->menu.texture.compMap = GX2_COMP_SEL(_A, _R, _G, _B);
/* Presumably an endian thing. RGBA, but swap R and G, then B and A. */
wiiu->menu.texture.compMap = GX2_COMP_SEL(_G, _R, _A, _B);
GX2CalcSurfaceSizeAndAlignment(&wiiu->menu.texture.surface);
GX2InitTextureRegs(&wiiu->menu.texture);
@ -370,7 +371,7 @@ static void *wiiu_gfx_init(const video_info_t *video,
wiiu->menu.v->coord.v = 0.0f;
wiiu->menu.v->coord.width = 1.0f;
wiiu->menu.v->coord.height = 1.0f;
wiiu->menu.v->color = 0xFFFFFF80;
wiiu->menu.v->color = 0xFFFFFFFF;
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, wiiu->menu.v, 4 * sizeof(*wiiu->menu.v));
wiiu->vertex_cache.size = 0x1000;
@ -1334,7 +1335,8 @@ static bool wiiu_gfx_frame(void *data, const void *frame,
GX2SetAttribBuffer(0, 4 * sizeof(*wiiu->menu.v), sizeof(*wiiu->menu.v), wiiu->menu.v);
GX2SetPixelTexture(&wiiu->menu.texture, sprite_shader.ps.samplerVars[0].location);
GX2SetPixelSampler(&wiiu->sampler_linear[RARCH_WRAP_DEFAULT],
GX2SetPixelSampler(wiiu->smooth ? &wiiu->sampler_linear[RARCH_WRAP_DEFAULT] :
&wiiu->sampler_nearest[RARCH_WRAP_DEFAULT],
sprite_shader.ps.samplerVars[0].location);
GX2DrawEx(GX2_PRIMITIVE_MODE_POINTS, 1, 0, 1);
@ -1675,14 +1677,14 @@ static void wiiu_gfx_set_texture_frame(void *data, const void *frame, bool rgb32
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_TEXTURE, wiiu->menu.texture.surface.image,
wiiu->menu.texture.surface.imageSize);
wiiu->menu.v->pos.x = 0.0f;
wiiu->menu.v->pos.y = 0.0f;
wiiu->menu.v->pos.width = width;
wiiu->menu.v->pos.height = height;
wiiu->menu.v->pos.x = wiiu->vp.x;
wiiu->menu.v->pos.y = wiiu->vp.y;
wiiu->menu.v->pos.width = wiiu->vp.width;
wiiu->menu.v->pos.height = wiiu->vp.height;
wiiu->menu.v->coord.u = 0.0f;
wiiu->menu.v->coord.v = 0.0f;
wiiu->menu.v->coord.width = (float)width / wiiu->texture.surface.width;
wiiu->menu.v->coord.height = (float)height / wiiu->texture.surface.height;
wiiu->menu.v->coord.width = (float)width / wiiu->menu.texture.surface.width;
wiiu->menu.v->coord.height = (float)height / wiiu->menu.texture.surface.height;
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, wiiu->menu.v, 4 * sizeof(*wiiu->menu.v));
}

View File

@ -95,6 +95,8 @@ typedef struct gx_video
bool menu_texture_enable;
video_viewport_t vp;
unsigned scale;
unsigned overscan_correction_top;
unsigned overscan_correction_bottom;
#ifdef HAVE_OVERLAY
struct gx_overlay_data *overlay;
unsigned overlays;
@ -909,7 +911,7 @@ static void convert_texture32(const uint32_t *_src, uint32_t *_dst,
}
}
static void gx_resize(void *data)
static void gx_resize(void *data, settings_t *settings)
{
int gamma;
unsigned degrees;
@ -918,10 +920,9 @@ static void gx_resize(void *data)
float top = 1, bottom = -1, left = -1, right = 1;
int x = 0, y = 0;
gx_video_t *gx = (gx_video_t*)data;
settings_t *settings = config_get_ptr();
const global_t *global = global_get_ptr();
if (!gx)
if (!gx || !settings)
return;
width = gx->vp.full_width;
@ -994,6 +995,24 @@ static void gx_resize(void *data)
}
}
/* Overscan correction */
if ((settings->uints.video_overscan_correction_top > 0) ||
(settings->uints.video_overscan_correction_bottom > 0))
{
float current_aspect = (float)width / (float)height;
int new_height = height - (settings->uints.video_overscan_correction_top +
settings->uints.video_overscan_correction_bottom);
int new_width = (int)((new_height * current_aspect) + 0.5f);
if ((new_height > 0) && (new_width > 0))
{
x += (int)((float)(width - new_width) * 0.5f);
y += (int)settings->uints.video_overscan_correction_top;
width = (unsigned)new_width;
height = (unsigned)new_height;
}
}
if(gx_isValidXOrigin(gx_xOrigin + x))
{
gx_mode.viXOrigin = gx_xOrigin + x;
@ -1506,21 +1525,30 @@ static bool gx_frame(void *data, const void *frame,
video_frame_info_t *video_info)
{
char fps_text_buf[128];
settings_t *settings = config_get_ptr();
gx_video_t *gx = (gx_video_t*)data;
u8 clear_efb = GX_FALSE;
uint32_t level = 0;
fps_text_buf[0] = '\0';
if(!gx || (!frame && !gx->menu_texture_enable))
if(!gx || (!frame && !gx->menu_texture_enable) || !settings)
return true;
if (!frame)
width = height = 4; /* draw a black square in the background */
if ((gx->overscan_correction_top != settings->uints.video_overscan_correction_top) ||
(gx->overscan_correction_bottom != settings->uints.video_overscan_correction_bottom))
{
gx->overscan_correction_top = settings->uints.video_overscan_correction_top;
gx->overscan_correction_bottom = settings->uints.video_overscan_correction_bottom;
gx->should_resize = true;
}
if(gx->should_resize)
{
gx_resize(gx);
gx_resize(gx, settings);
clear_efb = GX_TRUE;
}

View File

@ -909,7 +909,14 @@ static uint32_t gfx_ctx_drm_get_flags(void *data)
if (drm->core_hw_context_enable)
BIT32_SET(flags, GFX_CTX_FLAGS_GL_CORE_CONTEXT);
BIT32_SET(flags, GFX_CTX_FLAGS_SHADERS_GLSL);
if (string_is_equal(video_driver_get_ident(), "glcore"))
{
#ifdef HAVE_SLANG
BIT32_SET(flags, GFX_CTX_FLAGS_SHADERS_SLANG);
#endif
}
else
BIT32_SET(flags, GFX_CTX_FLAGS_SHADERS_GLSL);
return flags;
}

View File

@ -14,6 +14,7 @@
*/
#include <compat/strl.h>
#include <string/stdstring.h>
#ifdef HAVE_CONFIG_H
#include "../../config.h"
@ -154,9 +155,42 @@ error:
}
static void gfx_ctx_khr_display_input_driver(void *data,
const char *name,
const char *joypad_name,
const input_driver_t **input, void **input_data)
{
#ifdef HAVE_X11
settings_t *settings = config_get_ptr();
/* We cannot use the X11 input driver for DRM/KMS */
if (string_is_equal(settings->arrays.input_driver, "x"))
{
#ifdef HAVE_UDEV
{
/* Try to set it to udev instead */
void *udev = input_udev.init(joypad_name);
if (udev)
{
*input = &input_udev;
*input_data = udev;
return;
}
}
#endif
#if defined(__linux__) && !defined(ANDROID)
{
/* Try to set it to linuxraw instead */
void *linuxraw = input_linuxraw.init(joypad_name);
if (linuxraw)
{
*input = &input_linuxraw;
*input_data = linuxraw;
return;
}
}
#endif
}
#endif
*input = NULL;
*input_data = NULL;
}

View File

@ -816,7 +816,12 @@ static uint32_t gfx_ctx_wgl_get_flags(void *data)
}
if (string_is_equal(video_driver_get_ident(), "gl1")) { }
else if (string_is_equal(video_driver_get_ident(), "glcore")) { }
else if (string_is_equal(video_driver_get_ident(), "glcore"))
{
#ifdef HAVE_SLANG
BIT32_SET(flags, GFX_CTX_FLAGS_SHADERS_SLANG);
#endif
}
else
{
#ifdef HAVE_CG

View File

@ -41,15 +41,17 @@ const blissbox_pad_type_t blissbox_pad_types[] =
{"A5200", 6},
{"A5200_TB", 50},
{"A7800", 4},
{"ATARI_KEYPAD", 43},
{"ATARI", 0},
{"ATARI_KEYPAD", 43},
{"ATMARK", 10},
{"BALLY", 42},
{"CD32", 24},
{"CDI", 33},
{"COL", 1},
{"COL_FLASHBACK", 48}, /* 3.0 */
{"DC_ASCI", 15},
{"DC_PAD", 16},
{"DC_TWIN", 35}, /* 3.0 */
{"FC_ARKANOID", 53},
{"FC_NES", 52},
{"GC", 9},
@ -57,7 +59,6 @@ const blissbox_pad_type_t blissbox_pad_types[] =
{"GEN_3", 20},
{"GEN_6", 21},
{"GRAVIS_EX", 38},
{"gx4000", 2},
{"HAMMERHEAD", 40},
{"HPD", 7},
{"INTELI", 14},
@ -66,6 +67,9 @@ const blissbox_pad_type_t blissbox_pad_types[] =
{"N64", 19},
{"NEO", 49},
{"NES", 17},
{"NES_ARKANOID", 30},
{"NES_GUN", 28},
{"NES_POWERPAD", 36},
{"PADDLES", 41},
{"PC_FX", 26},
{"PC_GAMEPAD", 46},
@ -73,27 +77,28 @@ const blissbox_pad_type_t blissbox_pad_types[] =
{"PSX_DS", 115},
{"PSX_DS2", 121},
{"PSX_FS", 83},
{"PSX_JOGCON", 227}, /* 3.0 */
{"PSX_NEGCON", 51},
{"PSX_WHEEL", 12},
{"SAC", 34},
{"SATURN_ANALOG", 8},
{"SATURN_DIGITAL", 3},
{"SMS", 22},
{"SNES", 27},
{"SNESS_NTT", 47}, /* 3.0 */
{"SPEEK", 45},
{"TG16", 23},
{"TG16_6BUTTON", 54}, /* 3.0 */
{"THREE_DO", 25},
{"THREE_DO_ANALOG", 37},
{"VEC", 5},
{"WII_NUNCHUK", 13},
{"ZXSINC", 44},
{"NES_ARKANOID", 30},
{"NES_GUN", 28},
{"NES_POWERPAD", 36},
{"SNES", 27},
{"V_BOY", 29},
{"WII_CLASSIC", 31},
{"WII_DRUM", 55}, /* 3.0 */
{"WII_MPLUS", 32},
{"PSX_JOGCON", 227},
{"WII_NUNCHUK", 13},
{"ZXSINC", 44},
{"gx4000", 2},
{NULL, 0}, /* used to mark unconnected ports, do not remove */
};

View File

@ -602,6 +602,7 @@ void input_overlay_loaded(retro_task_t *task,
overlay_task_data_t *data = (overlay_task_data_t*)task_data;
input_overlay_t *ol = NULL;
const video_overlay_interface_t *iface = NULL;
settings_t *settings = config_get_ptr();
if (err)
return;
@ -642,6 +643,10 @@ void input_overlay_loaded(retro_task_t *task,
overlay_ptr = ol;
free(data);
if (!settings->bools.input_overlay_show_mouse_cursor)
video_driver_hide_mouse();
return;
abort_load:

View File

@ -202,7 +202,7 @@ MSG_HASH(MENU_ENUM_LABEL_CONTENT_DATABASE_DIRECTORY,
MSG_HASH(MENU_ENUM_LABEL_CONTENT_HISTORY_SIZE,
"content_history_size")
MSG_HASH(MENU_ENUM_LABEL_PLAYLIST_ENTRY_REMOVE,
"playlist_entry_remove")
"playlist_entry_remove_enable")
MSG_HASH(MENU_ENUM_LABEL_CONTENT_SETTINGS,
"quick_menu")
MSG_HASH(MENU_ENUM_LABEL_CORE_ASSETS_DIRECTORY,
@ -571,6 +571,8 @@ MSG_HASH(MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS,
"overlay_show_physical_inputs")
MSG_HASH(MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT,
"overlay_show_physical_inputs_port")
MSG_HASH(MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_MOUSE_CURSOR,
"overlay_show_mouse_cursor")
MSG_HASH(MENU_ENUM_LABEL_INPUT_PLAYER_ANALOG_DPAD_MODE,
"input_player%u_analog_dpad_mode")
MSG_HASH(MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR,
@ -1343,6 +1345,10 @@ MSG_HASH(MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_Y,
"video_viewport_custom_y")
MSG_HASH(MENU_ENUM_LABEL_VIDEO_VI_WIDTH,
"video_vi_width")
MSG_HASH(MENU_ENUM_LABEL_VIDEO_OVERSCAN_CORRECTION_TOP,
"video_overscan_correction_top")
MSG_HASH(MENU_ENUM_LABEL_VIDEO_OVERSCAN_CORRECTION_BOTTOM,
"video_overscan_correction_bottom")
MSG_HASH(MENU_ENUM_LABEL_VIDEO_VSYNC,
"video_vsync")
MSG_HASH(MENU_ENUM_LABEL_VIDEO_ADAPTIVE_VSYNC,

View File

@ -1420,6 +1420,10 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS,
"Show Inputs On Overlay"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_SHOW_MOUSE_CURSOR,
"Show Mouse Cursor With Overlay"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT,
"Show Inputs Listen Port"
@ -2174,6 +2178,10 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_QUIT_RETROARCH,
"Quit RetroArch"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_RESTART_RETROARCH,
"Restart RetroArch"
)
#endif
MSG_HASH(
MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ANALOG,
@ -2378,10 +2386,6 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_RESTART_CONTENT,
"Restart"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_RESTART_RETROARCH,
"Restart RetroArch"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_RESUME,
"Resume"
@ -3772,6 +3776,22 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_VI_WIDTH,
"Set VI Screen Width"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_OVERSCAN_CORRECTION_TOP,
"Overscan Correction (Top)"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_VIDEO_OVERSCAN_CORRECTION_TOP,
"Adjust display overscan cropping by reducing image size by specified number of scanlines (taken from top of screen). Note: May introduce scaling artefacts."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_OVERSCAN_CORRECTION_BOTTOM,
"Overscan Correction (Bottom)"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_VIDEO_OVERSCAN_CORRECTION_BOTTOM,
"Adjust display overscan cropping by reducing image size by specified number of scanlines (taken from bottom of screen). Note: May introduce scaling artefacts."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC,
"Vertical Sync (Vsync)"
@ -5516,6 +5536,10 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT,
"Select the port for the overlay to listen to if Show Inputs On Overlay is enabled."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_INPUT_OVERLAY_SHOW_MOUSE_CURSOR,
"Show the mouse cursor when using an onscreen overlay."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_PLAYLISTS_TAB,
"Scanned content matching the database will appear here."
@ -8619,6 +8643,18 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_INLINE_CORE_DISPLAY_NEVER,
"Never"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
"History & Favorites"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_ALL,
"All Playlists"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_NONE,
"OFF"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLIST_SORT_ALPHABETICAL,
"Sort playlists alphabetically"

View File

@ -250,6 +250,7 @@ default_sublabel_macro(action_bind_sublabel_video_message_pos_x, MENU_
default_sublabel_macro(action_bind_sublabel_video_message_pos_y, MENU_ENUM_SUBLABEL_VIDEO_MESSAGE_POS_Y)
default_sublabel_macro(action_bind_sublabel_video_font_size, MENU_ENUM_SUBLABEL_VIDEO_FONT_SIZE)
default_sublabel_macro(action_bind_sublabel_input_overlay_hide_in_menu, MENU_ENUM_SUBLABEL_INPUT_OVERLAY_HIDE_IN_MENU)
default_sublabel_macro(action_bind_sublabel_input_overlay_show_mouse_cursor, MENU_ENUM_SUBLABEL_INPUT_OVERLAY_SHOW_MOUSE_CURSOR)
default_sublabel_macro(action_bind_sublabel_content_collection_list, MENU_ENUM_SUBLABEL_PLAYLISTS_TAB)
default_sublabel_macro(action_bind_sublabel_video_scale_integer, MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER)
default_sublabel_macro(action_bind_sublabel_video_gpu_screenshot, MENU_ENUM_SUBLABEL_VIDEO_GPU_SCREENSHOT)
@ -580,6 +581,11 @@ default_sublabel_macro(action_bind_sublabel_video_3ds_lcd_bottom, MENU
default_sublabel_macro(action_bind_sublabel_video_3ds_display_mode, MENU_ENUM_SUBLABEL_VIDEO_3DS_DISPLAY_MODE)
#endif
#if defined(GEKKO)
default_sublabel_macro(action_bind_sublabel_video_overscan_correction_top, MENU_ENUM_SUBLABEL_VIDEO_OVERSCAN_CORRECTION_TOP)
default_sublabel_macro(action_bind_sublabel_video_overscan_correction_bottom, MENU_ENUM_SUBLABEL_VIDEO_OVERSCAN_CORRECTION_BOTTOM)
#endif
default_sublabel_macro(action_bind_sublabel_playlist_show_sublabels, MENU_ENUM_SUBLABEL_PLAYLIST_SHOW_SUBLABELS)
default_sublabel_macro(action_bind_sublabel_menu_rgui_border_filler_enable, MENU_ENUM_SUBLABEL_MENU_RGUI_BORDER_FILLER_ENABLE)
default_sublabel_macro(action_bind_sublabel_menu_rgui_border_filler_thickness_enable, MENU_ENUM_SUBLABEL_MENU_RGUI_BORDER_FILLER_THICKNESS_ENABLE)
@ -2018,6 +2024,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_overlay_show_physical_inputs_port);
break;
case MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_MOUSE_CURSOR:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_overlay_show_mouse_cursor);
break;
case MENU_ENUM_LABEL_VIDEO_FONT_SIZE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_font_size);
break;
@ -2502,6 +2511,14 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_VIDEO_3DS_DISPLAY_MODE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_3ds_display_mode);
break;
#endif
#if defined(GEKKO)
case MENU_ENUM_LABEL_VIDEO_OVERSCAN_CORRECTION_TOP:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_overscan_correction_top);
break;
case MENU_ENUM_LABEL_VIDEO_OVERSCAN_CORRECTION_BOTTOM:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_overscan_correction_bottom);
break;
#endif
case MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_LOAD:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheat_apply_after_load);

View File

@ -63,18 +63,6 @@
#include <gfx/scaler/scaler.h>
#include <features/features_cpu.h>
#if defined(GEKKO)
#define RGUI_TERM_START_X(fb_width) (fb_width / 21)
#define RGUI_TERM_START_Y(fb_height) (fb_height / 9)
#define RGUI_TERM_WIDTH(fb_width) (((fb_width - RGUI_TERM_START_X(fb_width) - RGUI_TERM_START_X(fb_width)) / (FONT_WIDTH_STRIDE)))
#define RGUI_TERM_HEIGHT(fb_height) (((fb_height - RGUI_TERM_START_Y(fb_height) - RGUI_TERM_START_Y(fb_height)) / (FONT_HEIGHT_STRIDE)))
#else
#define RGUI_TERM_START_X(fb_width) rgui_term_layout.start_x
#define RGUI_TERM_START_Y(fb_height) rgui_term_layout.start_y
#define RGUI_TERM_WIDTH(fb_width) rgui_term_layout.width
#define RGUI_TERM_HEIGHT(fb_height) rgui_term_layout.height
#endif
#define MAX_FB_WIDTH 426
#define RGUI_ENTRY_VALUE_MAXLEN 19
@ -533,7 +521,7 @@ typedef struct
unsigned particle_effect;
bool extended_ascii_enable;
float scroll_y;
char *msgbox;
char msgbox[1024];
unsigned color_theme;
rgui_colors_t colors;
bool is_playlist;
@ -761,7 +749,7 @@ typedef struct
unsigned width;
unsigned height;
bool is_valid;
char *path;
char path[PATH_MAX_LENGTH];
uint16_t *data;
} thumbnail_t;
@ -771,7 +759,7 @@ static thumbnail_t fs_thumbnail = {
0,
0,
false,
NULL,
{0},
NULL
};
@ -781,7 +769,7 @@ static thumbnail_t mini_thumbnail = {
0,
0,
false,
NULL,
{0},
NULL
};
@ -791,7 +779,7 @@ static thumbnail_t mini_left_thumbnail = {
0,
0,
false,
NULL,
{0},
NULL
};
@ -935,27 +923,27 @@ static uint16_t (*argb32_to_pixel_platform_format)(uint32_t col) = argb32_to_rgb
static void rgui_set_pixel_format_function(void)
{
const char *driver_ident = video_driver_get_ident();
/* Default fallback... */
if (string_is_empty(driver_ident))
{
argb32_to_pixel_platform_format = argb32_to_rgba4444;
return;
}
if ( string_is_equal(driver_ident, "ps2")) /* PS2 */
argb32_to_pixel_platform_format = argb32_to_abgr1555;
else if (string_is_equal(driver_ident, "gx")) /* GEKKO */
argb32_to_pixel_platform_format = argb32_to_rgb5a3;
else if (string_is_equal(driver_ident, "psp1")) /* PSP */
argb32_to_pixel_platform_format = argb32_to_abgr4444;
else if (string_is_equal(driver_ident, "d3d10") || /* D3D10/11/12 */
string_is_equal(driver_ident, "d3d11") ||
string_is_equal(driver_ident, "d3d12"))
argb32_to_pixel_platform_format = argb32_to_bgra4444;
else
argb32_to_pixel_platform_format = argb32_to_rgba4444;
const char *driver_ident = video_driver_get_ident();
/* Default fallback... */
if (string_is_empty(driver_ident))
{
argb32_to_pixel_platform_format = argb32_to_rgba4444;
return;
}
if ( string_is_equal(driver_ident, "ps2")) /* PS2 */
argb32_to_pixel_platform_format = argb32_to_abgr1555;
else if (string_is_equal(driver_ident, "gx")) /* GEKKO */
argb32_to_pixel_platform_format = argb32_to_rgb5a3;
else if (string_is_equal(driver_ident, "psp1")) /* PSP */
argb32_to_pixel_platform_format = argb32_to_abgr4444;
else if (string_is_equal(driver_ident, "d3d10") || /* D3D10/11/12 */
string_is_equal(driver_ident, "d3d11") ||
string_is_equal(driver_ident, "d3d12"))
argb32_to_pixel_platform_format = argb32_to_bgra4444;
else
argb32_to_pixel_platform_format = argb32_to_rgba4444;
}
/* ==============================
@ -1603,13 +1591,12 @@ static bool request_thumbnail(
thumbnail->width = 0;
thumbnail->height = 0;
thumbnail->is_valid = false;
free(thumbnail->path);
thumbnail->path = NULL;
thumbnail->path[0] = '\0';
/* Ensure that new path is valid... */
if (!string_is_empty(path))
{
thumbnail->path = strdup(path);
strlcpy(thumbnail->path, path, sizeof(thumbnail->path));
if (path_is_valid(path))
{
/* Would like to cancel any existing image load tasks
@ -1992,25 +1979,25 @@ static void rgui_render_mini_thumbnail(rgui_t *rgui, thumbnail_t *thumbnail, enu
menu_display_get_fb_size(&fb_width, &fb_height, &fb_pitch);
term_width = RGUI_TERM_WIDTH(fb_width) * FONT_WIDTH_STRIDE;
term_height = RGUI_TERM_HEIGHT(fb_height) * FONT_HEIGHT_STRIDE;
term_width = rgui_term_layout.width * FONT_WIDTH_STRIDE;
term_height = rgui_term_layout.height * FONT_HEIGHT_STRIDE;
/* Sanity check (this can never, ever happen, so just return
* instead of trying to crop the thumbnail image...) */
if ((thumbnail_fullwidth > term_width) || (thumbnail->height > term_height))
return;
fb_x_offset = (RGUI_TERM_START_X(fb_width) + term_width) -
fb_x_offset = (rgui_term_layout.start_x + term_width) -
(thumbnail->width + ((thumbnail_fullwidth - thumbnail->width) >> 1));
if (((thumbnail_id == MENU_THUMBNAIL_RIGHT) && !settings->bools.menu_rgui_swap_thumbnails) ||
((thumbnail_id == MENU_THUMBNAIL_LEFT) && settings->bools.menu_rgui_swap_thumbnails))
{
fb_y_offset = RGUI_TERM_START_Y(fb_height) + ((thumbnail->max_height - thumbnail->height) >> 1);
fb_y_offset = rgui_term_layout.start_y + ((thumbnail->max_height - thumbnail->height) >> 1);
}
else
{
fb_y_offset = (RGUI_TERM_START_Y(fb_height) + term_height) -
fb_y_offset = (rgui_term_layout.start_y + term_height) -
(thumbnail->height + ((thumbnail->max_height - thumbnail->height) >> 1));
}
@ -2656,12 +2643,14 @@ static void rgui_set_message(void *data, const char *message)
{
rgui_t *rgui = (rgui_t*)data;
if (!rgui || !message || !*message)
if (!rgui || !message)
return;
if (!string_is_empty(rgui->msgbox))
free(rgui->msgbox);
rgui->msgbox = strdup(message);
rgui->msgbox[0] = '\0';
if (!string_is_empty(message))
strlcpy(rgui->msgbox, message, sizeof(rgui->msgbox));
rgui->force_redraw = true;
}
@ -2694,13 +2683,13 @@ static void rgui_render_messagebox(rgui_t *rgui, const char *message)
char *msg = list->elems[i].data;
unsigned msglen = (unsigned)utf8len(msg);
if (msglen > RGUI_TERM_WIDTH(fb_width))
if (msglen > rgui_term_layout.width)
{
msg[RGUI_TERM_WIDTH(fb_width) - 2] = '.';
msg[RGUI_TERM_WIDTH(fb_width) - 1] = '.';
msg[RGUI_TERM_WIDTH(fb_width) - 0] = '.';
msg[RGUI_TERM_WIDTH(fb_width) + 1] = '\0';
msglen = RGUI_TERM_WIDTH(fb_width);
msg[rgui_term_layout.width - 2] = '.';
msg[rgui_term_layout.width - 1] = '.';
msg[rgui_term_layout.width - 0] = '.';
msg[rgui_term_layout.width + 1] = '\0';
msglen = rgui_term_layout.width;
}
line_width = msglen * FONT_WIDTH_STRIDE - 1 + 6 + 10;
@ -3170,13 +3159,13 @@ static void rgui_render(void *data, bool is_idle)
}
/* Do not scroll if all items are visible. */
if (menu_entries_get_size() <= RGUI_TERM_HEIGHT(fb_height))
if (menu_entries_get_size() <= rgui_term_layout.height)
{
size_t start = 0;
menu_entries_ctl(MENU_ENTRIES_CTL_SET_START, &start);
}
bottom = (int)(menu_entries_get_size() - RGUI_TERM_HEIGHT(fb_height));
bottom = (int)(menu_entries_get_size() - rgui_term_layout.height);
menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &old_start);
if (old_start > (unsigned)bottom)
@ -3186,8 +3175,8 @@ static void rgui_render(void *data, bool is_idle)
entries_end = menu_entries_get_size();
end = ((old_start + RGUI_TERM_HEIGHT(fb_height)) <= (entries_end)) ?
old_start + RGUI_TERM_HEIGHT(fb_height) : entries_end;
end = ((old_start + rgui_term_layout.height) <= (entries_end)) ?
old_start + rgui_term_layout.height : entries_end;
/* Render background */
rgui_render_background();
@ -3228,13 +3217,13 @@ static void rgui_render(void *data, bool is_idle)
{
/* Format thumbnail title */
ticker.s = thumbnail_title_buf;
ticker.len = RGUI_TERM_WIDTH(fb_width) - 10;
ticker.len = rgui_term_layout.width - 10;
ticker.str = thumbnail_title;
ticker.selected = true;
menu_animation_ticker(&ticker);
title_width = (unsigned)(utf8len(thumbnail_title_buf) * FONT_WIDTH_STRIDE);
title_x = RGUI_TERM_START_X(fb_width) + ((RGUI_TERM_WIDTH(fb_width) * FONT_WIDTH_STRIDE) - title_width) / 2;
title_x = rgui_term_layout.start_x + ((rgui_term_layout.width * FONT_WIDTH_STRIDE) - title_width) / 2;
/* Draw thumbnail title background */
rgui_fill_rect(rgui_frame_buf.data, fb_width, fb_height,
@ -3254,10 +3243,10 @@ static void rgui_render(void *data, bool is_idle)
size_t title_max_len;
size_t title_len;
unsigned title_x;
unsigned title_y = RGUI_TERM_START_Y(fb_height) - FONT_HEIGHT_STRIDE;
unsigned term_end_x = RGUI_TERM_START_X(fb_width) + (RGUI_TERM_WIDTH(fb_width) * FONT_WIDTH_STRIDE);
unsigned title_y = rgui_term_layout.start_y - FONT_HEIGHT_STRIDE;
unsigned term_end_x = rgui_term_layout.start_x + (rgui_term_layout.width * FONT_WIDTH_STRIDE);
unsigned timedate_x = term_end_x - (5 * FONT_WIDTH_STRIDE);
unsigned core_name_len = ((timedate_x - RGUI_TERM_START_X(fb_width)) / FONT_WIDTH_STRIDE) - 3;
unsigned core_name_len = ((timedate_x - rgui_term_layout.start_x) / FONT_WIDTH_STRIDE) - 3;
bool show_mini_thumbnails = rgui->is_playlist && settings->bools.menu_rgui_inline_thumbnails;
bool show_thumbnail = false;
bool show_left_thumbnail = false;
@ -3286,7 +3275,7 @@ static void rgui_render(void *data, bool is_idle)
* the vertical centre of RGUI's 'terminal'
* (required to determine whether a particular entry
* is adjacent to the 'right' or 'left' thumbnail) */
term_mid_point = (unsigned)((RGUI_TERM_HEIGHT(fb_height) * 0.5f) + 0.5f) - 1;
term_mid_point = (unsigned)((rgui_term_layout.height * 0.5f) + 0.5f) - 1;
}
/* Show battery indicator, if required */
@ -3354,7 +3343,7 @@ static void rgui_render(void *data, bool is_idle)
}
/* Print title */
title_max_len = RGUI_TERM_WIDTH(fb_width) - 5 - (powerstate_len > 5 ? powerstate_len : 5);
title_max_len = rgui_term_layout.width - 5 - (powerstate_len > 5 ? powerstate_len : 5);
title_buf[0] = '\0';
ticker.s = title_buf;
@ -3367,8 +3356,8 @@ static void rgui_render(void *data, bool is_idle)
string_to_upper(title_buf);
title_len = utf8len(title_buf);
title_x = RGUI_TERM_START_X(fb_width) +
(RGUI_TERM_WIDTH(fb_width) - title_len) * FONT_WIDTH_STRIDE / 2;
title_x = rgui_term_layout.start_x +
(rgui_term_layout.width - title_len) * FONT_WIDTH_STRIDE / 2;
/* Title is always centred, unless it is long enough
* to infringe upon the battery indicator, in which case
@ -3381,8 +3370,8 @@ static void rgui_render(void *data, bool is_idle)
title_buf, rgui->colors.title_color, rgui->colors.shadow_color);
/* Print menu entries */
x = RGUI_TERM_START_X(fb_width);
y = RGUI_TERM_START_Y(fb_height);
x = rgui_term_layout.start_x;
y = rgui_term_layout.start_y;
menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &new_start);
@ -3417,13 +3406,13 @@ static void rgui_render(void *data, bool is_idle)
menu_entry_get_value(&entry, &entry_value);
/* Get base length of entry title field */
entry_title_max_len = RGUI_TERM_WIDTH(fb_width) - (1 + 2);
entry_title_max_len = rgui_term_layout.width - (1 + 2);
/* If showing mini thumbnails, reduce title field length accordingly */
if (show_mini_thumbnails)
{
unsigned term_offset = settings->bools.menu_rgui_swap_thumbnails ?
(RGUI_TERM_HEIGHT(fb_height) - (i - new_start) - 1) : (i - new_start);
(rgui_term_layout.height - (i - new_start) - 1) : (i - new_start);
unsigned thumbnail_width = 0;
/* Note:
@ -3436,7 +3425,7 @@ static void rgui_render(void *data, bool is_idle)
* standard layout (even though it always will...),
* so have to check whether there are an odd or even
* number of entries... */
if((RGUI_TERM_HEIGHT(fb_height) & 1) == 0)
if((rgui_term_layout.height & 1) == 0)
{
/* Even number of entries */
if ((show_thumbnail && (term_offset <= term_mid_point)) ||
@ -3535,9 +3524,9 @@ static void rgui_render(void *data, bool is_idle)
blit_line(
fb_width,
RGUI_TERM_START_X(fb_width) + FONT_WIDTH_STRIDE,
(RGUI_TERM_HEIGHT(fb_height) * FONT_HEIGHT_STRIDE) +
RGUI_TERM_START_Y(fb_height) + 2, sublabel_buf,
rgui_term_layout.start_x + FONT_WIDTH_STRIDE,
(rgui_term_layout.height * FONT_HEIGHT_STRIDE) +
rgui_term_layout.start_y + 2, sublabel_buf,
rgui->colors.hover_color, rgui->colors.shadow_color);
}
else if (settings->bools.menu_core_enable)
@ -3557,9 +3546,9 @@ static void rgui_render(void *data, bool is_idle)
blit_line(
fb_width,
RGUI_TERM_START_X(fb_width) + FONT_WIDTH_STRIDE,
(RGUI_TERM_HEIGHT(fb_height) * FONT_HEIGHT_STRIDE) +
RGUI_TERM_START_Y(fb_height) + 2, core_title_buf,
rgui_term_layout.start_x + FONT_WIDTH_STRIDE,
(rgui_term_layout.height * FONT_HEIGHT_STRIDE) +
rgui_term_layout.start_y + 2, core_title_buf,
rgui->colors.hover_color, rgui->colors.shadow_color);
}
@ -3580,8 +3569,8 @@ static void rgui_render(void *data, bool is_idle)
blit_line(
fb_width,
timedate_x,
(RGUI_TERM_HEIGHT(fb_height) * FONT_HEIGHT_STRIDE) +
RGUI_TERM_START_Y(fb_height) + 2, timedate,
(rgui_term_layout.height * FONT_HEIGHT_STRIDE) +
rgui_term_layout.start_y + 2, timedate,
rgui->colors.hover_color, rgui->colors.shadow_color);
}
}
@ -3589,8 +3578,7 @@ static void rgui_render(void *data, bool is_idle)
if (!string_is_empty(rgui->msgbox))
{
rgui_render_messagebox(rgui, rgui->msgbox);
free(rgui->msgbox);
rgui->msgbox = NULL;
rgui->msgbox[0] = '\0';
rgui->force_redraw = true;
}
@ -3634,10 +3622,7 @@ static void rgui_thumbnail_free(thumbnail_t *thumbnail)
thumbnail->width = 0;
thumbnail->height = 0;
thumbnail->is_valid = false;
if (!string_is_empty(thumbnail->path))
free(thumbnail->path);
thumbnail->path = NULL;
thumbnail->path[0] = '\0';
if (thumbnail->data)
free(thumbnail->data);
@ -3940,8 +3925,8 @@ static void *rgui_init(void **userdata, bool video_is_threaded)
rgui->menu_title[0] = '\0';
rgui->menu_sublabel[0] = '\0';
/* Set pixel format conversion function */
rgui_set_pixel_format_function();
/* Set pixel format conversion function */
rgui_set_pixel_format_function();
/* Cache initial video settings */
rgui_get_video_config(&rgui->content_video_settings);
@ -4281,16 +4266,14 @@ static void rgui_update_thumbnail_image(void *userdata)
mini_thumbnail.width = 0;
mini_thumbnail.height = 0;
mini_thumbnail.is_valid = false;
free(mini_thumbnail.path);
mini_thumbnail.path = NULL;
mini_thumbnail.path[0] = '\0';
}
else
{
fs_thumbnail.width = 0;
fs_thumbnail.height = 0;
fs_thumbnail.is_valid = false;
free(fs_thumbnail.path);
fs_thumbnail.path = NULL;
fs_thumbnail.path[0] = '\0';
}
}
@ -4316,20 +4299,17 @@ static void rgui_refresh_thumbnail_image(void *userdata)
fs_thumbnail.width = 0;
fs_thumbnail.height = 0;
fs_thumbnail.is_valid = false;
free(fs_thumbnail.path);
fs_thumbnail.path = NULL;
fs_thumbnail.path[0] = '\0';
mini_thumbnail.width = 0;
mini_thumbnail.height = 0;
mini_thumbnail.is_valid = false;
free(mini_thumbnail.path);
mini_thumbnail.path = NULL;
mini_thumbnail.path[0] = '\0';
mini_left_thumbnail.width = 0;
mini_left_thumbnail.height = 0;
mini_left_thumbnail.is_valid = false;
free(mini_left_thumbnail.path);
mini_left_thumbnail.path = NULL;
mini_left_thumbnail.path[0] = '\0';
/* Only load thumbnails if currently viewing a
* playlist (note that thumbnails are loaded
@ -4393,8 +4373,7 @@ static void rgui_update_menu_sublabel(rgui_t *rgui)
static void rgui_navigation_set(void *data, bool scroll)
{
size_t start, fb_pitch;
unsigned fb_width, fb_height;
size_t start;
bool do_set_start = false;
size_t end = menu_entries_get_size();
size_t selection = menu_navigation_get_selection();
@ -4409,23 +4388,20 @@ static void rgui_navigation_set(void *data, bool scroll)
if (!scroll)
return;
menu_display_get_fb_size(&fb_width, &fb_height,
&fb_pitch);
if (selection < RGUI_TERM_HEIGHT(fb_height) /2)
if (selection < rgui_term_layout.height /2)
{
start = 0;
do_set_start = true;
}
else if (selection >= (RGUI_TERM_HEIGHT(fb_height) /2)
&& selection < (end - RGUI_TERM_HEIGHT(fb_height) /2))
else if (selection >= (rgui_term_layout.height /2)
&& selection < (end - rgui_term_layout.height /2))
{
start = selection - RGUI_TERM_HEIGHT(fb_height) /2;
start = selection - rgui_term_layout.height /2;
do_set_start = true;
}
else if (selection >= (end - RGUI_TERM_HEIGHT(fb_height) /2))
else if (selection >= (end - rgui_term_layout.height /2))
{
start = end - RGUI_TERM_HEIGHT(fb_height);
start = end - rgui_term_layout.height;
do_set_start = true;
}

View File

@ -349,6 +349,14 @@ enum playlist_inline_core_display_type
PLAYLIST_INLINE_CORE_DISPLAY_LAST
};
enum playlist_entry_remove_enable_type
{
PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV = 0,
PLAYLIST_ENTRY_REMOVE_ENABLE_ALL,
PLAYLIST_ENTRY_REMOVE_ENABLE_NONE,
PLAYLIST_ENTRY_REMOVE_ENABLE_LAST
};
typedef uintptr_t menu_texture_item;
typedef struct menu_display_ctx_clearcolor

View File

@ -2042,13 +2042,34 @@ static int menu_displaylist_parse_horizontal_content_actions(
MENU_ENUM_LABEL_RENAME_ENTRY,
FILE_TYPE_PLAYLIST_ENTRY, 0, idx);
if (settings->bools.playlist_entry_remove &&
!settings->bools.kiosk_mode_enable)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY),
msg_hash_to_str(MENU_ENUM_LABEL_DELETE_ENTRY),
MENU_ENUM_LABEL_DELETE_ENTRY,
MENU_SETTING_ACTION_DELETE_ENTRY, 0, 0);
if (!settings->bools.kiosk_mode_enable)
{
bool remove_entry_enabled = false;
if (settings->uints.playlist_entry_remove_enable == PLAYLIST_ENTRY_REMOVE_ENABLE_ALL)
remove_entry_enabled = true;
else if (settings->uints.playlist_entry_remove_enable == PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV)
{
char system[PATH_MAX_LENGTH];
system[0] = '\0';
menu_driver_get_thumbnail_system(system, sizeof(system));
if (!string_is_empty(system))
remove_entry_enabled = string_is_equal(system, "history") ||
string_is_equal(system, "favorites") ||
string_is_equal(system, "images_history") ||
string_is_equal(system, "music_history") ||
string_is_equal(system, "video_history");
}
if (remove_entry_enabled)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY),
msg_hash_to_str(MENU_ENUM_LABEL_DELETE_ENTRY),
MENU_ENUM_LABEL_DELETE_ENTRY,
MENU_SETTING_ACTION_DELETE_ENTRY, 0, 0);
}
if (settings->bools.quick_menu_show_add_to_favorites)
{
@ -3889,6 +3910,7 @@ unsigned menu_displaylist_build_list(file_list_t *list, enum menu_displaylist_ct
{MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU, PARSE_ONLY_BOOL },
{MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS, PARSE_ONLY_BOOL },
{MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT,PARSE_ONLY_BOOL },
{MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_MOUSE_CURSOR, PARSE_ONLY_BOOL },
{MENU_ENUM_LABEL_OVERLAY_PRESET, PARSE_ONLY_PATH },
{MENU_ENUM_LABEL_OVERLAY_OPACITY, PARSE_ONLY_FLOAT },
{MENU_ENUM_LABEL_OVERLAY_SCALE, PARSE_ONLY_FLOAT },
@ -5627,7 +5649,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
{MENU_ENUM_LABEL_HISTORY_LIST_ENABLE, PARSE_ONLY_BOOL},
{MENU_ENUM_LABEL_CONTENT_HISTORY_SIZE, PARSE_ONLY_UINT},
{MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME, PARSE_ONLY_BOOL},
{MENU_ENUM_LABEL_PLAYLIST_ENTRY_REMOVE, PARSE_ONLY_BOOL},
{MENU_ENUM_LABEL_PLAYLIST_ENTRY_REMOVE, PARSE_ONLY_UINT},
{MENU_ENUM_LABEL_PLAYLIST_SORT_ALPHABETICAL, PARSE_ONLY_BOOL},
{MENU_ENUM_LABEL_PLAYLIST_USE_OLD_FORMAT, PARSE_ONLY_BOOL},
{MENU_ENUM_LABEL_PLAYLIST_SHOW_INLINE_CORE_NAME, PARSE_ONLY_UINT},
@ -5914,6 +5936,12 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_VIDEO_VFILTER,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_VIDEO_OVERSCAN_CORRECTION_TOP,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_VIDEO_OVERSCAN_CORRECTION_BOTTOM,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_VIDEO_ROTATION,
PARSE_ONLY_UINT, false);

View File

@ -3862,6 +3862,36 @@ static void setting_get_string_representation_uint_playlist_inline_core_display_
}
}
static void setting_get_string_representation_uint_playlist_entry_remove_enable(
rarch_setting_t *setting,
char *s, size_t len)
{
if (!setting)
return;
switch (*setting->value.target.unsigned_integer)
{
case PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV:
strlcpy(s,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV),
len);
break;
case PLAYLIST_ENTRY_REMOVE_ENABLE_ALL:
strlcpy(s,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_ALL),
len);
break;
case PLAYLIST_ENTRY_REMOVE_ENABLE_NONE:
strlcpy(s,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_NONE),
len);
break;
}
}
#if defined(_3DS)
static void setting_get_string_representation_uint_video_3ds_display_mode(
rarch_setting_t *setting,
@ -6649,7 +6679,7 @@ static bool setting_append_list(
&subgroup_info,
parent_group);
#if !defined(IOS)
#if !defined(IOS) && !defined(HAVE_LAKKA)
if (frontend_driver_has_fork())
{
CONFIG_ACTION(
@ -7293,13 +7323,13 @@ static bool setting_append_list(
bool_entries[0].target = &settings->bools.video_shared_context;
bool_entries[0].name_enum_idx = MENU_ENUM_LABEL_VIDEO_SHARED_CONTEXT;
bool_entries[0].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_VIDEO_SHARED_CONTEXT;
bool_entries[0].default_value = video_shared_context;
bool_entries[0].default_value = DEFAULT_VIDEO_SHARED_CONTEXT;
bool_entries[0].flags = SD_FLAG_ADVANCED;
bool_entries[1].target = &settings->bools.load_dummy_on_core_shutdown;
bool_entries[1].name_enum_idx = MENU_ENUM_LABEL_DUMMY_ON_CORE_SHUTDOWN;
bool_entries[1].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_DUMMY_ON_CORE_SHUTDOWN;
bool_entries[1].default_value = load_dummy_on_core_shutdown;
bool_entries[1].default_value = DEFAULT_LOAD_DUMMY_ON_CORE_SHUTDOWN;
bool_entries[1].flags = SD_FLAG_ADVANCED;
bool_entries[2].target = &settings->bools.set_supports_no_game_enable;
@ -7357,13 +7387,13 @@ static bool setting_append_list(
bool_entries[0].target = &settings->bools.config_save_on_exit;
bool_entries[0].name_enum_idx = MENU_ENUM_LABEL_CONFIG_SAVE_ON_EXIT;
bool_entries[0].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_CONFIG_SAVE_ON_EXIT;
bool_entries[0].default_value = config_save_on_exit;
bool_entries[0].default_value = DEFAULT_CONFIG_SAVE_ON_EXIT;
bool_entries[0].flags = SD_FLAG_NONE;
bool_entries[1].target = &settings->bools.show_hidden_files;
bool_entries[1].name_enum_idx = MENU_ENUM_LABEL_SHOW_HIDDEN_FILES;
bool_entries[1].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_SHOW_HIDDEN_FILES;
bool_entries[1].default_value = show_hidden_files;
bool_entries[1].default_value = DEFAULT_SHOW_HIDDEN_FILES;
bool_entries[1].flags = SD_FLAG_NONE;
bool_entries[2].target = &settings->bools.game_specific_options;
@ -7413,7 +7443,7 @@ static bool setting_append_list(
&settings->bools.video_shader_enable,
MENU_ENUM_LABEL_VIDEO_SHADERS_ENABLE,
MENU_ENUM_LABEL_VALUE_VIDEO_SHADERS_ENABLE,
shader_enable,
DEFAULT_SHADER_ENABLE,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -7552,7 +7582,7 @@ static bool setting_append_list(
bool_entries[2].target = &settings->bools.block_sram_overwrite;
bool_entries[2].name_enum_idx = MENU_ENUM_LABEL_BLOCK_SRAM_OVERWRITE;
bool_entries[2].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_BLOCK_SRAM_OVERWRITE;
bool_entries[2].default_value = block_sram_overwrite;
bool_entries[2].default_value = DEFAULT_BLOCK_SRAM_OVERWRITE;
bool_entries[2].flags = SD_FLAG_NONE;
bool_entries[3].target = &settings->bools.savestate_auto_index;
@ -7627,7 +7657,7 @@ static bool setting_append_list(
&settings->uints.autosave_interval,
MENU_ENUM_LABEL_AUTOSAVE_INTERVAL,
MENU_ENUM_LABEL_VALUE_AUTOSAVE_INTERVAL,
autosave_interval,
DEFAULT_AUTOSAVE_INTERVAL,
&group_info,
&subgroup_info,
parent_group,
@ -7703,7 +7733,7 @@ static bool setting_append_list(
&settings->bools.rewind_enable,
MENU_ENUM_LABEL_REWIND_ENABLE,
MENU_ENUM_LABEL_VALUE_REWIND_ENABLE,
rewind_enable,
DEFAULT_REWIND_ENABLE,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -7719,7 +7749,7 @@ static bool setting_append_list(
&settings->uints.rewind_granularity,
MENU_ENUM_LABEL_REWIND_GRANULARITY,
MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY,
rewind_granularity,
DEFAULT_REWIND_GRANULARITY,
&group_info,
&subgroup_info,
parent_group,
@ -7734,7 +7764,7 @@ static bool setting_append_list(
&settings->sizes.rewind_buffer_size,
MENU_ENUM_LABEL_REWIND_BUFFER_SIZE,
MENU_ENUM_LABEL_VALUE_REWIND_BUFFER_SIZE,
rewind_buffer_size,
DEFAULT_REWIND_BUFFER_SIZE,
&group_info,
&subgroup_info,
parent_group,
@ -7748,7 +7778,7 @@ static bool setting_append_list(
&settings->uints.rewind_buffer_size_step,
MENU_ENUM_LABEL_REWIND_BUFFER_SIZE_STEP,
MENU_ENUM_LABEL_VALUE_REWIND_BUFFER_SIZE_STEP,
rewind_buffer_size_step,
DEFAULT_REWIND_BUFFER_SIZE_STEP,
&group_info,
&subgroup_info,
parent_group,
@ -7774,7 +7804,7 @@ static bool setting_append_list(
&settings->bools.apply_cheats_after_load,
MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_LOAD,
MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_AFTER_LOAD,
apply_cheats_after_load,
DEFAULT_APPLY_CHEATS_AFTER_LOAD,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -7789,7 +7819,7 @@ static bool setting_append_list(
&settings->bools.apply_cheats_after_toggle,
MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_TOGGLE,
MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_AFTER_TOGGLE,
apply_cheats_after_toggle,
DEFAULT_APPLY_CHEATS_AFTER_TOGGLE,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -8220,7 +8250,7 @@ static bool setting_append_list(
&settings->bools.video_fps_show,
MENU_ENUM_LABEL_FPS_SHOW,
MENU_ENUM_LABEL_VALUE_FPS_SHOW,
fps_show,
DEFAULT_FPS_SHOW,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -8235,7 +8265,7 @@ static bool setting_append_list(
&settings->bools.video_memory_show,
MENU_ENUM_LABEL_MEMORY_SHOW,
MENU_ENUM_LABEL_VALUE_MEMORY_SHOW,
memory_show,
DEFAULT_MEMORY_SHOW,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -8250,7 +8280,7 @@ static bool setting_append_list(
&settings->bools.video_statistics_show,
MENU_ENUM_LABEL_STATISTICS_SHOW,
MENU_ENUM_LABEL_VALUE_STATISTICS_SHOW,
statistics_show,
DEFAULT_STATISTICS_SHOW,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -8265,7 +8295,7 @@ static bool setting_append_list(
&settings->bools.video_framecount_show,
MENU_ENUM_LABEL_FRAMECOUNT_SHOW,
MENU_ENUM_LABEL_VALUE_FRAMECOUNT_SHOW,
framecount_show,
DEFAULT_FRAMECOUNT_SHOW,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -8290,7 +8320,7 @@ static bool setting_append_list(
&settings->uints.video_monitor_index,
MENU_ENUM_LABEL_VIDEO_MONITOR_INDEX,
MENU_ENUM_LABEL_VALUE_VIDEO_MONITOR_INDEX,
monitor_index,
DEFAULT_MONITOR_INDEX,
&group_info,
&subgroup_info,
parent_group,
@ -8308,7 +8338,7 @@ static bool setting_append_list(
&settings->bools.video_fullscreen,
MENU_ENUM_LABEL_VIDEO_FULLSCREEN,
MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN,
fullscreen,
DEFAULT_FULLSCREEN,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -8327,7 +8357,7 @@ static bool setting_append_list(
&settings->bools.video_windowed_fullscreen,
MENU_ENUM_LABEL_VIDEO_WINDOWED_FULLSCREEN,
MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN,
windowed_fullscreen,
DEFAULT_WINDOWED_FULLSCREEN,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -8343,7 +8373,7 @@ static bool setting_append_list(
&settings->uints.video_fullscreen_x,
MENU_ENUM_LABEL_VIDEO_FULLSCREEN_X,
MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN_X,
fullscreen_x,
DEFAULT_FULLSCREEN_X,
&group_info,
&subgroup_info,
parent_group,
@ -8358,7 +8388,7 @@ static bool setting_append_list(
&settings->uints.video_fullscreen_y,
MENU_ENUM_LABEL_VIDEO_FULLSCREEN_Y,
MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN_Y,
fullscreen_y,
DEFAULT_FULLSCREEN_Y,
&group_info,
&subgroup_info,
parent_group,
@ -8453,7 +8483,7 @@ static bool setting_append_list(
&settings->uints.video_aspect_ratio_idx,
MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_INDEX,
MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_INDEX,
aspect_ratio_idx,
DEFAULT_ASPECT_RATIO_IDX,
&group_info,
&subgroup_info,
parent_group,
@ -8602,7 +8632,7 @@ static bool setting_append_list(
&settings->floats.video_scale,
MENU_ENUM_LABEL_VIDEO_SCALE,
MENU_ENUM_LABEL_VALUE_VIDEO_SCALE,
scale,
DEFAULT_SCALE,
"%.1fx",
&group_info,
&subgroup_info,
@ -8617,7 +8647,7 @@ static bool setting_append_list(
&settings->uints.window_position_width,
MENU_ENUM_LABEL_VIDEO_WINDOW_WIDTH,
MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_WIDTH,
window_width,
DEFAULT_WINDOW_WIDTH,
&group_info,
&subgroup_info,
parent_group,
@ -8631,7 +8661,7 @@ static bool setting_append_list(
&settings->uints.window_position_height,
MENU_ENUM_LABEL_VIDEO_WINDOW_HEIGHT,
MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_HEIGHT,
window_height,
DEFAULT_WINDOW_HEIGHT,
&group_info,
&subgroup_info,
parent_group,
@ -8645,7 +8675,7 @@ static bool setting_append_list(
&settings->uints.video_window_opacity,
MENU_ENUM_LABEL_VIDEO_WINDOW_OPACITY,
MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_OPACITY,
window_opacity,
DEFAULT_WINDOW_OPACITY,
&group_info,
&subgroup_info,
parent_group,
@ -8662,7 +8692,7 @@ static bool setting_append_list(
&settings->bools.video_window_show_decorations,
MENU_ENUM_LABEL_VIDEO_WINDOW_SHOW_DECORATIONS,
MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_SHOW_DECORATIONS,
window_decorations,
DEFAULT_WINDOW_DECORATIONS,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -8693,7 +8723,7 @@ static bool setting_append_list(
&settings->bools.video_scale_integer,
MENU_ENUM_LABEL_VIDEO_SCALE_INTEGER,
MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER,
scale_integer,
DEFAULT_SCALE_INTEGER,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -8713,7 +8743,7 @@ static bool setting_append_list(
&settings->uints.video_viwidth,
MENU_ENUM_LABEL_VIDEO_VI_WIDTH,
MENU_ENUM_LABEL_VALUE_VIDEO_VI_WIDTH,
video_viwidth,
DEFAULT_VIDEO_VI_WIDTH,
&group_info,
&subgroup_info,
parent_group,
@ -8726,7 +8756,7 @@ static bool setting_append_list(
&settings->bools.video_vfilter,
MENU_ENUM_LABEL_VIDEO_VFILTER,
MENU_ENUM_LABEL_VALUE_VIDEO_VFILTER,
video_vfilter,
DEFAULT_VIDEO_VFILTER,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -8735,6 +8765,32 @@ static bool setting_append_list(
general_write_handler,
general_read_handler,
SD_FLAG_NONE);
CONFIG_UINT(
list, list_info,
&settings->uints.video_overscan_correction_top,
MENU_ENUM_LABEL_VIDEO_OVERSCAN_CORRECTION_TOP,
MENU_ENUM_LABEL_VALUE_VIDEO_OVERSCAN_CORRECTION_TOP,
DEFAULT_VIDEO_OVERSCAN_CORRECTION_TOP,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
menu_settings_list_current_add_range(list, list_info, 0, 24, 1, true, true);
CONFIG_UINT(
list, list_info,
&settings->uints.video_overscan_correction_bottom,
MENU_ENUM_LABEL_VIDEO_OVERSCAN_CORRECTION_BOTTOM,
MENU_ENUM_LABEL_VALUE_VIDEO_OVERSCAN_CORRECTION_BOTTOM,
DEFAULT_VIDEO_OVERSCAN_CORRECTION_BOTTOM,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
menu_settings_list_current_add_range(list, list_info, 0, 24, 1, true, true);
#endif
CONFIG_BOOL(
@ -8742,7 +8798,7 @@ static bool setting_append_list(
&settings->bools.video_smooth,
MENU_ENUM_LABEL_VIDEO_SMOOTH,
MENU_ENUM_LABEL_VALUE_VIDEO_SMOOTH,
video_smooth,
DEFAULT_VIDEO_SMOOTH,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -8822,7 +8878,7 @@ static bool setting_append_list(
&settings->bools.video_vsync,
MENU_ENUM_LABEL_VIDEO_VSYNC,
MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC,
vsync,
DEFAULT_VSYNC,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -8838,7 +8894,7 @@ static bool setting_append_list(
&settings->uints.video_swap_interval,
MENU_ENUM_LABEL_VIDEO_SWAP_INTERVAL,
MENU_ENUM_LABEL_VALUE_VIDEO_SWAP_INTERVAL,
swap_interval,
DEFAULT_SWAP_INTERVAL,
&group_info,
&subgroup_info,
parent_group,
@ -8861,7 +8917,7 @@ static bool setting_append_list(
&settings->uints.video_max_swapchain_images,
MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES,
MENU_ENUM_LABEL_VALUE_VIDEO_MAX_SWAPCHAIN_IMAGES,
max_swapchain_images,
DEFAULT_MAX_SWAPCHAIN_IMAGES,
&group_info,
&subgroup_info,
parent_group,
@ -8882,7 +8938,7 @@ static bool setting_append_list(
&settings->bools.video_hard_sync,
MENU_ENUM_LABEL_VIDEO_HARD_SYNC,
MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC,
hard_sync,
DEFAULT_HARD_SYNC,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -8898,7 +8954,7 @@ static bool setting_append_list(
&settings->uints.video_hard_sync_frames,
MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES,
MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC_FRAMES,
hard_sync_frames,
DEFAULT_HARD_SYNC_FRAMES,
&group_info,
&subgroup_info,
parent_group,
@ -8919,7 +8975,7 @@ static bool setting_append_list(
&settings->bools.video_adaptive_vsync,
MENU_ENUM_LABEL_VIDEO_ADAPTIVE_VSYNC,
MENU_ENUM_LABEL_VALUE_VIDEO_ADAPTIVE_VSYNC,
false,
DEFAULT_ADAPTIVE_VSYNC,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -8937,7 +8993,7 @@ static bool setting_append_list(
&settings->uints.video_frame_delay,
MENU_ENUM_LABEL_VIDEO_FRAME_DELAY,
MENU_ENUM_LABEL_VALUE_VIDEO_FRAME_DELAY,
frame_delay,
DEFAULT_FRAME_DELAY,
&group_info,
&subgroup_info,
parent_group,
@ -8958,7 +9014,7 @@ static bool setting_append_list(
&settings->bools.video_black_frame_insertion,
MENU_ENUM_LABEL_VIDEO_BLACK_FRAME_INSERTION,
MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION,
black_frame_insertion,
DEFAULT_BLACK_FRAME_INSERTION,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -9003,7 +9059,7 @@ static bool setting_append_list(
&settings->bools.video_crop_overscan,
MENU_ENUM_LABEL_VIDEO_CROP_OVERSCAN,
MENU_ENUM_LABEL_VALUE_VIDEO_CROP_OVERSCAN,
crop_overscan,
DEFAULT_CROP_OVERSCAN,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -9103,7 +9159,7 @@ static bool setting_append_list(
&settings->bools.crt_switch_custom_refresh_enable,
MENU_ENUM_LABEL_CRT_SWITCH_RESOLUTION_USE_CUSTOM_REFRESH_RATE,
MENU_ENUM_LABEL_VALUE_CRT_SWITCH_RESOLUTION_USE_CUSTOM_REFRESH_RATE,
audio_enable,
DEFAULT_AUDIO_ENABLE,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -9222,7 +9278,7 @@ static bool setting_append_list(
&settings->bools.audio_enable,
MENU_ENUM_LABEL_AUDIO_ENABLE,
MENU_ENUM_LABEL_VALUE_AUDIO_ENABLE,
audio_enable,
DEFAULT_AUDIO_ENABLE,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -9270,7 +9326,7 @@ static bool setting_append_list(
&settings->floats.audio_volume,
MENU_ENUM_LABEL_AUDIO_VOLUME,
MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME,
audio_volume,
DEFAULT_AUDIO_VOLUME,
"%.1f",
&group_info,
&subgroup_info,
@ -9285,7 +9341,7 @@ static bool setting_append_list(
&settings->floats.audio_mixer_volume,
MENU_ENUM_LABEL_AUDIO_MIXER_VOLUME,
MENU_ENUM_LABEL_VALUE_AUDIO_MIXER_VOLUME,
audio_mixer_volume,
DEFAULT_AUDIO_MIXER_VOLUME,
"%.1f",
&group_info,
&subgroup_info,
@ -9313,7 +9369,7 @@ static bool setting_append_list(
&settings->bools.audio_sync,
MENU_ENUM_LABEL_AUDIO_SYNC,
MENU_ENUM_LABEL_VALUE_AUDIO_SYNC,
audio_sync,
DEFAULT_AUDIO_SYNC,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -9331,7 +9387,7 @@ static bool setting_append_list(
MENU_ENUM_LABEL_AUDIO_LATENCY,
MENU_ENUM_LABEL_VALUE_AUDIO_LATENCY,
g_defaults.settings.out_latency ?
g_defaults.settings.out_latency : out_latency,
g_defaults.settings.out_latency : DEFAULT_OUT_LATENCY,
&group_info,
&subgroup_info,
parent_group,
@ -9363,7 +9419,7 @@ static bool setting_append_list(
audio_get_float_ptr(AUDIO_ACTION_RATE_CONTROL_DELTA),
MENU_ENUM_LABEL_AUDIO_RATE_CONTROL_DELTA,
MENU_ENUM_LABEL_VALUE_AUDIO_RATE_CONTROL_DELTA,
rate_control_delta,
DEFAULT_RATE_CONTROL_DELTA,
"%.3f",
&group_info,
&subgroup_info,
@ -9385,7 +9441,7 @@ static bool setting_append_list(
&settings->floats.audio_max_timing_skew,
MENU_ENUM_LABEL_AUDIO_MAX_TIMING_SKEW,
MENU_ENUM_LABEL_VALUE_AUDIO_MAX_TIMING_SKEW,
max_timing_skew,
DEFAULT_MAX_TIMING_SKEW,
"%.2f",
&group_info,
&subgroup_info,
@ -9454,7 +9510,7 @@ static bool setting_append_list(
&settings->uints.audio_out_rate,
MENU_ENUM_LABEL_AUDIO_OUTPUT_RATE,
MENU_ENUM_LABEL_VALUE_AUDIO_OUTPUT_RATE,
out_rate,
DEFAULT_OUTPUT_RATE,
&group_info,
&subgroup_info,
parent_group,
@ -10138,7 +10194,7 @@ static bool setting_append_list(
&settings->uints.video_record_threads,
MENU_ENUM_LABEL_VIDEO_RECORD_THREADS,
MENU_ENUM_LABEL_VALUE_VIDEO_RECORD_THREADS,
video_record_threads,
DEFAULT_VIDEO_RECORD_THREADS,
&group_info,
&subgroup_info,
parent_group,
@ -10255,7 +10311,7 @@ static bool setting_append_list(
&settings->floats.fastforward_ratio,
MENU_ENUM_LABEL_FASTFORWARD_RATIO,
MENU_ENUM_LABEL_VALUE_FASTFORWARD_RATIO,
fastforward_ratio,
DEFAULT_FASTFORWARD_RATIO,
"%.1fx",
&group_info,
&subgroup_info,
@ -10287,7 +10343,7 @@ static bool setting_append_list(
&settings->floats.slowmotion_ratio,
MENU_ENUM_LABEL_SLOWMOTION_RATIO,
MENU_ENUM_LABEL_VALUE_SLOWMOTION_RATIO,
slowmotion_ratio,
DEFAULT_SLOWMOTION_RATIO,
"%.1fx",
&group_info,
&subgroup_info,
@ -10446,7 +10502,7 @@ static bool setting_append_list(
&settings->floats.video_font_size,
MENU_ENUM_LABEL_VIDEO_FONT_SIZE,
MENU_ENUM_LABEL_VALUE_VIDEO_FONT_SIZE,
font_size,
DEFAULT_FONT_SIZE,
"%.1f",
&group_info,
&subgroup_info,
@ -10660,7 +10716,7 @@ static bool setting_append_list(
&settings->bools.input_overlay_hide_in_menu,
MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU,
MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU,
overlay_hide_in_menu,
DEFAULT_OVERLAY_HIDE_IN_MENU,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -10703,6 +10759,22 @@ static bool setting_append_list(
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
menu_settings_list_current_add_range(list, list_info, 0, MAX_USERS - 1, 1, true, true);
CONFIG_BOOL(
list, list_info,
&settings->bools.input_overlay_show_mouse_cursor,
MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_MOUSE_CURSOR,
MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_SHOW_MOUSE_CURSOR,
DEFAULT_OVERLAY_SHOW_MOUSE_CURSOR,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler,
SD_FLAG_NONE
);
CONFIG_PATH(
list, list_info,
settings->paths.path_overlay,
@ -10917,7 +10989,7 @@ static bool setting_append_list(
&settings->bools.menu_mouse_enable,
MENU_ENUM_LABEL_MOUSE_ENABLE,
MENU_ENUM_LABEL_VALUE_MOUSE_ENABLE,
def_mouse_enable,
DEFAULT_MOUSE_ENABLE,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -11364,7 +11436,7 @@ static bool setting_append_list(
&settings->bools.threaded_data_runloop_enable,
MENU_ENUM_LABEL_THREADED_DATA_RUNLOOP_ENABLE,
MENU_ENUM_LABEL_VALUE_THREADED_DATA_RUNLOOP_ENABLE,
threaded_data_runloop_enable,
DEFAULT_THREADED_DATA_RUNLOOP_ENABLE,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -11997,7 +12069,7 @@ static bool setting_append_list(
&settings->bools.menu_materialui_icons_enable,
MENU_ENUM_LABEL_MATERIALUI_ICONS_ENABLE,
MENU_ENUM_LABEL_VALUE_MATERIALUI_ICONS_ENABLE,
materialui_icons_enable,
DEFAULT_MATERIALUI_ICONS_ENABLE,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -12474,7 +12546,7 @@ static bool setting_append_list(
&settings->bools.pause_nonactive,
MENU_ENUM_LABEL_PAUSE_NONACTIVE,
MENU_ENUM_LABEL_VALUE_PAUSE_NONACTIVE,
pause_nonactive,
DEFAULT_PAUSE_NONACTIVE,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -12491,7 +12563,7 @@ static bool setting_append_list(
&settings->bools.video_disable_composition,
MENU_ENUM_LABEL_VIDEO_DISABLE_COMPOSITION,
MENU_ENUM_LABEL_VALUE_VIDEO_DISABLE_COMPOSITION,
disable_composition,
DEFAULT_DISABLE_COMPOSITION,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
@ -13000,20 +13072,21 @@ static bool setting_append_list(
general_read_handler,
SD_FLAG_NONE);
CONFIG_BOOL(
CONFIG_UINT(
list, list_info,
&settings->bools.playlist_entry_remove,
&settings->uints.playlist_entry_remove_enable,
MENU_ENUM_LABEL_PLAYLIST_ENTRY_REMOVE,
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE,
def_playlist_entry_remove,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
playlist_entry_remove_enable,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler,
SD_FLAG_NONE);
general_read_handler);
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_uint_playlist_entry_remove_enable;
menu_settings_list_current_add_range(list, list_info, 0, PLAYLIST_ENTRY_REMOVE_ENABLE_LAST-1, 1, true, true);
CONFIG_BOOL(
list, list_info,
@ -13128,7 +13201,7 @@ static bool setting_append_list(
&settings->bools.cheevos_enable,
MENU_ENUM_LABEL_CHEEVOS_ENABLE,
MENU_ENUM_LABEL_VALUE_CHEEVOS_ENABLE,
cheevos_enable,
DEFAULT_CHEEVOS_ENABLE,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,

View File

@ -777,6 +777,7 @@ enum msg_hash_enums
MENU_LABEL(INPUT_OVERLAY_HIDE_IN_MENU),
MENU_LABEL(INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS),
MENU_LABEL(INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT),
MENU_LABEL(INPUT_OVERLAY_SHOW_MOUSE_CURSOR),
MENU_LABEL(INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE),
MENU_LABEL(INPUT_SMALL_KEYBOARD_ENABLE),
MENU_LABEL(INPUT_TOUCH_ENABLE),
@ -1848,6 +1849,8 @@ enum msg_hash_enums
MENU_LABEL(USER_LANGUAGE),
MENU_LABEL(NETPLAY_NICKNAME),
MENU_LABEL(VIDEO_VI_WIDTH),
MENU_LABEL(VIDEO_OVERSCAN_CORRECTION_TOP),
MENU_LABEL(VIDEO_OVERSCAN_CORRECTION_BOTTOM),
MENU_LABEL(VIDEO_ASPECT_RATIO),
MENU_LABEL(VIDEO_FORCE_ASPECT),
MENU_LABEL(VIDEO_ASPECT_RATIO_AUTO),
@ -2375,6 +2378,10 @@ enum msg_hash_enums
MENU_ENUM_LABEL_VALUE_PLAYLIST_INLINE_CORE_DISPLAY_ALWAYS,
MENU_ENUM_LABEL_VALUE_PLAYLIST_INLINE_CORE_DISPLAY_NEVER,
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV,
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_ALL,
MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_REMOVE_ENABLE_NONE,
MENU_ENUM_LABEL_VALUE_PLAYLIST_SUBLABEL_CORE,
MENU_ENUM_LABEL_VALUE_PLAYLIST_SUBLABEL_RUNTIME,
MENU_ENUM_LABEL_VALUE_PLAYLIST_SUBLABEL_LAST_PLAYED,

View File

@ -894,6 +894,7 @@
../../,
"../../libretro-common/include",
../../deps/stb,
../../deps/rcheevos/include,
../../deps/libz,
../../deps,
);

View File

@ -128,10 +128,8 @@ add_define MAKEFILE BIN_DIR "${BIN_DIR:-${PREFIX}/bin}"
add_define MAKEFILE DOC_DIR "${DOC_DIR:-${SHARE_DIR}/doc/retroarch}"
add_define MAKEFILE MAN_DIR "${MAN_DIR:-${SHARE_DIR}/man}"
if [ "$OS" = 'DOS' ]; then
HAVE_SHADERPIPELINE=no
HAVE_LANGEXTRA=no
fi
check_platform DOS SHADERPIPELINE 'Shader-based pipelines are' false
check_platform DOS LANGEXTRA 'Extra languages are' false
check_lib '' THREADS "$PTHREADLIB" pthread_create
check_enabled THREADS THREAD_STORAGE 'Thread Local Storage' 'Threads are' false
@ -203,10 +201,8 @@ if [ "$HAVE_OSS" != 'no' ]; then
check_lib '' OSS_LIB -lossaudio
fi
if [ "$OS" = 'Linux' ]; then
HAVE_TINYALSA=yes
HAVE_RPILED=yes
fi
check_platform Linux TINYALSA 'Tinyalsa is' true
check_platform Linux RPILED 'The RPI led driver is' true
if [ "$OS" = 'Darwin' ]; then
check_lib '' COREAUDIO "-framework AudioUnit" AudioUnitInitialize
@ -234,6 +230,7 @@ if [ "$HAVE_SDL2" = 'yes' ] && [ "$HAVE_SDL" = 'yes' ]; then
HAVE_SDL=no
fi
check_platform Haiku DISCORD 'Discord is' false
check_enabled CXX DISCORD discord 'The C++ compiler is' false
check_enabled CXX QT 'Qt companion' 'The C++ compiler is' false
@ -247,18 +244,18 @@ if [ "$HAVE_QT" != 'no' ]; then
# pkg-config is needed to reliably find Qt5 libraries.
if [ "$HAVE_QT5CORE" = "no" ] || [ "$HAVE_QT5GUI" = "no" ] || [ "$HAVE_QT5WIDGETS" = "no" ] || [ "$HAVE_QT5CONCURRENT" = "no" ] || [ "$HAVE_QT5NETWORK" = "no" ]; then
die : 'Notice: Not building Qt support, required libraries were not found.'
HAVE_QT=no
else
HAVE_QT=yes
check_enabled QT5CORE QT Qt 'Qt5Core is' true
check_enabled QT5GUI QT Qt 'Qt5GUI is' true
check_enabled QT5WIDGETS QT Qt 'Qt5Widgets is' true
check_enabled QT5CONCURRENT QT Qt 'Qt5Concurrent is' true
check_enabled QT5NETWORK QT Qt 'Qt5Network is' true
#check_enabled QT5WEBENGINE QT Qt 'Qt5Webengine is' true
if [ "$HAVE_QT" != yes ]; then
die : 'Notice: Qt support disabled, required libraries were not found.'
fi
check_pkgconf OPENSSL openssl 1.0.0
#if [ "$HAVE_QT5WEBENGINE" = "no" ]; then
# die : 'Notice: Qt5WebEngine not found, disabling web browser support.'
#fi
fi
if [ "$HAVE_FLAC" = 'no' ]; then
@ -303,9 +300,15 @@ check_val '' LIBUSB -lusb-1.0 libusb-1.0 libusb-1.0 1.0.13 '' false
if [ "$OS" = 'Win32' ]; then
check_lib '' DINPUT -ldinput8
check_lib '' D3D8 -ld3d8
check_lib '' D3D9 -ld3d9
check_lib '' DSOUND -ldsound
if [ "$HAVE_D3DX" != 'no' ]; then
check_lib '' D3DX8 -ld3dx8
check_lib '' D3DX9 -ld3dx9
fi
if [ "$HAVE_DINPUT" != 'no' ]; then
HAVE_XINPUT=yes
fi
@ -313,13 +316,15 @@ if [ "$OS" = 'Win32' ]; then
HAVE_WASAPI=yes
HAVE_XAUDIO=yes
HAVE_WINMM=yes
else
HAVE_D3D9=no
HAVE_D3D10=no
HAVE_D3D11=no
HAVE_D3D12=no
fi
check_platform Win32 D3D8 'Direct3D 8 is' true
check_platform Win32 D3D9 'Direct3D 9 is' true
check_platform Win32 D3D10 'Direct3D 10 is' true
check_platform Win32 D3D11 'Direct3D 11 is' true
check_platform Win32 D3D12 'Direct3D 12 is' true
check_platform Win32 D3DX 'Direct3DX is' true
if [ "$HAVE_OPENGL" != 'no' ] && [ "$HAVE_OPENGLES" != 'yes' ]; then
if [ "$OS" = 'Darwin' ]; then
check_header OPENGL "OpenGL/gl.h"
@ -348,6 +353,7 @@ else
HAVE_OPENGL='no'
fi
check_enabled EGL OPENGLES3 OpenGLES3 'EGL is' false
check_enabled OPENGL CG Cg 'OpenGL is' false
check_enabled OPENGL OSMESA osmesa 'OpenGL is' false
check_enabled OPENGL OPENGL1 OpenGL1 'OpenGL is' false
@ -360,7 +366,9 @@ elif [ "$HAVE_OPENGLES" != 'no' ] && [ "$HAVE_OPENGLES3" != 'yes' ]; then
HAVE_OPENGL_CORE='no'
fi
if [ "$HAVE_BUILTINZLIB" = 'yes' ]; then
if [ "$HAVE_ZLIB" = 'no' ]; then
HAVE_BUILTINZLIB=no
elif [ "$HAVE_BUILTINZLIB" = 'yes' ]; then
HAVE_ZLIB=yes
else
check_val '' ZLIB '-lz' '' zlib '' '' false
@ -422,18 +430,36 @@ else
HAVE_OPENGLES=no
fi
check_pkgconf DBUS dbus-1
check_val '' UDEV "-ludev" '' libudev '' '' false
check_val '' V4L2 -lv4l2 '' libv4l2 '' '' false
check_val '' FREETYPE -lfreetype freetype2 freetype2 '' '' false
check_val '' X11 -lX11 '' x11 '' '' false
check_val '' XCB -lxcb '' xcb '' '' false
if [ "$HAVE_X11" != 'no' ]; then
check_val '' XEXT -lXext '' xext '' '' false
check_val '' XF86VM -lXxf86vm '' xxf86vm '' '' false
else
die : 'Notice: X11 not present. Skipping X11 code paths.'
fi
check_enabled X11 XINERAMA Xinerama 'X11 is' false
check_enabled X11 XSHM XShm 'X11 is' false
check_enabled X11 XRANDR Xrandr 'X11 is' false
check_enabled X11 XVIDEO XVideo 'X11 is' false
check_enabled XEXT XVIDEO XVideo 'Xext is' false
check_enabled XF86VM XVIDEO XVideo 'XF86vm is' false
check_val '' XVIDEO -lXv '' xv '' '' false
check_val '' XINERAMA -lXinerama '' xinerama '' '' false
check_lib '' XRANDR -lXrandr
check_header XSHM X11/Xlib.h X11/extensions/XShm.h
check_val '' XKBCOMMON -lxkbcommon '' xkbcommon 0.3.2 '' false
check_val '' WAYLAND '-lwayland-egl -lwayland-client' '' wayland-egl 10.1.0 '' false
check_val '' WAYLAND_CURSOR -lwayland-cursor '' wayland-cursor 1.12 '' false
check_pkgconf WAYLAND_PROTOS wayland-protocols 1.15
check_pkgconf WAYLAND_SCANNER wayland-scanner '1.15 1.12'
check_val '' XKBCOMMON -lxkbcommon '' xkbcommon 0.3.2 '' false
check_pkgconf DBUS dbus-1
check_val '' XEXT -lXext '' xext '' '' false
check_val '' XF86VM -lXxf86vm '' xxf86vm '' '' false
if [ "$HAVE_WAYLAND_SCANNER" = yes ] &&
[ "$HAVE_WAYLAND_CURSOR" = yes ] &&
@ -448,24 +474,6 @@ else
HAVE_WAYLAND='no'
fi
if [ "$HAVE_X11" = 'no' ]; then
HAVE_XEXT=no; HAVE_XF86VM=no; HAVE_XINERAMA=no; HAVE_XSHM=no; HAVE_XRANDR=no
fi
check_lib '' XRANDR -lXrandr
check_val '' XINERAMA -lXinerama '' xinerama '' '' false
if [ "$HAVE_X11" = 'yes' ] && [ "$HAVE_XEXT" = 'yes' ] && [ "$HAVE_XF86VM" = 'yes' ]; then
check_val '' XVIDEO -lXv '' xv '' '' false
else
die : 'Notice: X11, Xext or xf86vm not present. Skipping X11 code paths.'
HAVE_X11='no'
HAVE_XVIDEO='no'
fi
check_val '' UDEV "-ludev" '' libudev '' '' false
check_header XSHM X11/Xlib.h X11/extensions/XShm.h
check_header PARPORT linux/parport.h
check_header PARPORT linux/ppdev.h
@ -526,10 +534,5 @@ if [ "$HAVE_DEBUG" = 'yes' ]; then
fi
check_enabled MENU MENU_WIDGETS 'menu widgets' 'The menu is' false
if [ "$HAVE_ZLIB" = 'no' ] && [ "$HAVE_BUILTINZLIB" = 'no' ]; then
eval "HAVE_RPNG=no"
die : "Notice: zlib disabled, rpng support will also be disabled."
fi
check_enabled ZLIB RPNG RPNG 'zlib is' false
check_enabled V4L2 VIDEOPROCESSOR 'video processor' 'Video4linux2 is' true

View File

@ -48,7 +48,7 @@ HAVE_MINIUPNPC=auto # Mini UPnP client library (for NAT traversal)
HAVE_BUILTINMINIUPNPC=yes # Bake in Mini UPnP client library (for NAT traversal)
C89_BUILTINMINIUPNPC=no
HAVE_D3D8=no # Direct3D 8 support
HAVE_D3D9=yes # Direct3D 9 support
HAVE_D3D9=auto # Direct3D 9 support
C89_D3D9=no
HAVE_D3D10=yes # Direct3D 10 support
C89_D3D10=no
@ -56,7 +56,7 @@ HAVE_D3D11=yes # Direct3D 11 support
C89_D3D11=no
HAVE_D3D12=yes # Direct3D 12 support
C89_D3D12=no
HAVE_D3DX=yes # Direct3DX support
HAVE_D3DX=auto # Direct3DX support
HAVE_OPENGL=auto # OpenGL 2.0 support
HAVE_OPENGL_CORE=yes # Modern OpenGL driver support (GLES3+/GL3.2 core+), requires OpenGL.
C89_OPENGL_CORE=no
@ -78,14 +78,15 @@ HAVE_SUNXI=no # Sunxi video support
HAVE_WAYLAND=auto # Wayland support
C89_WAYLAND=no
CXX_WAYLAND=no
HAVE_EGL=no # EGL context support
HAVE_EGL=auto # EGL context support
HAVE_VG=auto # OpenVG support
HAVE_CG=auto # Cg shader support
HAVE_HLSL=no # HLSL9 shader support (for Direct3D9)
HAVE_BUILTINZLIB=yes # Bake in zlib
HAVE_ZLIB=no # zlib support (ZIP extract, PNG decoding/encoding)
HAVE_ZLIB=auto # zlib support (ZIP extract, PNG decoding/encoding)
HAVE_ALSA=auto # ALSA support
C89_ALSA=no
HAVE_RPILED=auto # RPI led support
HAVE_TINYALSA=auto # TinyALSA support
HAVE_AUDIOIO=auto # AudioIO support
HAVE_OSS=auto # OSS support

View File

@ -79,6 +79,34 @@ check_enabled()
die 1 "Error: $4 disabled and forced to build with $3 support."
}
# check_platform:
# $1 = OS
# $2 = HAVE_$2
# $3 = feature
# $4 = enable feature when true [checked only if non-empty]
check_platform()
{ tmpval="$(eval "printf %s \"\$HAVE_$2\"")"
[ "$tmpval" = 'no' ] && return 0
setval="$(eval "printf %s \"\$USER_$2\"")"
if [ "$setval" = 'yes' ]; then
if { [ "$1" != "$OS" ] && [ "${4:-}" = 'true' ]; } ||
{ [ "$1" = "$OS" ] &&
[ "${4:-}" != 'true' ]; }; then
die 1 "Error: $3 not supported for $OS."
fi
elif [ "$1" = "$OS" ]; then
if [ "${4:-}" = 'true' ]; then
eval "HAVE_$2=yes"
else
eval "HAVE_$2=no"
fi
elif [ "${4:-}" = 'true' ]; then
eval "HAVE_$2="
fi
}
# check_lib:
# Compiles a simple test program to check if a library is available.
# $1 = language

View File

@ -68,16 +68,19 @@ opt_exists() # $opt is returned if exists in OPTS
parse_input() # Parse stuff :V
{ BUILD=''
OPTS=''
config_opts='./configure'
while read -r VAR _; do
TMPVAR="${VAR%=*}"
NEWVAR="${TMPVAR##HAVE_}"
OPTS="$OPTS $NEWVAR"
eval "USER_$NEWVAR=no"
eval "USER_$NEWVAR=auto"
done < 'qb/config.params.sh'
#OPTS contains all available options in config.params.sh - used to speedup
#things in opt_exists()
while [ $# -gt 0 ]; do
config_opts="${config_opts} $1"
case "$1" in
--prefix=*) PREFIX=${1##--prefix=};;
--global-config-dir=*|--sysconfdir=*) GLOBAL_CONFIG_DIR="${1#*=}";;
@ -95,6 +98,7 @@ parse_input() # Parse stuff :V
--disable-*)
opt_exists "${1##--disable-}" "$1"
eval "HAVE_$opt=no"
eval "USER_$opt=no"
eval "HAVE_NO_$opt=yes"
;;
--with-*)
@ -110,6 +114,17 @@ parse_input() # Parse stuff :V
esac
shift
done
cat > config.log << EOF
Command line invocation:
\$ ${config_opts}
## ----------- ##
## Core Tests. ##
## ----------- ##
EOF
}
. qb/config.params.sh

View File

@ -4606,41 +4606,41 @@ int runloop_iterate(unsigned *sleep_ms)
autosave_unlock();
/* Condition for max speed x0.0 when vrr_runloop is off to skip that part */
if (fastforward_ratio || vrr_runloop_enable)
end:
{
retro_time_t to_sleep_ms;
if (!(fastforward_ratio || vrr_runloop_enable))
return 0;
if (vrr_runloop_enable)
{
struct retro_system_av_info *av_info =
end:
if (vrr_runloop_enable)
{
struct retro_system_av_info *av_info =
video_viewport_get_system_av_info();
/* Sync on video only, block audio later. */
if (fastforward_after_frames && settings->bools.audio_sync)
/* Sync on video only, block audio later. */
if (fastforward_after_frames && settings->bools.audio_sync)
{
if (fastforward_after_frames == 1)
command_event(CMD_EVENT_AUDIO_SET_NONBLOCKING_STATE, NULL);
fastforward_after_frames++;
if (fastforward_after_frames == 6)
{
if (fastforward_after_frames == 1)
command_event(CMD_EVENT_AUDIO_SET_NONBLOCKING_STATE, NULL);
fastforward_after_frames++;
if (fastforward_after_frames == 6)
{
command_event(CMD_EVENT_AUDIO_SET_BLOCKING_STATE, NULL);
fastforward_after_frames = 0;
}
command_event(CMD_EVENT_AUDIO_SET_BLOCKING_STATE, NULL);
fastforward_after_frames = 0;
}
/* Fast Forward for max speed x0.0 */
if (!fastforward_ratio && runloop_fastmotion)
return 0;
frame_limit_minimum_time =
(retro_time_t)roundf(1000000.0f / (av_info->timing.fps *
(runloop_fastmotion ? fastforward_ratio : 1.0f)));
}
to_sleep_ms = (
/* Fast Forward for max speed x0.0 */
if (!fastforward_ratio && runloop_fastmotion)
return 0;
frame_limit_minimum_time =
(retro_time_t)roundf(1000000.0f / (av_info->timing.fps *
(runloop_fastmotion ? fastforward_ratio : 1.0f)));
}
{
retro_time_t to_sleep_ms = (
(frame_limit_last_time + frame_limit_minimum_time)
- cpu_features_get_time_usec()) / 1000;
@ -4651,10 +4651,10 @@ int runloop_iterate(unsigned *sleep_ms)
frame_limit_last_time += frame_limit_minimum_time;
return 1;
}
frame_limit_last_time = cpu_features_get_time_usec();
}
frame_limit_last_time = cpu_features_get_time_usec();
return 0;
}
@ -5038,7 +5038,7 @@ bool rarch_write_debug_info(void)
if (joypad_driver && string_is_equal(joypad_driver->ident, settings->arrays.input_joypad_driver))
filestream_printf(file, " - Joypad: %s\n", !string_is_empty(joypad_driver->ident) ? joypad_driver->ident : "n/a");
else
filestream_printf(file, " - Input: %s (configured for %s)\n", !string_is_empty(joypad_driver->ident) ? joypad_driver->ident : "n/a", !string_is_empty(settings->arrays.input_joypad_driver) ? settings->arrays.input_joypad_driver : "n/a");
filestream_printf(file, " - Joypad: %s (configured for %s)\n", !string_is_empty(joypad_driver->ident) ? joypad_driver->ident : "n/a", !string_is_empty(settings->arrays.input_joypad_driver) ? settings->arrays.input_joypad_driver : "n/a");
}
filestream_printf(file, "\n");

View File

@ -157,6 +157,9 @@ static int pending_subsystem_rom_num = 0;
static int pending_subsystem_id = 0;
static unsigned pending_subsystem_rom_id = 0;
static bool pending_content_rom_crc = false;
static char pending_content_rom_crc_path[PATH_MAX_LENGTH] = {0};
static char pending_subsystem_ident[255];
#if 0
static char pending_subsystem_extensions[PATH_MAX_LENGTH];
@ -349,12 +352,14 @@ static bool load_content_into_memory(
/* If we have a media type, ignore CRC32 calculation. */
if (type == RARCH_CONTENT_NONE)
{
bool has_patch = false;
/* First content file is significant, attempt to do patching,
* CRC checking, etc. */
/* Attempt to apply a patch. */
if (!content_ctx->patch_is_blocked)
patch_content(
has_patch = patch_content(
content_ctx->is_ips_pref,
content_ctx->is_bps_pref,
content_ctx->is_ups_pref,
@ -364,9 +369,17 @@ static bool load_content_into_memory(
(uint8_t**)&ret_buf,
(void*)length);
content_rom_crc = encoding_crc32(0, ret_buf, (size_t)*length);
RARCH_LOG("CRC32: 0x%x .\n", (unsigned)content_rom_crc);
if (has_patch)
{
content_rom_crc = encoding_crc32(0, ret_buf, (size_t)*length);
RARCH_LOG("CRC32: 0x%x .\n", (unsigned)content_rom_crc);
}
else
{
pending_content_rom_crc = true;
strlcpy(pending_content_rom_crc_path,
path, sizeof(pending_content_rom_crc_path));
}
}
else
content_rom_crc = 0;
@ -644,14 +657,14 @@ static bool content_file_load(
if (string_is_empty(new_basedir) || !path_is_directory(new_basedir) || !is_path_accessible_using_standard_io(new_basedir))
{
RARCH_WARN("Tried copying to cache directory, but "
"cache directory was not set or found. "
"Setting cache directory to root of "
"writable app directory...\n");
"cache directory was not set or found. "
"Setting cache directory to root of "
"writable app directory...\n");
strlcpy(new_basedir, uwp_dir_data, new_basedir_size);
}
fill_pathname_join(new_path, new_basedir,
path_basename(path), new_path_size);
path_basename(path), new_path_size);
free(new_basedir);
/* TODO: This may fail on very large files...
@ -679,10 +692,10 @@ static bool content_file_load(
free(buf);
snprintf(msg,
msg_size,
"%s \"%s\". (during copy write)\n",
msg_hash_to_str(MSG_COULD_NOT_READ_CONTENT_FILE),
path);
msg_size,
"%s \"%s\". (during copy write)\n",
msg_hash_to_str(MSG_COULD_NOT_READ_CONTENT_FILE),
path);
*error_string = strdup(msg);
free(msg);
return false;
@ -694,7 +707,7 @@ static bool content_file_load(
additional_path_allocs->elems[additional_path_allocs->size - 1].data;
string_list_append(content_ctx->temporary_content,
new_path, attributes);
new_path, attributes);
free(new_path);
@ -702,14 +715,11 @@ static bool content_file_load(
}
#endif
/* It adds up to 10 seconds when loading large roms.
* It's mainly used for network play which isn't available for these platforms. */
#if !defined(GEKKO)
RARCH_LOG("%s\n", msg_hash_to_str(
MSG_CONTENT_LOADING_SKIPPED_IMPLEMENTATION_WILL_DO_IT));
content_rom_crc = file_crc32(0, path);
RARCH_LOG("CRC32: 0x%x .\n", (unsigned)content_rom_crc);
#endif
pending_content_rom_crc = true;
strlcpy(pending_content_rom_crc_path,
path, sizeof(pending_content_rom_crc_path));
}
}
@ -2032,6 +2042,13 @@ void content_unset_does_not_need_content(void)
uint32_t content_get_crc(void)
{
if (pending_content_rom_crc)
{
pending_content_rom_crc = false;
content_rom_crc = file_crc32(0,
(const char*)pending_content_rom_crc_path);
RARCH_LOG("CRC32: 0x%x .\n", (unsigned)content_rom_crc);
}
return content_rom_crc;
}
@ -2069,6 +2086,7 @@ void content_deinit(void)
content_rom_crc = 0;
_content_is_inited = false;
core_does_not_need_content = false;
pending_content_rom_crc = false;
}
/* Set environment variables before a subsystem load */

View File

@ -630,7 +630,7 @@ static bool try_ips_patch(bool allow_ips,
* Apply patch to the content file in-memory.
*
**/
static void patch_content(
static bool patch_content(
bool is_ips_pref,
bool is_bps_pref,
bool is_ups_pref,
@ -651,7 +651,7 @@ static void patch_content(
{
RARCH_WARN("%s\n",
msg_hash_to_str(MSG_SEVERAL_PATCHES_ARE_EXPLICITLY_DEFINED));
return;
return false;
}
if ( !try_ips_patch(allow_ips, name_ips, buf, size)
@ -660,5 +660,8 @@ static void patch_content(
{
RARCH_LOG("%s\n",
msg_hash_to_str(MSG_DID_NOT_FIND_A_VALID_CONTENT_PATCH));
return false;
}
return true;
}