From 77faf4ac4a1eb43ef93076751f6017d385626dc5 Mon Sep 17 00:00:00 2001 From: radius Date: Mon, 29 Oct 2018 21:23:53 -0500 Subject: [PATCH 01/40] [subsystem] try to load subsystems without loading content --- .vscode/settings.json | 2 + command.c | 9 +++++ dynamic.c | 69 +++++++++++++++++++++++++++++++- dynamic.h | 4 ++ menu/cbs/menu_cbs_sublabel.c | 17 ++++---- menu/drivers/nuklear/nk_common.c | 4 +- menu/drivers/ozone/ozone.c | 9 +++-- menu/drivers/xmb.c | 12 +++--- menu/menu_displaylist.c | 25 ++---------- menu/widgets/menu_filebrowser.c | 12 +++--- paths.c | 2 +- tasks/task_content.c | 4 +- 12 files changed, 116 insertions(+), 53 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index c44832dca4..386e8341f9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -41,6 +41,8 @@ "ozone_texture.h": "c", "string_list.h": "c", "core_info.h": "c" + "thread": "c", + "xlocale": "c" }, "C_Cpp.dimInactiveRegions": false, } \ No newline at end of file diff --git a/command.c b/command.c index a87a52e1e4..a378a97de9 100644 --- a/command.c +++ b/command.c @@ -1899,6 +1899,8 @@ bool command_event(enum event_command cmd, void *data) break; case CMD_EVENT_LOAD_CORE: { + subsystem_size = 0; + content_clear_subsystem(); bool success = command_event(CMD_EVENT_LOAD_CORE_PERSIST, NULL); (void)success; @@ -2019,8 +2021,10 @@ bool command_event(enum event_command cmd, void *data) command_event(CMD_EVENT_RESTORE_REMAPS, NULL); if (is_inited) + { if (!task_push_start_dummy_core(&content_info)) return false; + } #ifdef HAVE_DYNAMIC path_clear(RARCH_PATH_CORE); rarch_ctl(RARCH_CTL_SYSTEM_INFO_FREE, NULL); @@ -2037,6 +2041,11 @@ bool command_event(enum event_command cmd, void *data) command_event(CMD_EVENT_DISCORD_UPDATE, &userdata); } #endif + if (is_inited) + { + subsystem_size = 0; + content_clear_subsystem(); + } } break; case CMD_EVENT_QUIT: diff --git a/dynamic.c b/dynamic.c index 04698748e3..bacbefde07 100644 --- a/dynamic.c +++ b/dynamic.c @@ -176,12 +176,80 @@ void libretro_free_system_info(struct retro_system_info *info) static bool environ_cb_get_system_info(unsigned cmd, void *data) { + rarch_system_info_t *system = runloop_get_system_info(); switch (cmd) { case RETRO_ENVIRONMENT_SET_SUPPORT_NO_GAME: *load_no_content_hook = *(const bool*)data; break; + case RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO: + { + unsigned i, j; + const struct retro_subsystem_info *info = + (const struct retro_subsystem_info*)data; + subsystem_size = 0; + RARCH_LOG("Environ SET_SUBSYSTEM_INFO.\n"); + for (i = 0; info[i].ident; i++) + { + RARCH_LOG("Subsystem ID: %d\n", i); + RARCH_LOG("Special game type: %s\n", info[i].desc); + RARCH_LOG(" Ident: %s\n", info[i].ident); + RARCH_LOG(" ID: %u\n", info[i].id); + RARCH_LOG(" Content:\n"); + for (j = 0; j < info[i].num_roms; j++) + { + RARCH_LOG(" %s (%s)\n", + info[i].roms[j].desc, info[i].roms[j].required ? + "required" : "optional"); + } + } + + RARCH_LOG("Subsystems: %d\n", i); + unsigned size = i; + + if (system) + { + for (i = 0; i < size; i++) + { + subsystem_data[i].desc = strdup(info[i].desc); + subsystem_data[i].ident = strdup(info[i].ident); + subsystem_data[i].id = info[i].id; + subsystem_data[i].num_roms = info[i].num_roms; + + for (j = 0; j < subsystem_data[i].num_roms; j++) + { + subsystem_data_roms[i][j].desc = strdup(info[i].roms[j].desc); + subsystem_data_roms[i][j].valid_extensions = strdup(info[i].roms[j].valid_extensions); + subsystem_data_roms[i][j].required = info[i].roms[j].required; + subsystem_data_roms[i][j].block_extract = info[i].roms[j].block_extract; + subsystem_data_roms[i][j].need_fullpath = info[i].roms[j].need_fullpath; + } + subsystem_data[i].roms = subsystem_data_roms[i]; + } + + for (i = 0; i < size; i++) + { +#if 1 + RARCH_LOG("Subsystem ID: %d\n", i); + RARCH_LOG("Special game type: %s\n", subsystem_data[i].desc); + RARCH_LOG(" Ident: %s\n", subsystem_data[i].ident); + RARCH_LOG(" ID: %u\n", subsystem_data[i].id); + RARCH_LOG(" Content:\n"); +#endif + for (j = 0; j < subsystem_data[i].num_roms; j++) + { + RARCH_LOG(" %s (%s)\n", + subsystem_data[i].roms[j].desc, subsystem_data[i].roms[j].required ? + "required" : "optional"); + } + } + RARCH_LOG("Subsystems: %d\n", subsystem_size); + subsystem_size = size; + RARCH_LOG("Subsystems: %d\n", subsystem_size); + } + break; + } default: return false; } @@ -396,7 +464,6 @@ bool libretro_get_system_info(const char *path, #ifdef HAVE_DYNAMIC dylib_close(lib); #endif - return true; } diff --git a/dynamic.h b/dynamic.h index e930a2edc8..505082bc97 100644 --- a/dynamic.h +++ b/dynamic.h @@ -146,6 +146,10 @@ bool init_libretro_sym_custom(enum rarch_core_type type, struct retro_core_t *cu **/ void uninit_libretro_sym(struct retro_core_t *core); +struct retro_subsystem_info subsystem_data[20]; +struct retro_subsystem_rom_info subsystem_data_roms[10][10]; +unsigned subsystem_size; + RETRO_END_DECLS #endif diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index c4ff5f6cf5..0c61484fc3 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -40,6 +40,7 @@ #include "../../retroarch.h" #include "../../content.h" +#include "../../dynamic.h" #include "../../configuration.h" #include "../../managers/cheat_manager.h" @@ -513,14 +514,14 @@ static int action_bind_sublabel_subsystem_add( char *s, size_t len) { rarch_system_info_t *system = runloop_get_system_info(); - const struct retro_subsystem_info *subsystem = (system && system->subsystem.data) ? - system->subsystem.data + (type - MENU_SETTINGS_SUBSYSTEM_ADD) : NULL; + const struct retro_subsystem_info *subsystem = (system && subsystem_size > 0) ? + subsystem_data + (type - MENU_SETTINGS_SUBSYSTEM_ADD) : NULL; - if (subsystem && content_get_subsystem_rom_id() < subsystem->num_roms) + if (subsystem_size > 0 && content_get_subsystem_rom_id() < subsystem->num_roms) snprintf(s, len, " Current Content: %s", - content_get_subsystem() == type - MENU_SETTINGS_SUBSYSTEM_ADD - ? subsystem->roms[content_get_subsystem_rom_id()].desc - : subsystem->roms[0].desc); + content_get_subsystem() == type - MENU_SETTINGS_SUBSYSTEM_ADD + ? subsystem->roms[content_get_subsystem_rom_id()].desc + : subsystem->roms[0].desc); return 0; } @@ -539,8 +540,8 @@ static int action_bind_sublabel_remap_kbd_sublabel( input_config_get_device_display_name(user_idx) ? input_config_get_device_display_name(user_idx) : (input_config_get_device_name(user_idx) ? - input_config_get_device_name(user_idx) : - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE))); + input_config_get_device_name(user_idx) : + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE))); return 0; } diff --git a/menu/drivers/nuklear/nk_common.c b/menu/drivers/nuklear/nk_common.c index 67323c0cf1..61800585fd 100644 --- a/menu/drivers/nuklear/nk_common.c +++ b/menu/drivers/nuklear/nk_common.c @@ -1,7 +1,7 @@ /* RetroArch - A frontend for libretro. * Copyright (C) 2011-2017 - Daniel De Matteis - * Copyright (C) 2014-2017 - Jean-Andr� Santoni - * Copyright (C) 2016-2017 - Andr�s Su�rez + * Copyright (C) 2014-2017 - Jean-André Santoni + * Copyright (C) 2016-2017 - Andrés Suárez * * RetroArch is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found- diff --git a/menu/drivers/ozone/ozone.c b/menu/drivers/ozone/ozone.c index 556b59fe20..4dbea26628 100644 --- a/menu/drivers/ozone/ozone.c +++ b/menu/drivers/ozone/ozone.c @@ -45,6 +45,7 @@ #include "../../../core.h" #include "../../../verbosity.h" #include "../../../tasks/tasks_internal.h" +#include "../../../dynamic.h" ozone_node_t *ozone_alloc_node() { @@ -583,16 +584,16 @@ static int ozone_list_push(void *data, void *userdata, if (settings->bools.menu_show_load_content) { - const struct retro_subsystem_info* subsystem = NULL; - entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST; menu_displaylist_setting(&entry); subsystem = system->subsystem.data; - if (subsystem) + if (subsystem_size > 0) { - for (i = 0; i < (unsigned)system->subsystem.size; i++, subsystem++) + const struct retro_subsystem_info* subsystem = NULL; + subsystem = subsystem_data; + for (i = 0; i < subsystem_size; i++, subsystem++) { char s[PATH_MAX_LENGTH]; if (content_get_subsystem() == i) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 2a2f542a0e..da7dbb0a25 100755 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -55,6 +55,7 @@ #include "../widgets/menu_filebrowser.h" #include "../../verbosity.h" +#include "../../dynamic.h" #include "../../configuration.h" #include "../../playlist.h" #include "../../retroarch.h" @@ -5597,16 +5598,15 @@ static int xmb_list_push(void *data, void *userdata, if (settings->bools.menu_show_load_content) { - const struct retro_subsystem_info* subsystem = NULL; + entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST; menu_displaylist_setting(&entry); - - subsystem = system->subsystem.data; - - if (subsystem) + if (subsystem_size > 0) { - for (i = 0; i < (unsigned)system->subsystem.size; i++, subsystem++) + const struct retro_subsystem_info* subsystem = NULL; + subsystem = subsystem_data; + for (i = 0; i < subsystem_size; i++, subsystem++) { char s[PATH_MAX_LENGTH]; if (content_get_subsystem() == i) diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index c009494f51..2aa5f9348d 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -1,7 +1,7 @@ /* RetroArch - A frontend for libretro. * Copyright (C) 2011-2017 - Daniel De Matteis - * Copyright (C) 2014-2017 - Jean-Andr Santoni - * Copyright (C) 2015-2017 - Andrs Surez + * Copyright (C) 2014-2017 - Jean-André Santoni + * Copyright (C) 2015-2017 - Andrés Suárez * Copyright (C) 2016-2017 - Brad Parker * * RetroArch is free software: you can redistribute it and/or modify it under the terms @@ -2584,25 +2584,6 @@ static int menu_displaylist_parse_load_content_settings( #endif rarch_system_info_t *system = runloop_get_system_info(); -#if 0 - const struct retro_subsystem_info* subsystem = system ? system->subsystem.data : NULL; - - if (subsystem) - { - unsigned p; - - for (p = 0; p < system->subsystem.size; p++, subsystem++) - { - char s[PATH_MAX_LENGTH]; - snprintf(s, sizeof(s), "%s (%s)", msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST), subsystem->desc); - menu_entries_append_enum(info->list, - s, - msg_hash_to_str(MENU_ENUM_LABEL_LOAD_CONTENT_SPECIAL), - MENU_ENUM_LABEL_LOAD_CONTENT_SPECIAL, - MENU_SETTING_ACTION, 0, 0); - } - } -#endif menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RESUME_CONTENT), msg_hash_to_str(MENU_ENUM_LABEL_RESUME_CONTENT), @@ -2633,7 +2614,7 @@ static int menu_displaylist_parse_load_content_settings( if (settings->bools.quick_menu_show_save_load_state #ifdef HAVE_CHEEVOS - && !cheevos_hardcore_active + && !cheevos_hardcore_active #endif ) { diff --git a/menu/widgets/menu_filebrowser.c b/menu/widgets/menu_filebrowser.c index 89fe44c091..ee19acefbe 100644 --- a/menu/widgets/menu_filebrowser.c +++ b/menu/widgets/menu_filebrowser.c @@ -39,6 +39,7 @@ #include "../../core.h" #include "../../content.h" #include "../../verbosity.h" +#include "../../dynamic.h" static enum filebrowser_enums filebrowser_types = FILEBROWSER_NONE; @@ -83,10 +84,9 @@ void filebrowser_parse(menu_displaylist_info_t *info, unsigned type_data) str_list = file_archive_get_file_list(path, info->exts); else { - rarch_system_info_t *system = runloop_get_system_info(); - const struct retro_subsystem_info *subsystem = system->subsystem.data + content_get_subsystem(); + const struct retro_subsystem_info *subsystem = &subsystem_data[content_get_subsystem()]; - if (subsystem) + if (subsystem_size > 0) str_list = file_archive_get_file_list(path, subsystem->roms[content_get_subsystem_rom_id()].valid_extensions); } } @@ -94,11 +94,9 @@ void filebrowser_parse(menu_displaylist_info_t *info, unsigned type_data) { if (filebrowser_types == FILEBROWSER_SELECT_FILE_SUBSYSTEM) { - rarch_system_info_t *system = runloop_get_system_info(); - const struct retro_subsystem_info *subsystem = - system->subsystem.data + content_get_subsystem(); + const struct retro_subsystem_info *subsystem = &subsystem_data[content_get_subsystem()]; - if (subsystem && content_get_subsystem_rom_id() < subsystem->num_roms) + if (subsystem_size > 0 && content_get_subsystem_rom_id() < subsystem->num_roms) str_list = dir_list_new(path, (filter_ext && info) ? subsystem->roms[content_get_subsystem_rom_id()].valid_extensions : NULL, true, settings->bools.show_hidden_files, true, false); diff --git a/paths.c b/paths.c index b956989638..869d6b8e34 100644 --- a/paths.c +++ b/paths.c @@ -311,7 +311,7 @@ static bool path_init_subsystem(void) /* For subsystems, we know exactly which RAM types are supported. */ info = libretro_find_subsystem_info( - system->subsystem.data, + subsystem_data, system->subsystem.size, path_get(RARCH_PATH_SUBSYSTEM)); diff --git a/tasks/task_content.c b/tasks/task_content.c index af28c4fcac..3db8f943b0 100644 --- a/tasks/task_content.c +++ b/tasks/task_content.c @@ -1782,11 +1782,11 @@ void content_set_subsystem(unsigned idx) { rarch_system_info_t *system = runloop_get_system_info(); const struct retro_subsystem_info *subsystem = system ? - system->subsystem.data + idx : NULL; + subsystem_data + idx : NULL; pending_subsystem_id = idx; - if (subsystem) + if (subsystem_size > 0) { strlcpy(pending_subsystem_ident, subsystem->ident, sizeof(pending_subsystem_ident)); From bc0dbffc0197f9e23fd6ff4cea3445847908f058 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 26 Nov 2018 18:09:57 +0100 Subject: [PATCH 02/40] Revert "Change custom_command_method_t returntype to int64_t" This reverts commit e13efbd40046aac507d27e58a7767dd1f6805530. --- gfx/drivers/d3d9.c | 4 ++-- gfx/drivers/gl.c | 8 ++++---- gfx/video_thread_wrapper.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gfx/drivers/d3d9.c b/gfx/drivers/d3d9.c index 407f9731f1..a383190b48 100644 --- a/gfx/drivers/d3d9.c +++ b/gfx/drivers/d3d9.c @@ -1990,14 +1990,14 @@ static void d3d9_video_texture_load_d3d( *id = (uintptr_t)tex; } -static int64_t d3d9_video_texture_load_wrap_d3d(void *data) +static int d3d9_video_texture_load_wrap_d3d(void *data) { uintptr_t id = 0; struct d3d9_texture_info *info = (struct d3d9_texture_info*)data; if (!info) return 0; d3d9_video_texture_load_d3d(info, &id); - return (int64_t)(uintptr_t)id; + return id; } static uintptr_t d3d9_load_texture(void *video_data, void *data, diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 1c523db69d..f9b93604fd 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -2509,7 +2509,7 @@ static void video_texture_load_gl( } #ifdef HAVE_THREADS -static int64_t video_texture_load_wrap_gl_mipmap(void *data) +static int video_texture_load_wrap_gl_mipmap(void *data) { uintptr_t id = 0; @@ -2517,10 +2517,10 @@ static int64_t video_texture_load_wrap_gl_mipmap(void *data) return 0; video_texture_load_gl((struct texture_image*)data, TEXTURE_FILTER_MIPMAP_LINEAR, &id); - return (int64_t)(uintptr_t)id; + return (int)id; } -static int64_t video_texture_load_wrap_gl(void *data) +static int video_texture_load_wrap_gl(void *data) { uintptr_t id = 0; @@ -2528,7 +2528,7 @@ static int64_t video_texture_load_wrap_gl(void *data) return 0; video_texture_load_gl((struct texture_image*)data, TEXTURE_FILTER_LINEAR, &id); - return (int64_t)(uintptr_t)id; + return (int)id; } #endif diff --git a/gfx/video_thread_wrapper.h b/gfx/video_thread_wrapper.h index 300517659c..3fd306590a 100644 --- a/gfx/video_thread_wrapper.h +++ b/gfx/video_thread_wrapper.h @@ -27,7 +27,7 @@ RETRO_BEGIN_DECLS -typedef int64_t (*custom_command_method_t)(void*); +typedef int (*custom_command_method_t)(void*); typedef bool (*custom_font_command_method_t)(const void **font_driver, void **font_handle, void *video_data, const char *font_path, From 9d76a6bb0002ad1607c9dcfbe67ef86e918c8674 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Mon, 26 Nov 2018 18:59:50 -0500 Subject: [PATCH 03/40] Update config.def.h --- config.def.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.def.h b/config.def.h index 85a7104506..38882709db 100644 --- a/config.def.h +++ b/config.def.h @@ -240,7 +240,7 @@ static const float aspect_ratio = DEFAULT_ASPECT_RATIO; /* 1:1 PAR */ static const bool aspect_ratio_auto = false; -#if defined(__CELLOS_LV2) || defined(_XBOX360) || defined(ANDROID_AARCH64) +#if defined(__CELLOS_LV2) || defined(_XBOX360) static unsigned aspect_ratio_idx = ASPECT_RATIO_16_9; #elif defined(PSP) static unsigned aspect_ratio_idx = ASPECT_RATIO_CORE; From aab6a86633c7d06b58010ce54ba6377afb3ee3f1 Mon Sep 17 00:00:00 2001 From: radius Date: Mon, 26 Nov 2018 21:15:03 -0500 Subject: [PATCH 04/40] only apply fixed window size when the setting is enabled --- gfx/video_driver.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gfx/video_driver.c b/gfx/video_driver.c index e544ab2762..e82e19d022 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -986,7 +986,8 @@ static bool video_driver_init_internal(bool *video_is_threaded) else { /* To-Do: remove when the new window resizing core is hooked */ - if (settings->uints.window_position_width || settings->uints.window_position_height) + if (settings->bools.video_window_save_positions && + (settings->uints.window_position_width || settings->uints.window_position_height)) { width = settings->uints.window_position_width; height = settings->uints.window_position_height; From 4ca7ebc9dabf068c1dd24ec425da1933d36a9d52 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 27 Nov 2018 11:28:24 +0100 Subject: [PATCH 05/40] Add xrandr implementation for get_output_options --- Makefile.common | 2 +- gfx/display_servers/dispserv_x11.c | 38 ++++++++++++++++++++++++++++++ qb/config.libs.sh | 3 ++- qb/config.params.sh | 1 + 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/Makefile.common b/Makefile.common index 6218fa317a..4ed626d02a 100644 --- a/Makefile.common +++ b/Makefile.common @@ -903,7 +903,7 @@ ifeq ($(HAVE_X11), 1) gfx/common/xinerama_common.o \ gfx/display_servers/dispserv_x11.o - LIBS += $(X11_LIBS) $(XEXT_LIBS) $(XF86VM_LIBS) $(XINERAMA_LIBS) + LIBS += $(X11_LIBS) $(XEXT_LIBS) $(XF86VM_LIBS) $(XINERAMA_LIBS) $(XRANDR_LIBS) DEFINES += -DHAVE_X11 $(X11_CFLAGS) $(XEXT_CFLAGS) $(XF86VM_CFLAGS) $(XINERAMA_CFLAGS) ifeq ($(HAVE_XCB),1) LIBS += -lX11-xcb diff --git a/gfx/display_servers/dispserv_x11.c b/gfx/display_servers/dispserv_x11.c index 29a13fec55..a4d727ddc1 100644 --- a/gfx/display_servers/dispserv_x11.c +++ b/gfx/display_servers/dispserv_x11.c @@ -14,9 +14,18 @@ * You should have received a copy of the GNU General Public License along with RetroArch. * If not, see . */ + +#include + #include #include +#include "../../config.h" + +#ifdef HAVE_XRANDR +#include +#endif + #include "../video_display_server.h" #include "../common/x11_common.h" #include "../../configuration.h" @@ -284,8 +293,37 @@ static bool x11_display_server_set_resolution(void *data, const char *x11_display_server_get_output_options(void *data) { +#ifdef HAVE_XRANDR + Display *dpy; + XRRScreenResources *res; + XRROutputInfo *info; + Window root; + int i; + static char s[PATH_MAX_LENGTH]; + + if (!(dpy = XOpenDisplay(0))) + return NULL; + + root = RootWindow(dpy, DefaultScreen(dpy)); + + if (!(res = XRRGetScreenResources(dpy, root))) + return NULL; + + for (i = 0; i < res->noutput; i++) + { + if (!(info = XRRGetOutputInfo(dpy, res, res->outputs[i]))) + return NULL; + + strlcat(s, info->name, sizeof(s)); + if ((i+1) < res->noutput) + strlcat(s, "|", sizeof(s)); + } + + return s; +#else /* TODO/FIXME - hardcoded for now; list should be built up dynamically later */ return "HDMI-0|HDMI-1|HDMI-2|HDMI-3|DVI-0|DVI-1|DVI-2|DVI-3|VGA-0|VGA-1|VGA-2|VGA-3|Config"; +#endif } const video_display_server_t dispserv_x11 = { diff --git a/qb/config.libs.sh b/qb/config.libs.sh index 233fd9760a..4e911b3826 100644 --- a/qb/config.libs.sh +++ b/qb/config.libs.sh @@ -482,9 +482,10 @@ else fi if [ "$HAVE_X11" = 'no' ]; then - HAVE_XEXT=no; HAVE_XF86VM=no; HAVE_XINERAMA=no; HAVE_XSHM=no + HAVE_XEXT=no; HAVE_XF86VM=no; HAVE_XINERAMA=no; HAVE_XSHM=no; HAVE_XRANDR=no fi +check_lib '' XRANDR -lXrandr check_pkgconf XINERAMA xinerama check_val '' XINERAMA -lXinerama diff --git a/qb/config.params.sh b/qb/config.params.sh index daf9206eaf..9c1f3d7ef3 100644 --- a/qb/config.params.sh +++ b/qb/config.params.sh @@ -59,6 +59,7 @@ HAVE_OPENDINGUX_FBDEV=no # Opendingux fbdev context support HAVE_OPENGLES=no # Use GLESv2 instead of desktop GL HAVE_OPENGLES3=no # OpenGLES3 support HAVE_X11=auto # everything X11. +HAVE_XRANDR=auto # Xrandr support. HAVE_OMAP=no # OMAP video support HAVE_XINERAMA=auto # Xinerama support. HAVE_KMS=auto # KMS context support From 803af8a89098c6dd1c6dd56fad1bfae2eec93f5d Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 27 Nov 2018 11:55:03 +0100 Subject: [PATCH 06/40] Add brackets around this --- menu/menu_setting.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/menu/menu_setting.c b/menu/menu_setting.c index edf7979b35..a009d79c31 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -5390,13 +5390,20 @@ static bool setting_append_list( CMD_EVENT_VIDEO_APPLY_STATE_CHANGES); settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED); - CONFIG_ACTION( - list, list_info, - MENU_ENUM_LABEL_SCREEN_RESOLUTION, - MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION, - &group_info, - &subgroup_info, - parent_group); +#if defined(GEKKO) || defined(__CELLOS_LV2__) + if (true) +#else + if (!string_is_equal(video_display_server_get_ident(), "null")) +#endif + { + CONFIG_ACTION( + list, list_info, + MENU_ENUM_LABEL_SCREEN_RESOLUTION, + MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION, + &group_info, + &subgroup_info, + parent_group); + } CONFIG_UINT( list, list_info, From ffaafbc77cd6739321b73dd63b4e0e9a8fc9edea Mon Sep 17 00:00:00 2001 From: natinusala Date: Tue, 27 Nov 2018 15:32:43 +0100 Subject: [PATCH 07/40] ozone: fix scroll when rebinding inputs --- menu/drivers/ozone/ozone.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/menu/drivers/ozone/ozone.c b/menu/drivers/ozone/ozone.c index a35feded9e..b5d4a177d9 100644 --- a/menu/drivers/ozone/ozone.c +++ b/menu/drivers/ozone/ozone.c @@ -774,9 +774,8 @@ static void ozone_update_scroll(ozone_handle_t *ozone, bool allow_animation, ozo bottom_boundary = video_info_height - 87 - 78; entries_middle = video_info_height/2; - if (current_selection_middle_onscreen != entries_middle) - new_scroll = ozone->animations.scroll_y - (current_selection_middle_onscreen - entries_middle); - + new_scroll = ozone->animations.scroll_y - (current_selection_middle_onscreen - entries_middle); + if (new_scroll + ozone->entries_height < bottom_boundary) new_scroll = -(78 + ozone->entries_height - bottom_boundary); From a7b93ff501280f95c914e126df7ae3b9e440d5a8 Mon Sep 17 00:00:00 2001 From: natinusala Date: Tue, 27 Nov 2018 15:44:08 +0100 Subject: [PATCH 08/40] Add generated Wayland protos to .gitignore --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index 28188376c9..1094b5599e 100644 --- a/.gitignore +++ b/.gitignore @@ -163,3 +163,9 @@ retroarch_switch.lst retroarch_switch.nacp retroarch_switch.nro retroarch_switch.nso + +# Wayland +gfx/common/wayland/idle-inhibit-unstable-v1.c +gfx/common/wayland/idle-inhibit-unstable-v1.h +gfx/common/wayland/xdg-shell.c +gfx/common/wayland/xdg-shell.h From e15dd10237a328fe511080c71b5aa047387733ec Mon Sep 17 00:00:00 2001 From: Rob Loach Date: Tue, 27 Nov 2018 13:19:50 -0500 Subject: [PATCH 09/40] ozone: Fix subsystem_data being undefined subsystem_data was not defined, seemed like a declaration of subsystem was in the wrong place. --- menu/drivers/ozone/ozone.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/menu/drivers/ozone/ozone.c b/menu/drivers/ozone/ozone.c index 6f5a285ffa..eac8d269e3 100644 --- a/menu/drivers/ozone/ozone.c +++ b/menu/drivers/ozone/ozone.c @@ -587,12 +587,9 @@ static int ozone_list_push(void *data, void *userdata, entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST; menu_displaylist_setting(&entry); - subsystem = system->subsystem.data; - if (subsystem_size > 0) { - const struct retro_subsystem_info* subsystem = NULL; - subsystem = subsystem_data; + const struct retro_subsystem_info* subsystem = system->subsystem.data; for (i = 0; i < subsystem_size; i++, subsystem++) { char s[PATH_MAX_LENGTH]; From 09698d33a26c95e7d837569d0deb90857ffead92 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 27 Nov 2018 19:52:30 +0100 Subject: [PATCH 10/40] Buildfix --- menu/drivers/ozone/ozone.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/menu/drivers/ozone/ozone.c b/menu/drivers/ozone/ozone.c index 6f5a285ffa..2c484d03f5 100644 --- a/menu/drivers/ozone/ozone.c +++ b/menu/drivers/ozone/ozone.c @@ -587,8 +587,6 @@ static int ozone_list_push(void *data, void *userdata, entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST; menu_displaylist_setting(&entry); - subsystem = system->subsystem.data; - if (subsystem_size > 0) { const struct retro_subsystem_info* subsystem = NULL; From 1d14512cb05591a540a161307df148a8ec889275 Mon Sep 17 00:00:00 2001 From: dukemiller Date: Tue, 27 Nov 2018 18:59:22 -0700 Subject: [PATCH 11/40] Allow framecount to be displayed independently without fps counter --- gfx/video_driver.c | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/gfx/video_driver.c b/gfx/video_driver.c index e82e19d022..2d9d2baa74 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -2449,10 +2449,13 @@ void video_driver_frame(const void *data, unsigned width, char frames_text[64]; last_fps = TIME_TO_FPS(curr_time, new_time, FPS_UPDATE_INTERVAL); - if (video_info.fps_show) + if (video_info.fps_show || video_info.framecount_show) { - snprintf(video_info.fps_text, sizeof(video_info.fps_text), - "|| FPS: %6.1f ", last_fps); + if (video_info.fps_show) + { + snprintf(video_info.fps_text, sizeof(video_info.fps_text), + "|| FPS: %6.1f ", last_fps); + } if (video_info.framecount_show) { snprintf(frames_text, @@ -2462,6 +2465,7 @@ void video_driver_frame(const void *data, unsigned width, } snprintf(video_driver_window_title, sizeof(video_driver_window_title), "%s%s%s", title, video_info.fps_text, + video_info.fps_show ? video_info.fps_text : "", video_info.framecount_show ? frames_text : ""); } else @@ -2491,6 +2495,28 @@ void video_driver_frame(const void *data, unsigned width, "FPS: %6.1f", last_fps); } + + if (video_info.fps_show && video_info.framecount_show) + snprintf( + video_info.fps_text, + sizeof(video_info.fps_text), + "FPS: %6.1f || %s: %" PRIu64, + last_fps, + msg_hash_to_str(MSG_FRAMES), + (uint64_t)video_driver_frame_count); + else if (video_info.framecount_show) + snprintf( + video_info.fps_text, + sizeof(video_info.fps_text), + "%s: %" PRIu64, + msg_hash_to_str(MSG_FRAMES), + (uint64_t)video_driver_frame_count); + else if (video_info.fps_show) + snprintf( + video_info.fps_text, + sizeof(video_info.fps_text), + "FPS: %6.1f", + last_fps); } else { @@ -2620,7 +2646,7 @@ void video_driver_frame(const void *data, unsigned width, video_driver_frame_count++; /* Display the FPS, with a higher priority. */ - if (video_info.fps_show) + if (video_info.fps_show || video_info.framecount_show) runloop_msg_queue_push(video_info.fps_text, 2, 1, true); /* trigger set resolution*/ From f3c682186c826fe6985eab81efec289aecd82be2 Mon Sep 17 00:00:00 2001 From: dukemiller Date: Tue, 27 Nov 2018 19:00:26 -0700 Subject: [PATCH 12/40] Add submenu label for framecount and change wording --- config.def.h | 2 +- intl/msg_hash_ar.h | 2 +- intl/msg_hash_el.h | 2 +- intl/msg_hash_us.h | 6 +++++- menu/cbs/menu_cbs_sublabel.c | 4 ++++ 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/config.def.h b/config.def.h index 38882709db..ed75f79bbe 100644 --- a/config.def.h +++ b/config.def.h @@ -549,7 +549,7 @@ static const int wasapi_sh_buffer_length = -16; /* auto */ /* Enables displaying the current frames per second. */ static const bool fps_show = false; -/* Show frame count on FPS display */ +/* Enables displaying the current frame count. */ static const bool framecount_show = true; /* Enables use of rewind. This will incur some memory footprint diff --git a/intl/msg_hash_ar.h b/intl/msg_hash_ar.h index 865fd63e2b..b4ba128781 100644 --- a/intl/msg_hash_ar.h +++ b/intl/msg_hash_ar.h @@ -3432,7 +3432,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_COLOR_GREEN, MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_COLOR_BLUE, "Notification Blue Color") MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAMECOUNT_SHOW, - "Show frame count on FPS display") + "Display Frame Count") MSG_HASH(MSG_CONFIG_OVERRIDE_LOADED, "Configuration override loaded.") MSG_HASH(MSG_GAME_REMAP_FILE_LOADED, diff --git a/intl/msg_hash_el.h b/intl/msg_hash_el.h index 3954649d49..c614822049 100644 --- a/intl/msg_hash_el.h +++ b/intl/msg_hash_el.h @@ -6224,7 +6224,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_FRAMECOUNT_SHOW, - "Show frame count on FPS display" + "Display Frame Count" ) MSG_HASH( MSG_CONFIG_OVERRIDE_LOADED, diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 15bd1b26c3..a2f4bd8d41 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -3630,6 +3630,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_FPS_SHOW, "Displays the current framerate per second onscreen." ) +MSG_HASH( + MENU_ENUM_SUBLABEL_FRAMECOUNT_SHOW, + "Displays the current frame count onscreen." + ) MSG_HASH( MENU_ENUM_SUBLABEL_INPUT_HOTKEY_BINDS, "Configure hotkey settings." @@ -6265,7 +6269,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_FRAMECOUNT_SHOW, - "Show frame count on FPS display" + "Display Frame Count" ) MSG_HASH( MSG_CONFIG_OVERRIDE_LOADED, diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index ca9b61fcb6..92c2fc8f9c 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -124,6 +124,7 @@ default_sublabel_macro(action_bind_sublabel_user_language, MENU_ default_sublabel_macro(action_bind_sublabel_max_swapchain_images, MENU_ENUM_SUBLABEL_VIDEO_MAX_SWAPCHAIN_IMAGES ) default_sublabel_macro(action_bind_sublabel_online_updater, MENU_ENUM_SUBLABEL_ONLINE_UPDATER) default_sublabel_macro(action_bind_sublabel_fps_show, MENU_ENUM_SUBLABEL_FPS_SHOW) +default_sublabel_macro(action_bind_sublabel_framecount_show, MENU_ENUM_SUBLABEL_FRAMECOUNT_SHOW) default_sublabel_macro(action_bind_sublabel_statistics_show, MENU_ENUM_SUBLABEL_STATISTICS_SHOW) default_sublabel_macro(action_bind_sublabel_netplay_settings, MENU_ENUM_SUBLABEL_NETPLAY) default_sublabel_macro(action_bind_sublabel_user_bind_settings, MENU_ENUM_SUBLABEL_INPUT_USER_BINDS) @@ -1873,6 +1874,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_FPS_SHOW: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_fps_show); break; + case MENU_ENUM_LABEL_FRAMECOUNT_SHOW: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_framecount_show); + break; case MENU_ENUM_LABEL_MENU_VIEWS_SETTINGS: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_views_settings_list); break; From be9d4c63ec70d758479120e025f6429cbd22b287 Mon Sep 17 00:00:00 2001 From: dukemiller Date: Tue, 27 Nov 2018 19:01:35 -0700 Subject: [PATCH 13/40] Re-arrange menu options to put related settings closer together --- menu/menu_displaylist.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 5249e21a91..1d0f6687b3 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -5601,10 +5601,10 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist MENU_ENUM_LABEL_FPS_SHOW, PARSE_ONLY_BOOL, false); menu_displaylist_parse_settings_enum(menu, info, - MENU_ENUM_LABEL_STATISTICS_SHOW, + MENU_ENUM_LABEL_FRAMECOUNT_SHOW, PARSE_ONLY_BOOL, false); menu_displaylist_parse_settings_enum(menu, info, - MENU_ENUM_LABEL_FRAMECOUNT_SHOW, + MENU_ENUM_LABEL_STATISTICS_SHOW, PARSE_ONLY_BOOL, false); menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_VIDEO_FONT_PATH, From 4d55c74f29ba01be3b6f9c13dedb791d6adf300f Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Wed, 28 Nov 2018 06:08:44 +0100 Subject: [PATCH 14/40] Revert "ozone: Fix subsystem_data being undefined" --- menu/drivers/ozone/ozone.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/menu/drivers/ozone/ozone.c b/menu/drivers/ozone/ozone.c index eac8d269e3..2c484d03f5 100644 --- a/menu/drivers/ozone/ozone.c +++ b/menu/drivers/ozone/ozone.c @@ -589,7 +589,8 @@ static int ozone_list_push(void *data, void *userdata, if (subsystem_size > 0) { - const struct retro_subsystem_info* subsystem = system->subsystem.data; + const struct retro_subsystem_info* subsystem = NULL; + subsystem = subsystem_data; for (i = 0; i < subsystem_size; i++, subsystem++) { char s[PATH_MAX_LENGTH]; From 34fe9205dbf342798efb01a25b3fb628666a5365 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Wed, 28 Nov 2018 06:11:08 +0100 Subject: [PATCH 15/40] Revert "Revert "ozone: Fix subsystem_data being undefined"" --- menu/drivers/ozone/ozone.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/menu/drivers/ozone/ozone.c b/menu/drivers/ozone/ozone.c index 2c484d03f5..eac8d269e3 100644 --- a/menu/drivers/ozone/ozone.c +++ b/menu/drivers/ozone/ozone.c @@ -589,8 +589,7 @@ static int ozone_list_push(void *data, void *userdata, if (subsystem_size > 0) { - const struct retro_subsystem_info* subsystem = NULL; - subsystem = subsystem_data; + const struct retro_subsystem_info* subsystem = system->subsystem.data; for (i = 0; i < subsystem_size; i++, subsystem++) { char s[PATH_MAX_LENGTH]; From 8294bf86dfeee77103237ba371384b63821d9c0b Mon Sep 17 00:00:00 2001 From: dukemiller Date: Thu, 22 Nov 2018 16:27:55 -0700 Subject: [PATCH 16/40] Create option for dx video drivers to toggle displaying memory use --- config.def.h | 3 +++ configuration.c | 1 + configuration.h | 1 + gfx/common/dxgi_common.c | 5 +++-- intl/msg_hash_lbl.h | 2 ++ intl/msg_hash_us.c | 5 +++++ intl/msg_hash_us.h | 8 ++++++++ menu/cbs/menu_cbs_sublabel.c | 4 ++++ menu/menu_displaylist.c | 3 +++ menu/menu_setting.c | 15 +++++++++++++++ msg_hash.h | 1 + retroarch.cfg | 3 +++ 12 files changed, 49 insertions(+), 2 deletions(-) diff --git a/config.def.h b/config.def.h index ed75f79bbe..6bf045ab21 100644 --- a/config.def.h +++ b/config.def.h @@ -552,6 +552,9 @@ static const bool fps_show = false; /* Enables displaying the current frame count. */ static const bool framecount_show = true; +/* Includes displaying the current memory usage/total with FPS/Frames. */ +static const bool memory_show = false; + /* Enables use of rewind. This will incur some memory footprint * depending on the save state buffer. */ static const bool rewind_enable = false; diff --git a/configuration.c b/configuration.c index 0d209a5940..db570b0d95 100644 --- a/configuration.c +++ b/configuration.c @@ -1318,6 +1318,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings, SETTING_BOOL("fps_show", &settings->bools.video_fps_show, true, false, false); SETTING_BOOL("statistics_show", &settings->bools.video_statistics_show, true, false, false); SETTING_BOOL("framecount_show", &settings->bools.video_framecount_show, true, true, false); + SETTING_BOOL("memory_show", &settings->bools.video_memory_show, true, false, 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); diff --git a/configuration.h b/configuration.h index dee5497cb8..f2c71cb15c 100644 --- a/configuration.h +++ b/configuration.h @@ -103,6 +103,7 @@ typedef struct settings bool video_fps_show; bool video_statistics_show; bool video_framecount_show; + bool video_memory_show; bool video_msg_bgcolor_enable; bool video_3ds_lcd_bottom; diff --git a/gfx/common/dxgi_common.c b/gfx/common/dxgi_common.c index e7065979fc..3d935f41d2 100644 --- a/gfx/common/dxgi_common.c +++ b/gfx/common/dxgi_common.c @@ -305,8 +305,9 @@ void dxgi_copy( void dxgi_update_title(video_frame_info_t* video_info) { const ui_window_t* window = ui_companion_driver_get_window_ptr(); + const settings_t *settings = config_get_ptr(); - if (video_info->fps_show) + if (settings->bools.video_memory_show) { MEMORYSTATUS stat; char mem[128]; @@ -315,7 +316,7 @@ void dxgi_update_title(video_frame_info_t* video_info) GlobalMemoryStatus(&stat); snprintf( - mem, sizeof(mem), "|| MEM: %.2f/%.2fMB", stat.dwAvailPhys / (1024.0f * 1024.0f), + mem, sizeof(mem), " || MEM: %.2f/%.2fMB", stat.dwAvailPhys / (1024.0f * 1024.0f), stat.dwTotalPhys / (1024.0f * 1024.0f)); strlcat(video_info->fps_text, mem, sizeof(video_info->fps_text)); } diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index 1571d7e991..c9cb27d08f 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -1551,6 +1551,8 @@ MSG_HASH(MENU_ENUM_LABEL_VIDEO_MESSAGE_COLOR_BLUE, "video_msg_color_blue") MSG_HASH(MENU_ENUM_LABEL_FRAMECOUNT_SHOW, "framecount_show") +MSG_HASH(MENU_ENUM_LABEL_MEMORY_SHOW, + "memory_show") MSG_HASH(MENU_ENUM_LABEL_AUTOMATICALLY_ADD_CONTENT_TO_PLAYLIST, "automatically_add_content_to_playlist") MSG_HASH(MENU_ENUM_LABEL_VIDEO_WINDOW_OPACITY, diff --git a/intl/msg_hash_us.c b/intl/msg_hash_us.c index 83db0a6a8e..e2d5c9c970 100644 --- a/intl/msg_hash_us.c +++ b/intl/msg_hash_us.c @@ -567,6 +567,11 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) "Enables displaying the current frames \n" "per second."); break; + case MENU_ENUM_LABEL_MEMORY_SHOW: + snprintf(s, len, + "Includes displaying the current memory \n" + "usage/total with FPS/Frames."); + break; case MENU_ENUM_LABEL_VIDEO_FONT_ENABLE: snprintf(s, len, "Show and/or hide onscreen messages."); diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index a2f4bd8d41..bc5a90f3be 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -843,6 +843,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_FPS_SHOW, "Display Framerate" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_MEMORY_SHOW, + "Include Memory Details" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_ENABLE, "Limit Maximum Run Speed" @@ -3634,6 +3638,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_FRAMECOUNT_SHOW, "Displays the current frame count onscreen." ) +MSG_HASH( + MENU_ENUM_SUBLABEL_MEMORY_SHOW, + "Includes the current memory usage/total onscreen with FPS/Frames." + ) MSG_HASH( MENU_ENUM_SUBLABEL_INPUT_HOTKEY_BINDS, "Configure hotkey settings." diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index 92c2fc8f9c..81347b8267 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -125,6 +125,7 @@ default_sublabel_macro(action_bind_sublabel_max_swapchain_images, MENU_ default_sublabel_macro(action_bind_sublabel_online_updater, MENU_ENUM_SUBLABEL_ONLINE_UPDATER) default_sublabel_macro(action_bind_sublabel_fps_show, MENU_ENUM_SUBLABEL_FPS_SHOW) default_sublabel_macro(action_bind_sublabel_framecount_show, MENU_ENUM_SUBLABEL_FRAMECOUNT_SHOW) +default_sublabel_macro(action_bind_sublabel_memory_show, MENU_ENUM_SUBLABEL_MEMORY_SHOW) default_sublabel_macro(action_bind_sublabel_statistics_show, MENU_ENUM_SUBLABEL_STATISTICS_SHOW) default_sublabel_macro(action_bind_sublabel_netplay_settings, MENU_ENUM_SUBLABEL_NETPLAY) default_sublabel_macro(action_bind_sublabel_user_bind_settings, MENU_ENUM_SUBLABEL_INPUT_USER_BINDS) @@ -1877,6 +1878,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_FRAMECOUNT_SHOW: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_framecount_show); break; + case MENU_ENUM_LABEL_MEMORY_SHOW: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_memory_show); + break; case MENU_ENUM_LABEL_MENU_VIEWS_SETTINGS: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_views_settings_list); break; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 1d0f6687b3..d28adcf9b3 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -5606,6 +5606,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_STATISTICS_SHOW, PARSE_ONLY_BOOL, false); + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_MEMORY_SHOW, + PARSE_ONLY_BOOL, false); menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_VIDEO_FONT_PATH, PARSE_ONLY_PATH, false); diff --git a/menu/menu_setting.c b/menu/menu_setting.c index a009d79c31..c14112d8ee 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -5102,6 +5102,21 @@ static bool setting_append_list( general_read_handler, SD_FLAG_NONE); + CONFIG_BOOL( + list, list_info, + &settings->bools.video_memory_show, + MENU_ENUM_LABEL_MEMORY_SHOW, + MENU_ENUM_LABEL_VALUE_MEMORY_SHOW, + memory_show, + 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_BOOL( list, list_info, &settings->bools.video_statistics_show, diff --git a/msg_hash.h b/msg_hash.h index 3c16be4e89..5c4e151916 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -1231,6 +1231,7 @@ enum msg_hash_enums MENU_LABEL(SHADER_PREV), MENU_LABEL(FRAME_ADVANCE), MENU_LABEL(FPS_SHOW), + MENU_LABEL(MEMORY_SHOW), MENU_LABEL(STATISTICS_SHOW), MENU_LABEL(FRAMECOUNT_SHOW), MENU_LABEL(BSV_RECORD_TOGGLE), diff --git a/retroarch.cfg b/retroarch.cfg index 671fa4a73c..da36413bda 100644 --- a/retroarch.cfg +++ b/retroarch.cfg @@ -124,6 +124,9 @@ # Display framerate. # fps_show = false +# Display memory. +# memory_show = false + # Display total number of frames rendered. (only displays if fps_show is enabled) # framecount_show = From b89410043a701770c26a2cfebfad8579f642bff7 Mon Sep 17 00:00:00 2001 From: grant2258 Date: Wed, 28 Nov 2018 08:22:33 +0000 Subject: [PATCH 17/40] add missing %s --- gfx/video_driver.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gfx/video_driver.c b/gfx/video_driver.c index 2d9d2baa74..de50911b15 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -2464,7 +2464,7 @@ void video_driver_frame(const void *data, unsigned width, (uint64_t)video_driver_frame_count); } snprintf(video_driver_window_title, sizeof(video_driver_window_title), - "%s%s%s", title, video_info.fps_text, + "%s%s%s%s", title, video_info.fps_text, video_info.fps_show ? video_info.fps_text : "", video_info.framecount_show ? frames_text : ""); } From 2777ee2fa4ec15d3545cb664653f497b0a02a9b9 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 28 Nov 2018 09:49:28 +0100 Subject: [PATCH 18/40] Fix memory leak --- menu/drivers/xmb.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 106da86156..f97b7cf352 100755 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -4620,9 +4620,9 @@ static bool xmb_load_image(void *userdata, void *data, enum menu_image_type type static const char *xmb_texture_path(unsigned id) { - char *iconpath = (char*) malloc(PATH_MAX_LENGTH * sizeof(char)); - char *icon_name = (char*) malloc(PATH_MAX_LENGTH * sizeof(char)); - char *icon_fullpath = (char*) malloc(PATH_MAX_LENGTH * sizeof(char)); + char *iconpath = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); + char *icon_name = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); + char *icon_fullpath = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); iconpath[0] = icon_name[0] = icon_fullpath[0] = '\0'; @@ -4963,11 +4963,12 @@ static const char *xmb_texture_path(unsigned id) if (!filestream_exists(icon_fullpath)) { RARCH_WARN("[XMB] Asset missing: %s\n", icon_fullpath); + free(icon_fullpath); return NULL; } - else - return icon_name; + free(icon_fullpath); + return icon_name; } static void xmb_context_reset_textures( From af469698da2d669c1c6a5d0a36dc65563b815ef6 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 28 Nov 2018 09:56:12 +0100 Subject: [PATCH 19/40] Silence threading error --- verbosity.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/verbosity.c b/verbosity.c index 823607b583..42a79f4977 100644 --- a/verbosity.c +++ b/verbosity.c @@ -126,9 +126,12 @@ void retro_main_log_file_init(const char *path) void retro_main_log_file_deinit(void) { if (log_file_fp && log_file_fp != stderr) + { fclose(log_file_fp); - if (log_file_buf) free(log_file_buf); - log_file_fp = NULL; + log_file_fp = NULL; + } + if (log_file_buf) + free(log_file_buf); log_file_buf = NULL; } From 1c6602e35d8dffaaea46bd7be04cda4f8c0154f6 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 28 Nov 2018 11:02:36 +0100 Subject: [PATCH 20/40] Add thread safety note --- tasks/task_autodetect.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tasks/task_autodetect.c b/tasks/task_autodetect.c index 4f8ac88943..00bb990b85 100644 --- a/tasks/task_autodetect.c +++ b/tasks/task_autodetect.c @@ -114,6 +114,11 @@ static bool input_autoconfigured[MAX_USERS]; static unsigned input_device_name_index[MAX_INPUT_DEVICES]; static bool input_autoconfigure_swap_override; +/* TODO/FIXME - Not thread safe to access this + * on main thread as well in its current state - + * menu_input.c - menu_event calls this function + * right now, while the underlying variable can + * be modified by a task thread. */ bool input_autoconfigure_get_swap_override(void) { return input_autoconfigure_swap_override; From ca0bd95c0ada5d451d06949ceecceba0137a0078 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 28 Nov 2018 11:03:52 +0100 Subject: [PATCH 21/40] FIx MSVC builds --- command.c | 3 ++- dynamic.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/command.c b/command.c index a378a97de9..5eaccec478 100644 --- a/command.c +++ b/command.c @@ -1899,9 +1899,10 @@ bool command_event(enum event_command cmd, void *data) break; case CMD_EVENT_LOAD_CORE: { + bool success = false; subsystem_size = 0; content_clear_subsystem(); - bool success = command_event(CMD_EVENT_LOAD_CORE_PERSIST, NULL); + success = command_event(CMD_EVENT_LOAD_CORE_PERSIST, NULL); (void)success; #ifndef HAVE_DYNAMIC diff --git a/dynamic.c b/dynamic.c index bacbefde07..fda8622334 100644 --- a/dynamic.c +++ b/dynamic.c @@ -185,6 +185,7 @@ static bool environ_cb_get_system_info(unsigned cmd, void *data) case RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO: { unsigned i, j; + unsigned size = i; const struct retro_subsystem_info *info = (const struct retro_subsystem_info*)data; subsystem_size = 0; @@ -206,7 +207,6 @@ static bool environ_cb_get_system_info(unsigned cmd, void *data) } RARCH_LOG("Subsystems: %d\n", i); - unsigned size = i; if (system) { From 1fa89d67c581edf161958cb6327127eb13eb75c6 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 28 Nov 2018 11:14:21 +0100 Subject: [PATCH 22/40] (GX audio) Backport https://github.com/netux79/myra1002/commit/eefc216b0d6739f5b73f85bdc1286d32d53dc072 --- audio/drivers/gx_audio.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/audio/drivers/gx_audio.c b/audio/drivers/gx_audio.c index f28cd06bdc..e41f15f916 100644 --- a/audio/drivers/gx_audio.c +++ b/audio/drivers/gx_audio.c @@ -39,7 +39,6 @@ typedef struct volatile unsigned dma_write; size_t write_ptr; - OSCond cond; bool nonblock; bool is_paused; } gx_audio_t; @@ -63,8 +62,6 @@ static void dma_callback(void) DCFlushRange(wa->data[wa->dma_next], CHUNK_SIZE); AIInitDMA((uint32_t)wa->data[wa->dma_next], CHUNK_SIZE); - - OSSignalCond(wa->cond); } static void *gx_audio_init(const char *device, @@ -95,8 +92,6 @@ static void *gx_audio_init(const char *device, *new_rate = 48000; } - OSInitThreadQueue(&wa->cond); - wa->dma_write = BLOCKS - 1; DCFlushRange(wa->data, sizeof(wa->data)); stop_audio = false; @@ -133,8 +128,7 @@ static ssize_t gx_audio_write(void *data, const void *buf_, size_t size) /* FIXME: Nonblocking audio should break out of loop * when it has nothing to write. */ while ((wa->dma_write == wa->dma_next || - wa->dma_write == wa->dma_busy) && !wa->nonblock) - OSSleepThread(wa->cond); + wa->dma_write == wa->dma_busy) && !wa->nonblock); copy_swapped(wa->data[wa->dma_write] + wa->write_ptr, buf, to_write); @@ -205,10 +199,6 @@ static void gx_audio_free(void *data) AIStopDMA(); AIRegisterDMACallback(NULL); - if (wa->cond) - OSCloseThreadQueue(wa->cond); - wa->cond = 0; - free(data); } From 9cad7135a987a5fa99026d72386195baac1fd547 Mon Sep 17 00:00:00 2001 From: natinusala Date: Wed, 7 Nov 2018 19:25:26 +0100 Subject: [PATCH 23/40] libnx: implement focus gain and loss callbacks --- frontend/drivers/platform_switch.c | 12 ++++++++++++ gfx/drivers/gl.c | 6 ------ gfx/drivers_context/switch_ctx.c | 4 +++- retroarch.c | 6 ++++++ 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/frontend/drivers/platform_switch.c b/frontend/drivers/platform_switch.c index 756c9b8151..c90226cc79 100644 --- a/frontend/drivers/platform_switch.c +++ b/frontend/drivers/platform_switch.c @@ -55,6 +55,8 @@ static const char *elf_path_cst = "/switch/retroarch_switch.nro"; static uint64_t frontend_switch_get_mem_used(void); +bool platform_switch_has_focus = true; + #ifdef HAVE_LIBNX /* Splash */ @@ -69,10 +71,18 @@ extern bool nxlink_connected; #endif static void on_applet_hook(AppletHookType hook, void* param) { + /* Exit request */ if(hook == AppletHookType_OnExitRequest) { RARCH_LOG("Got AppletHook OnExitRequest, exiting.\n"); retroarch_main_quit(); } + /* Focus state*/ + else if (hook == AppletHookType_OnFocusState) { + AppletFocusState focus_state = appletGetFocusState(); + RARCH_LOG("Got AppletHook OnFocusState - new focus state is %d\n", focus_state); + + platform_switch_has_focus = focus_state == AppletFocusState_Focused; + } } #endif /* HAVE_LIBNX */ @@ -621,6 +631,8 @@ static void frontend_switch_init(void *data) nifmInitialize(); appletLockExit(); appletHook(&applet_hook_cookie, on_applet_hook, NULL); + + appletSetFocusHandlingMode(AppletFocusHandlingMode_NoSuspend); #ifndef HAVE_OPENGL /* Init Resolution before initDefault */ gfxInitResolution(1280, 720); diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index f9b93604fd..d62bd67cf4 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -957,12 +957,6 @@ static bool gl_frame(void *data, const void *frame, if (!gl) return false; -#ifdef HAVE_LIBNX - // Should be called once per frame - if(!appletMainLoop()) - return false; -#endif - gl_context_bind_hw_render(gl, false); if (gl->core_context_in_use && gl->renderchain_driver->bind_vao) diff --git a/gfx/drivers_context/switch_ctx.c b/gfx/drivers_context/switch_ctx.c index ccf3c40d02..47ab760b47 100644 --- a/gfx/drivers_context/switch_ctx.c +++ b/gfx/drivers_context/switch_ctx.c @@ -27,6 +27,8 @@ static enum gfx_ctx_api ctx_nx_api = GFX_CTX_OPENGL_API; switch_ctx_data_t *nx_ctx_ptr = NULL; +extern bool platform_switch_has_focus; + void switch_ctx_destroy(void *data) { switch_ctx_data_t *ctx_nx = (switch_ctx_data_t *)data; @@ -190,7 +192,7 @@ static bool switch_ctx_bind_api(void *data, static bool switch_ctx_has_focus(void *data) { (void)data; - return true; + return platform_switch_has_focus; } static bool switch_ctx_suppress_screensaver(void *data, bool enable) diff --git a/retroarch.c b/retroarch.c index eb14ada97e..7671fe20a8 100644 --- a/retroarch.c +++ b/retroarch.c @@ -2522,6 +2522,12 @@ static enum runloop_state runloop_check_state( bool menu_is_alive = menu_driver_is_alive(); #endif +#ifdef HAVE_LIBNX + // Should be called once per frame + if(!appletMainLoop()) + return RUNLOOP_STATE_QUIT; +#endif + BIT256_CLEAR_ALL_PTR(¤t_input); #ifdef HAVE_MENU From 9989cc38d71c0de62afabf2924747c4d699bdd01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Wed, 28 Nov 2018 10:59:42 -0500 Subject: [PATCH 24/40] Update msg_hash_us.h --- intl/msg_hash_us.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 15bd1b26c3..bcb8740185 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -7789,4 +7789,4 @@ MSG_HASH( "Warning: Missing assets, use the Online Updater if available" ) MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_SAVE_POSITION, - "Remember Window Positions") + "Remember Window Position and Size") From 0e93fade3e088d6069ab18c7ea9f20947e75a2ef Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 28 Nov 2018 19:57:19 +0100 Subject: [PATCH 25/40] Fix load content not showing up --- dynamic.c | 1 + 1 file changed, 1 insertion(+) diff --git a/dynamic.c b/dynamic.c index fda8622334..a3092dd8cd 100644 --- a/dynamic.c +++ b/dynamic.c @@ -207,6 +207,7 @@ static bool environ_cb_get_system_info(unsigned cmd, void *data) } RARCH_LOG("Subsystems: %d\n", i); + size = i; if (system) { From a24a788e5284e634ce8431ff2c64b13258babb62 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 29 Nov 2018 12:12:00 +0100 Subject: [PATCH 26/40] Fix subsystem for ozone --- menu/drivers/ozone/ozone.c | 2 +- menu/drivers/xmb.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/menu/drivers/ozone/ozone.c b/menu/drivers/ozone/ozone.c index eac8d269e3..210799e229 100644 --- a/menu/drivers/ozone/ozone.c +++ b/menu/drivers/ozone/ozone.c @@ -589,7 +589,7 @@ static int ozone_list_push(void *data, void *userdata, if (subsystem_size > 0) { - const struct retro_subsystem_info* subsystem = system->subsystem.data; + const struct retro_subsystem_info* subsystem = subsystem_data; for (i = 0; i < subsystem_size; i++, subsystem++) { char s[PATH_MAX_LENGTH]; diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index f97b7cf352..d6d83e79f7 100755 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -5630,8 +5630,7 @@ static int xmb_list_push(void *data, void *userdata, menu_displaylist_setting(&entry); if (subsystem_size > 0) { - const struct retro_subsystem_info* subsystem = NULL; - subsystem = subsystem_data; + const struct retro_subsystem_info* subsystem = subsystem_data; for (i = 0; i < subsystem_size; i++, subsystem++) { char s[PATH_MAX_LENGTH]; From d52b38eadc3fd3cbba1d67e1727dd1d6803b4ebe Mon Sep 17 00:00:00 2001 From: Tatsuya79 Date: Thu, 29 Nov 2018 13:12:11 +0100 Subject: [PATCH 27/40] Add FPS counter hotkey. --- command.c | 7 +++++++ command.h | 2 ++ config.def.keybinds.h | 2 ++ input/input_defines.h | 1 + input/input_driver.c | 1 + intl/msg_hash_us.c | 4 ++++ msg_hash.h | 1 + retroarch.c | 12 ++++++++++++ 8 files changed, 30 insertions(+) diff --git a/command.c b/command.c index 5eaccec478..983bd8aae2 100644 --- a/command.c +++ b/command.c @@ -220,6 +220,7 @@ static const struct cmd_map map[] = { { "SCREENSHOT", RARCH_SCREENSHOT }, { "MUTE", RARCH_MUTE }, { "OSK", RARCH_OSK }, + { "FPS_TOGGLE", RARCH_FPS_TOGGLE }, { "NETPLAY_GAME_WATCH", RARCH_NETPLAY_GAME_WATCH }, { "VOLUME_UP", RARCH_VOLUME_UP }, { "VOLUME_DOWN", RARCH_VOLUME_DOWN }, @@ -2187,6 +2188,12 @@ TODO: Add a setting for these tweaks */ RARCH_LOG("%s\n", msg); } break; + case CMD_EVENT_FPS_TOGGLE: + { + settings_t *settings = config_get_ptr(); + settings->bools.video_fps_show = !(settings->bools.video_fps_show); + } + break; case CMD_EVENT_OVERLAY_DEINIT: #ifdef HAVE_OVERLAY input_overlay_free(overlay_ptr); diff --git a/command.h b/command.h index 134504cadb..7659ea605a 100644 --- a/command.h +++ b/command.h @@ -85,6 +85,8 @@ enum event_command CMD_EVENT_AUDIO_START, /* Mutes audio. */ CMD_EVENT_AUDIO_MUTE_TOGGLE, + /* Toggles FPS counter. */ + CMD_EVENT_FPS_TOGGLE, /* Initializes overlay. */ CMD_EVENT_OVERLAY_INIT, /* Deinitializes overlay. */ diff --git a/config.def.keybinds.h b/config.def.keybinds.h index 169cc7b5fc..c2994122a3 100644 --- a/config.def.keybinds.h +++ b/config.def.keybinds.h @@ -87,6 +87,7 @@ static const struct retro_keybind retro_keybinds_1[] = { { true, RARCH_SCREENSHOT, MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE }, { true, RARCH_MUTE, MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE }, { true, RARCH_OSK, MENU_ENUM_LABEL_VALUE_INPUT_META_OSK, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE }, + { true, RARCH_FPS_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_FPS_TOGGLE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE }, { true, RARCH_NETPLAY_GAME_WATCH, MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_GAME_WATCH, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE }, { true, RARCH_ENABLE_HOTKEY, MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE }, { true, RARCH_VOLUME_UP, MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE }, @@ -165,6 +166,7 @@ static const struct retro_keybind retro_keybinds_1[] = { { true, RARCH_SCREENSHOT, MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT, RETROK_F8, NO_BTN, NO_BTN, 0, AXIS_NONE }, { true, RARCH_MUTE, MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE, RETROK_F9, NO_BTN, NO_BTN, 0, AXIS_NONE }, { true, RARCH_OSK, MENU_ENUM_LABEL_VALUE_INPUT_META_OSK, RETROK_F12, NO_BTN, NO_BTN, 0, AXIS_NONE }, + { true, RARCH_FPS_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_FPS_TOGGLE, RETROK_F3, NO_BTN, NO_BTN, 0, AXIS_NONE }, { true, RARCH_NETPLAY_GAME_WATCH, MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_GAME_WATCH, RETROK_i, NO_BTN, NO_BTN, 0, AXIS_NONE }, { true, RARCH_ENABLE_HOTKEY, MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE }, { true, RARCH_VOLUME_UP, MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP, RETROK_KP_PLUS, NO_BTN, NO_BTN, 0, AXIS_NONE }, diff --git a/input/input_defines.h b/input/input_defines.h index ea52a3c890..891d850bdd 100644 --- a/input/input_defines.h +++ b/input/input_defines.h @@ -97,6 +97,7 @@ enum RARCH_SCREENSHOT, RARCH_MUTE, RARCH_OSK, + RARCH_FPS_TOGGLE, RARCH_NETPLAY_GAME_WATCH, RARCH_ENABLE_HOTKEY, RARCH_VOLUME_UP, diff --git a/input/input_driver.c b/input/input_driver.c index 7261a4ca27..2e0c055fb9 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -343,6 +343,7 @@ const struct input_bind_map input_config_bind_map[RARCH_BIND_LIST_END_NULL] = { DECLARE_META_BIND(2, screenshot, RARCH_SCREENSHOT, MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT), DECLARE_META_BIND(2, audio_mute, RARCH_MUTE, MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE), DECLARE_META_BIND(2, osk_toggle, RARCH_OSK, MENU_ENUM_LABEL_VALUE_INPUT_META_OSK), + DECLARE_META_BIND(2, fps_toggle, RARCH_FPS_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_FPS_TOGGLE), DECLARE_META_BIND(2, netplay_game_watch, RARCH_NETPLAY_GAME_WATCH, MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_GAME_WATCH), DECLARE_META_BIND(2, enable_hotkey, RARCH_ENABLE_HOTKEY, MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY), DECLARE_META_BIND(2, volume_up, RARCH_VOLUME_UP, MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP), diff --git a/intl/msg_hash_us.c b/intl/msg_hash_us.c index e2d5c9c970..6f46d28063 100644 --- a/intl/msg_hash_us.c +++ b/intl/msg_hash_us.c @@ -104,6 +104,10 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) snprintf(s, len, "Toggles onscreen keyboard."); break; + case RARCH_FPS_TOGGLE: + snprintf(s, len, + "Toggles frames per second counter."); + break; case RARCH_NETPLAY_GAME_WATCH: snprintf(s, len, "Netplay toggle play/spectate mode."); diff --git a/msg_hash.h b/msg_hash.h index 5c4e151916..b1565e79a0 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -671,6 +671,7 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT, MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE, MENU_ENUM_LABEL_VALUE_INPUT_META_OSK, + MENU_ENUM_LABEL_VALUE_INPUT_META_FPS_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_GAME_WATCH, MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY, MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP, diff --git a/retroarch.c b/retroarch.c index 7671fe20a8..ba30250af1 100644 --- a/retroarch.c +++ b/retroarch.c @@ -2930,6 +2930,18 @@ static enum runloop_state runloop_check_state( old_pressed = pressed; } + /* Check FPS toggle */ + { + static bool old_pressed = false; + bool pressed = BIT256_GET( + current_input, RARCH_FPS_TOGGLE); + + if (pressed && !old_pressed) + command_event(CMD_EVENT_FPS_TOGGLE, NULL); + + old_pressed = pressed; + } + /* Check recording toggle */ { static bool old_pressed = false; From e37c1c330daddb10909f372280088582bd871f51 Mon Sep 17 00:00:00 2001 From: Tatsuya79 Date: Thu, 29 Nov 2018 13:45:06 +0100 Subject: [PATCH 28/40] Fix missing label. --- intl/msg_hash_us.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index a3482164c3..fa0017737a 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -1251,6 +1251,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_META_FRAMEADVANCE, "Frameadvance" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_META_FPS_TOGGLE, + "FPS toggle" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_META_FULLSCREEN_TOGGLE_KEY, "Fullscreen toggle" From 8764d7be2840fa9266c0ea9ba5c2ea06c9421069 Mon Sep 17 00:00:00 2001 From: M4xw Date: Thu, 29 Nov 2018 18:42:44 +0100 Subject: [PATCH 29/40] [LIBNX] Implement Over-/Downclocking and minor fixes --- configuration.c | 10 +++ configuration.h | 2 + frontend/drivers/platform_switch.c | 62 +++++++++++--- intl/msg_hash_chs.h | 2 + intl/msg_hash_de.h | 2 + intl/msg_hash_es.h | 2 + intl/msg_hash_lbl.h | 2 + intl/msg_hash_pt_br.h | 2 + intl/msg_hash_us.h | 2 + lakka.h | 63 +-------------- menu/cbs/menu_cbs_deferred_push.c | 7 +- menu/cbs/menu_cbs_ok.c | 21 ++++- menu/cbs/menu_cbs_sublabel.c | 9 ++- menu/cbs/menu_cbs_title.c | 21 +++-- menu/drivers/ozone/ozone.c | 4 +- menu/drivers/ozone/ozone_texture.c | 3 + menu/drivers/xmb.c | 7 +- menu/menu_displaylist.c | 30 ++++--- menu/menu_displaylist.h | 2 + menu/menu_driver.h | 2 + menu/menu_setting.c | 6 +- msg_hash.h | 3 +- switch_performance_profiles.h | 125 +++++++++++++++++++++++++++++ 23 files changed, 289 insertions(+), 100 deletions(-) create mode 100644 switch_performance_profiles.h diff --git a/configuration.c b/configuration.c index db570b0d95..981ba24638 100644 --- a/configuration.c +++ b/configuration.c @@ -1679,6 +1679,10 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings, SETTING_UINT("video_record_threads", &settings->uints.video_record_threads, true, video_record_threads, false); +#ifdef HAVE_LIBNX + SETTING_UINT("libnx_overclock", &settings->uints.libnx_overclock, true, SWITCH_DEFAULT_CPU_PROFILE, false); +#endif + *size = count; return tmp; @@ -3133,6 +3137,12 @@ static bool config_load_file(const char *path, bool set_defaults, strlcpy(settings->arrays.menu_driver, "rgui", sizeof(settings->arrays.menu_driver)); #endif +#ifdef HAVE_LIBNX + // Apply initial clocks + extern void libnx_apply_overclock(); + libnx_apply_overclock(); +#endif + frontend_driver_set_sustained_performance_mode(settings->bools.sustained_performance_mode); recording_driver_update_streaming_url(); diff --git a/configuration.h b/configuration.h index f2c71cb15c..456fe8b953 100644 --- a/configuration.h +++ b/configuration.h @@ -446,6 +446,8 @@ typedef struct settings unsigned window_position_height; unsigned video_record_threads; + + unsigned libnx_overclock; } uints; struct diff --git a/frontend/drivers/platform_switch.c b/frontend/drivers/platform_switch.c index c90226cc79..59e38b6d44 100644 --- a/frontend/drivers/platform_switch.c +++ b/frontend/drivers/platform_switch.c @@ -13,6 +13,9 @@ #ifdef HAVE_LIBNX #include +#include "../../switch_performance_profiles.h" +#include "../../configuration.h" +#include #else #include #include @@ -70,18 +73,46 @@ static AppletHookCookie applet_hook_cookie; extern bool nxlink_connected; #endif -static void on_applet_hook(AppletHookType hook, void* param) { +void libnx_apply_overclock() { + const size_t profiles_count = sizeof(SWITCH_CPU_PROFILES) / sizeof(SWITCH_CPU_PROFILES[1]); + if (config_get_ptr()->uints.libnx_overclock >= 0 && config_get_ptr()->uints.libnx_overclock <= profiles_count) + pcvSetClockRate(PcvModule_Cpu, SWITCH_CPU_SPEEDS_VALUES[config_get_ptr()->uints.libnx_overclock]); +} + +static void on_applet_hook(AppletHookType hook, void *param) { + u32 performance_mode; + AppletFocusState focus_state; + /* Exit request */ - if(hook == AppletHookType_OnExitRequest) { + switch (hook) + { + case AppletHookType_OnExitRequest: RARCH_LOG("Got AppletHook OnExitRequest, exiting.\n"); retroarch_main_quit(); - } - /* Focus state*/ - else if (hook == AppletHookType_OnFocusState) { - AppletFocusState focus_state = appletGetFocusState(); - RARCH_LOG("Got AppletHook OnFocusState - new focus state is %d\n", focus_state); + break; + /* Focus state*/ + case AppletHookType_OnFocusState: + focus_state = appletGetFocusState(); + RARCH_LOG("Got AppletHook OnFocusState - new focus state is %d\n", focus_state); platform_switch_has_focus = focus_state == AppletFocusState_Focused; + if(!platform_switch_has_focus) { + pcvSetClockRate(PcvModule_Cpu, 1020000000); + } else { + libnx_apply_overclock(); + } + break; + + /* Performance mode */ + case AppletHookType_OnPerformanceMode: + // 0 == Handheld, 1 == Docked + // Since CPU doesn't change we just re-apply + performance_mode = appletGetPerformanceMode(); + libnx_apply_overclock(); + break; + + default: + break; } } @@ -211,6 +242,8 @@ static void frontend_switch_deinit(void *data) #ifdef HAVE_LIBNX nifmExit(); + pcvSetClockRate(PcvModule_Cpu, 1020000000); // Always 1020 MHz, unless SDEV + pcvExit(); #if defined(SWITCH) && defined(NXLINK) socketExit(); #endif @@ -235,7 +268,7 @@ static void frontend_switch_deinit(void *data) #ifdef HAVE_LIBNX static void frontend_switch_exec(const char *path, bool should_load_game) { - char game_path[PATH_MAX]; + char game_path[PATH_MAX-4]; const char *arg_data[3]; char error_string[200 + PATH_MAX]; int args = 0; @@ -623,16 +656,20 @@ static void frontend_switch_shutdown(bool unused) /* runloop_get_system_info isnt initialized that early.. */ extern void retro_get_system_info(struct retro_system_info *info); + static void frontend_switch_init(void *data) { + (void)data; #ifdef HAVE_LIBNX nifmInitialize(); + pcvInitialize(); + appletLockExit(); appletHook(&applet_hook_cookie, on_applet_hook, NULL); - appletSetFocusHandlingMode(AppletFocusHandlingMode_NoSuspend); + #ifndef HAVE_OPENGL /* Init Resolution before initDefault */ gfxInitResolution(1280, 720); @@ -643,7 +680,10 @@ static void frontend_switch_init(void *data) gfxConfigureTransform(0); #endif /* HAVE_OPENGL */ - appletInitializeGamePlayRecording(); + bool recording_supported = false; + appletIsGamePlayRecordingSupported(&recording_supported); + if(recording_supported) + appletInitializeGamePlayRecording(); #ifdef NXLINK socketInitializeDefault(); @@ -788,6 +828,8 @@ static enum frontend_powerstate frontend_switch_get_powerstate(int *seconds, int case ChargerType_Charger: case ChargerType_Usb: return FRONTEND_POWERSTATE_CHARGING; + default: + break; } return FRONTEND_POWERSTATE_NO_SOURCE; diff --git a/intl/msg_hash_chs.h b/intl/msg_hash_chs.h index 13f6fbb55a..328c18d273 100644 --- a/intl/msg_hash_chs.h +++ b/intl/msg_hash_chs.h @@ -15,6 +15,8 @@ MSG_HASH( MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL, "调整 Switch 的屏幕亮度" ) +#endif +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) MSG_HASH( MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE, "CPU 超频" diff --git a/intl/msg_hash_de.h b/intl/msg_hash_de.h index 3a6c051535..48ab449e73 100644 --- a/intl/msg_hash_de.h +++ b/intl/msg_hash_de.h @@ -15,6 +15,8 @@ MSG_HASH( MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL, "Anpassen der Switch Bildschirmhelligkeit" ) +#endif +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) MSG_HASH( MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE, "CPU Übertakten" diff --git a/intl/msg_hash_es.h b/intl/msg_hash_es.h index d60e909750..f3e9d8b2d3 100644 --- a/intl/msg_hash_es.h +++ b/intl/msg_hash_es.h @@ -15,6 +15,8 @@ MSG_HASH( MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL, "Ajusta el brillo de la pantalla" ) +#endif +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) MSG_HASH( MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE, "CPU Overclock" diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index c9cb27d08f..d3d3be35a9 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -3,6 +3,8 @@ MSG_HASH(MENU_ENUM_LABEL_SWITCH_GPU_PROFILE, "switch_gpu_profile") MSG_HASH(MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL, "switch_backlight_control") +#endif +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) MSG_HASH(MENU_ENUM_LABEL_SWITCH_CPU_PROFILE, "switch_cpu_profile") #endif diff --git a/intl/msg_hash_pt_br.h b/intl/msg_hash_pt_br.h index c63c4404f9..0dd39c521a 100644 --- a/intl/msg_hash_pt_br.h +++ b/intl/msg_hash_pt_br.h @@ -15,6 +15,8 @@ MSG_HASH( MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL, "Aumentar ou diminuir o brilho da tela do Switch" ) +#endif +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) MSG_HASH( MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE, "Overclock da CPU" diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index fa0017737a..6fa546fe67 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -15,6 +15,8 @@ MSG_HASH( MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL, "Increase or decrease the Switch screen brightness" ) +#endif +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) MSG_HASH( MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE, "CPU Overclock" diff --git a/lakka.h b/lakka.h index 0447aa6ed5..2b6073ead4 100644 --- a/lakka.h +++ b/lakka.h @@ -24,67 +24,6 @@ #define LAKKA_UPDATE_DIR "/storage/.update/" #define LAKKA_CONNMAN_DIR "/storage/.cache/connman/" -#ifdef HAVE_LAKKA_SWITCH -static char* SWITCH_GPU_PROFILES[] = { - "docked-overclock-3", - "docked-overclock-2", - "docked-overclock-1", - "docked", - "non-docked-overclock-5", - "non-docked-overclock-4", - "non-docked-overclock-3", - "non-docked-overclock-2", - "non-docked-overclock-1", - "non-docked", - "non-docked-underclock-1", - "non-docked-underclock-2", - "non-docked-underclock-3", -}; - -static char* SWITCH_GPU_SPEEDS[] = { - "998 Mhz", - "921 Mhz", - "844 Mhz", - "768 Mhz", - "691 Mhz", - "614 Mhz", - "537 Mhz", - "460 Mhz", - "384 Mhz", - "307 Mhz", - "230 Mhz", - "153 Mhz", - "76 Mhz" -}; - -static int SWITCH_BRIGHTNESS[] = { - 10, - 20, - 30, - 40, - 50, - 60, - 70, - 80, - 90, - 100 -}; - -static char* SWITCH_CPU_PROFILES[] = { - "overclock-4", - "overclock-3", - "overclock-2", - "overclock-1", - "default", -}; - -static char* SWITCH_CPU_SPEEDS[] = { - "1912 MHz", - "1734 MHz", - "1530 MHz", - "1224 MHz", - "1020 MHz" -}; -#endif +#include "switch_performance_profiles.h" #endif diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 7f8d37d4cc..79e1aee9b2 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -187,10 +187,13 @@ generic_deferred_push(deferred_push_core_content_dirs_subdir_list, DISPLAYLIST_ generic_deferred_push(deferred_push_lakka_list, DISPLAYLIST_LAKKA) #endif +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) +generic_deferred_push(deferred_push_switch_cpu_profile, DISPLAYLIST_SWITCH_CPU_PROFILE) +#endif + #ifdef HAVE_LAKKA_SWITCH generic_deferred_push(deferred_push_switch_gpu_profile, DISPLAYLIST_SWITCH_GPU_PROFILE) generic_deferred_push(deferred_push_switch_backlight_control, DISPLAYLIST_SWITCH_BACKLIGHT_CONTROL) -generic_deferred_push(deferred_push_switch_cpu_profile, DISPLAYLIST_SWITCH_CPU_PROFILE) #endif static int deferred_push_cursor_manager_list_deferred( @@ -906,6 +909,8 @@ static int menu_cbs_init_bind_deferred_push_compare_label( { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_switch_backlight_control); } +#endif +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) else if (strstr(label, msg_hash_to_str(MENU_ENUM_LABEL_SWITCH_CPU_PROFILE))) { diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index a4d9230bce..0218028835 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -2524,25 +2524,34 @@ static int action_ok_deferred_list_stub(const char *path, return 0; } -#ifdef HAVE_LAKKA_SWITCH +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) static int action_ok_set_switch_cpu_profile(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx) { char* profile_name = SWITCH_CPU_PROFILES[entry_idx]; - char command[PATH_MAX_LENGTH] = {0}; +#ifdef HAVE_LAKKA_SWITCH snprintf(command, sizeof(command), "cpu-profile set %s", profile_name); system(command); - snprintf(command, sizeof(command), "Current profile set to %s", profile_name); - +#else + config_get_ptr()->uints.libnx_overclock = entry_idx; + + unsigned profile_clock = SWITCH_CPU_SPEEDS_VALUES[entry_idx]; + pcvSetClockRate(PcvModule_Cpu, (u32)profile_clock); + snprintf(command, sizeof(command), "Current Clock set to %i", profile_clock); +#endif + runloop_msg_queue_push(command, 1, 90, true); return menu_cbs_exit(); } +#endif + +#ifdef HAVE_LAKKA_SWITCH static int action_ok_set_switch_gpu_profile(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx) @@ -5187,6 +5196,8 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs, #ifdef HAVE_LAKKA_SWITCH case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE: case MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL: +#endif +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE: #endif BIND_ACTION_OK(cbs, action_ok_push_default); @@ -5640,6 +5651,8 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs, case MENU_SET_SWITCH_BRIGHTNESS: BIND_ACTION_OK(cbs, action_ok_set_switch_backlight); break; +#endif +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) case MENU_SET_SWITCH_CPU_PROFILE: BIND_ACTION_OK(cbs, action_ok_set_switch_cpu_profile); break; diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index 81347b8267..2a95e163d8 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -485,9 +485,12 @@ default_sublabel_macro(action_bind_sublabel_show_wimp, #endif default_sublabel_macro(action_bind_sublabel_discord_allow, MENU_ENUM_SUBLABEL_DISCORD_ALLOW) +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) +default_sublabel_macro(action_bind_sublabel_switch_cpu_profile, MENU_ENUM_SUBLABEL_SWITCH_CPU_PROFILE) +#endif + #ifdef HAVE_LAKKA_SWITCH default_sublabel_macro(action_bind_sublabel_switch_gpu_profile, MENU_ENUM_SUBLABEL_SWITCH_GPU_PROFILE) -default_sublabel_macro(action_bind_sublabel_switch_cpu_profile, MENU_ENUM_SUBLABEL_SWITCH_CPU_PROFILE) default_sublabel_macro(action_bind_sublabel_switch_backlight_control, MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL) #endif @@ -2036,10 +2039,12 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_show_wimp); break; #endif -#ifdef HAVE_LAKKA_SWITCH +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_switch_cpu_profile); break; +#endif +#ifdef HAVE_LAKKA_SWITCH case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_switch_gpu_profile); break; diff --git a/menu/cbs/menu_cbs_title.c b/menu/cbs/menu_cbs_title.c index b3dc2440b8..9b3e3be0b7 100644 --- a/menu/cbs/menu_cbs_title.c +++ b/menu/cbs/menu_cbs_title.c @@ -210,9 +210,12 @@ default_title_copy_macro(action_get_title_cheevos_list, MENU_ENUM_LABE default_title_copy_macro(action_get_title_video_shader_parameters,MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS) default_title_copy_macro(action_get_title_video_shader_preset_parameters,MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS) +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) +default_title_macro(action_get_title_switch_cpu_profile, MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE) +#endif + #ifdef HAVE_LAKKA_SWITCH default_title_macro(action_get_title_switch_gpu_profile, MENU_ENUM_LABEL_VALUE_SWITCH_GPU_PROFILE) -default_title_macro(action_get_title_switch_cpu_profile, MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE) default_title_macro(action_get_title_switch_backlight_control, MENU_ENUM_LABEL_VALUE_SWITCH_BACKLIGHT_CONTROL) #endif @@ -879,13 +882,15 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_LIBRETRO_INFO_PATH: BIND_ACTION_GET_TITLE(cbs, action_get_title_core_info_directory); break; +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) + case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE: + BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_cpu_profile); + break; +#endif #ifdef HAVE_LAKKA_SWITCH case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE: BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_gpu_profile); break; - case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE: - BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_cpu_profile); - break; case MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL: BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_backlight_control); break; @@ -1176,13 +1181,15 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, case MENU_LABEL_LIBRETRO_INFO_PATH: BIND_ACTION_GET_TITLE(cbs, action_get_title_core_info_directory); break; +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) + case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE: + BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_cpu_profile); + break; +#endif #ifdef HAVE_LAKKA_SWITCH case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE: BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_gpu_profile); break; - case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE: - BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_cpu_profile); - break; case MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL: BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_backlight_control); break; diff --git a/menu/drivers/ozone/ozone.c b/menu/drivers/ozone/ozone.c index 210799e229..bcd5773854 100644 --- a/menu/drivers/ozone/ozone.c +++ b/menu/drivers/ozone/ozone.c @@ -673,10 +673,12 @@ static int ozone_list_push(void *data, void *userdata, menu_displaylist_setting(&entry); } -#ifdef HAVE_LAKKA_SWITCH +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) entry.enum_idx = MENU_ENUM_LABEL_SWITCH_CPU_PROFILE; menu_displaylist_setting(&entry); +#endif +#ifdef HAVE_LAKKA_SWITCH entry.enum_idx = MENU_ENUM_LABEL_SWITCH_GPU_PROFILE; menu_displaylist_setting(&entry); diff --git a/menu/drivers/ozone/ozone_texture.c b/menu/drivers/ozone/ozone_texture.c index 7af3843ee1..846682d2ed 100644 --- a/menu/drivers/ozone/ozone_texture.c +++ b/menu/drivers/ozone/ozone_texture.c @@ -211,7 +211,10 @@ menu_texture_item ozone_entries_icon_get_texture(ozone_handle_t *ozone, return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_UI]; #ifdef HAVE_LAKKA_SWITCH case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE: +#endif +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE: + return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_POWER]; #endif case MENU_ENUM_LABEL_POWER_MANAGEMENT_SETTINGS: return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_POWER]; diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index d6d83e79f7..23561e1651 100755 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -2450,7 +2450,10 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, return xmb->textures.list[XMB_TEXTURE_UI]; #ifdef HAVE_LAKKA_SWITCH case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE: +#endif +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE: + return xmb->textures.list[XMB_TEXTURE_POWER]; #endif case MENU_ENUM_LABEL_POWER_MANAGEMENT_SETTINGS: return xmb->textures.list[XMB_TEXTURE_POWER]; @@ -5714,10 +5717,12 @@ static int xmb_list_push(void *data, void *userdata, menu_displaylist_setting(&entry); } -#ifdef HAVE_LAKKA_SWITCH +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) entry.enum_idx = MENU_ENUM_LABEL_SWITCH_CPU_PROFILE; menu_displaylist_setting(&entry); +#endif +#ifdef HAVE_LAKKA_SWITCH entry.enum_idx = MENU_ENUM_LABEL_SWITCH_GPU_PROFILE; menu_displaylist_setting(&entry); diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index d28adcf9b3..e314c8ac54 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -51,6 +51,11 @@ #include "../../lakka.h" #endif +#ifdef HAVE_LIBNX +#include +#include "../../switch_performance_profiles.h" +#endif + #if defined(__linux__) || (defined(BSD) && !defined(__MACH__)) #include "../frontend/drivers/platform_unix.h" #endif @@ -4265,7 +4270,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist switch (type) { -#ifdef HAVE_LAKKA_SWITCH +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) case DISPLAYLIST_SWITCH_CPU_PROFILE: { unsigned i; @@ -4274,17 +4279,22 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist FILE *profile = NULL; const size_t profiles_count = sizeof(SWITCH_CPU_PROFILES)/sizeof(SWITCH_CPU_PROFILES[1]); - runloop_msg_queue_push("Warning : extented overclocking can damage the Switch", 1, 90, true); + runloop_msg_queue_push("Warning : extended overclocking can damage the Switch", 1, 90, true); + menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); + +#ifdef HAVE_LAKKA_SWITCH profile = popen("cpu-profile get", "r"); fgets(current_profile, PATH_MAX_LENGTH, profile); pclose(profile); + - menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); - - snprintf(text, sizeof(text), - "Current profile : %s", current_profile); - + snprintf(text, sizeof(text), "Current profile : %s", current_profile); +#else + u32 currentClock = 0; + pcvGetClockRate(PcvModule_Cpu, ¤tClock); + snprintf(text, sizeof(text), "Current Clock : %i", currentClock); +#endif menu_entries_append_enum(info->list, text, "", @@ -4313,6 +4323,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist break; } +#if defined(HAVE_LAKKA_SWITCH) case DISPLAYLIST_SWITCH_GPU_PROFILE: { unsigned i; @@ -4330,7 +4341,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); snprintf(text, sizeof(text), "Current profile : %s", current_profile); - + menu_entries_append_enum(info->list, text, "", @@ -4383,7 +4394,8 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist break; } -#endif +#endif // HAVE_LAKKA_SWITCH +#endif // HAVE_LAKKA_SWITCH || HAVE_LIBNX case DISPLAYLIST_MUSIC_LIST: { char combined_path[PATH_MAX_LENGTH]; diff --git a/menu/menu_displaylist.h b/menu/menu_displaylist.h index a2a71f2af2..4d8f165351 100644 --- a/menu/menu_displaylist.h +++ b/menu/menu_displaylist.h @@ -183,6 +183,8 @@ enum menu_displaylist_ctl_state #ifdef HAVE_LAKKA_SWITCH DISPLAYLIST_SWITCH_GPU_PROFILE, DISPLAYLIST_SWITCH_BACKLIGHT_CONTROL, +#endif +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) DISPLAYLIST_SWITCH_CPU_PROFILE, #endif DISPLAYLIST_PENDING_CLEAR diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 0e97b73a3f..6487d37248 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -245,6 +245,8 @@ enum menu_settings_type #ifdef HAVE_LAKKA_SWITCH MENU_SET_SWITCH_GPU_PROFILE, MENU_SET_SWITCH_BRIGHTNESS, +#endif +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) MENU_SET_SWITCH_CPU_PROFILE, #endif diff --git a/menu/menu_setting.c b/menu/menu_setting.c index c14112d8ee..daf67f6100 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -3750,8 +3750,7 @@ static bool setting_append_list( menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_QUIT); #endif -#if defined(HAVE_LAKKA) -#ifdef HAVE_LAKKA_SWITCH +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) CONFIG_ACTION( list, list_info, MENU_ENUM_LABEL_SWITCH_CPU_PROFILE, @@ -3759,7 +3758,10 @@ static bool setting_append_list( &group_info, &subgroup_info, parent_group); +#endif +#if defined(HAVE_LAKKA) +#ifdef HAVE_LAKKA_SWITCH CONFIG_ACTION( list, list_info, MENU_ENUM_LABEL_SWITCH_GPU_PROFILE, diff --git a/msg_hash.h b/msg_hash.h index b1565e79a0..326c32c92e 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -2172,7 +2172,8 @@ enum msg_hash_enums MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL, MENU_ENUM_LABEL_VALUE_SWITCH_BACKLIGHT_CONTROL, MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL, - +#endif +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) MENU_ENUM_LABEL_SWITCH_CPU_PROFILE, MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE, MENU_ENUM_SUBLABEL_SWITCH_CPU_PROFILE, diff --git a/switch_performance_profiles.h b/switch_performance_profiles.h new file mode 100644 index 0000000000..316e0bc122 --- /dev/null +++ b/switch_performance_profiles.h @@ -0,0 +1,125 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2018-2018 - Natinusala + * Copyright (C) 2018-2018 - M4xw + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#ifndef __SWITCH_PERFORMANCE_PROFILES_H +#define __SWITCH_PERFORMANCE_PROFILES_H + +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) +#ifdef HAVE_LAKKA_SWITCH +static char *SWITCH_GPU_PROFILES[] = { + "docked-overclock-3", + "docked-overclock-2", + "docked-overclock-1", + "docked", + "non-docked-overclock-5", + "non-docked-overclock-4", + "non-docked-overclock-3", + "non-docked-overclock-2", + "non-docked-overclock-1", + "non-docked", + "non-docked-underclock-1", + "non-docked-underclock-2", + "non-docked-underclock-3", +}; + +static char *SWITCH_GPU_SPEEDS[] = { + "998 Mhz", + "921 Mhz", + "844 Mhz", + "768 Mhz", + "691 Mhz", + "614 Mhz", + "537 Mhz", + "460 Mhz", + "384 Mhz", + "307 Mhz", + "230 Mhz", + "153 Mhz", + "76 Mhz"}; + +static int SWITCH_BRIGHTNESS[] = { + 10, + 20, + 30, + 40, + 50, + 60, + 70, + 80, + 90, + 100}; +#endif + +static char *SWITCH_CPU_PROFILES[] = { +#ifndef HAVE_LIBNX + "overclock-4", + "overclock-3", + "overclock-2", + "overclock-1", + "default", +#else + "Maximum Performance", + "High Performance", + "Boost Performance", + "Stock Performance", + "Powersaving Mode 1", + "Powersaving Mode 2", + "Powersaving Mode 3", +#endif +}; + +#define SWITCH_DEFAULT_CPU_PROFILE 3 /* Stock Performance */ +#define LIBNX_MAX_CPU_PROFILE 0 /* Max Performance */ + +static char *SWITCH_CPU_SPEEDS[] = { +#ifndef HAVE_LIBNX + "1912 MHz", + "1734 MHz", + "1530 MHz", + "1224 MHz", + "1020 MHz" +#else + "1785 MHz", + "1581 MHz", + "1224 MHz", + "1020 MHz", + "918 MHz", + "816 MHz", + "714 MHz" +#endif +}; + +static unsigned SWITCH_CPU_SPEEDS_VALUES[] = { +#ifndef HAVE_LIBNX + 1912000000, + 1734000000, + 1530000000, + 1224000000, + 1020000000 +#else + 1785000000, + 1581000000, + 1224000000, + 1020000000, + 918000000, + 816000000, + 714000000 +#endif +}; + +#endif + +#endif \ No newline at end of file From ab34b21f8dbb4044e1d1f69bd9f2a1fc1e183602 Mon Sep 17 00:00:00 2001 From: alfrix Date: Thu, 29 Nov 2018 14:47:46 -0300 Subject: [PATCH 30/40] XMB asset handling refactors also do not show black boxes --- menu/drivers/xmb.c | 529 +++++++++++++++++++-------------------------- 1 file changed, 218 insertions(+), 311 deletions(-) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index d6d83e79f7..78dbf1614a 100755 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -205,6 +205,8 @@ enum XMB_TEXTURE_MENU_ADD, XMB_TEXTURE_BRIGHTNESS, XMB_TEXTURE_PAUSE, + XMB_TEXTURE_DEFAULT, + XMB_TEXTURE_DEFAULT_CONTENT, XMB_TEXTURE_LAST }; @@ -234,6 +236,7 @@ typedef struct xmb_handle { bool mouse_show; bool use_ps3_layout; + bool assets_missing; uint8_t system_tab_end; uint8_t tabs[XMB_SYSTEM_TAB_MAX_LENGTH]; @@ -2571,6 +2574,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, return xmb->textures.list[XMB_TEXTURE_CURSOR]; case FILE_TYPE_PLAYLIST_ENTRY: case MENU_SETTING_ACTION_RUN: + return xmb->textures.list[XMB_TEXTURE_RUN]; case MENU_SETTING_ACTION_RESUME_ACHIEVEMENTS: return xmb->textures.list[XMB_TEXTURE_RESUME]; case MENU_SETTING_ACTION_CLOSE: @@ -2954,7 +2958,14 @@ static int xmb_draw_item( menu_display_set_alpha(color, MIN(node->alpha, xmb->alpha)); - if (color[3] != 0) + if ( + (!xmb->assets_missing) && + (color[3] != 0) && + ( + (entry->checked) || + !((entry_type >= MENU_SETTING_DROPDOWN_ITEM) && (entry_type <= MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM_SPECIAL)) + ) + ) { math_matrix_4x4 mymat_tmp; menu_display_ctx_rotate_draw_t rotate_draw; @@ -2975,31 +2986,24 @@ static int xmb_draw_item( menu_display_rotate_z(&rotate_draw, video_info); - if ( - (entry->checked) || - !((entry_type >= MENU_SETTING_DROPDOWN_ITEM) && - (entry_type <= MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM_SPECIAL)) - ) - { - xmb_draw_icon(video_info, - xmb->icon_size, - &mymat_tmp, - texture, - x, - y, - width, - height, - 1.0, - rotation, - scale_factor, - &color[0], - xmb->shadow_offset); - } + xmb_draw_icon(video_info, + xmb->icon_size, + &mymat_tmp, + texture, + x, + y, + width, + height, + 1.0, + rotation, + scale_factor, + &color[0], + xmb->shadow_offset); } menu_display_set_alpha(color, MIN(node->alpha, xmb->alpha)); - if (texture_switch != 0 && color[3] != 0) + if (texture_switch != 0 && color[3] != 0 && !xmb->assets_missing) xmb_draw_icon(video_info, xmb->icon_size, mymat, @@ -3752,7 +3756,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info) size_t x_pos = xmb->icon_size / 6; size_t x_pos_icon = xmb->margins_title_left; - if (coord_white[3] != 0) + if (coord_white[3] != 0 && !xmb->assets_missing) xmb_draw_icon(video_info, xmb->icon_size, &mymat, @@ -3781,7 +3785,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info) } } - if (video_info->timedate_enable) + if (video_info->timedate_enable && !xmb->assets_missing) { menu_display_ctx_datetime_t datetime; char timedate[255]; @@ -3830,7 +3834,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info) menu_display_set_alpha(coord_white, MIN(xmb->textures_arrow_alpha, xmb->alpha)); - if (coord_white[3] != 0) + if (coord_white[3] != 0 && !xmb->assets_missing) xmb_draw_icon(video_info, xmb->icon_size, &mymat, @@ -3852,52 +3856,55 @@ static void xmb_frame(void *data, video_frame_info_t *video_info) menu_display_blend_begin(video_info); /* Horizontal tab icons */ - for (i = 0; i <= xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL) - + xmb->system_tab_end; i++) + if (!xmb->assets_missing) { - xmb_node_t *node = xmb_get_node(xmb, i); - - if (!node) - continue; - - menu_display_set_alpha(item_color, MIN(node->alpha, xmb->alpha)); - - if (item_color[3] != 0) + for (i = 0; i <= xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL) + + xmb->system_tab_end; i++) { - menu_display_ctx_rotate_draw_t rotate_draw; - math_matrix_4x4 mymat; - uintptr_t texture = node->icon; - float x = xmb->x + xmb->categories_x_pos + - xmb->margins_screen_left + - xmb->icon_spacing_horizontal - * (i + 1) - xmb->icon_size / 2.0; - float y = xmb->margins_screen_top - + xmb->icon_size / 2.0; - float rotation = 0; - float scale_factor = node->zoom; + xmb_node_t *node = xmb_get_node(xmb, i); - rotate_draw.matrix = &mymat; - rotate_draw.rotation = rotation; - rotate_draw.scale_x = scale_factor; - rotate_draw.scale_y = scale_factor; - rotate_draw.scale_z = 1; - rotate_draw.scale_enable = true; + if (!node) + continue; - menu_display_rotate_z(&rotate_draw, video_info); + menu_display_set_alpha(item_color, MIN(node->alpha, xmb->alpha)); - xmb_draw_icon(video_info, - xmb->icon_size, - &mymat, - texture, - x, - y, - width, - height, - 1.0, - rotation, - scale_factor, - &item_color[0], - xmb->shadow_offset); + if (item_color[3] != 0) + { + menu_display_ctx_rotate_draw_t rotate_draw; + math_matrix_4x4 mymat; + uintptr_t texture = node->icon; + float x = xmb->x + xmb->categories_x_pos + + xmb->margins_screen_left + + xmb->icon_spacing_horizontal + * (i + 1) - xmb->icon_size / 2.0; + float y = xmb->margins_screen_top + + xmb->icon_size / 2.0; + float rotation = 0; + float scale_factor = node->zoom; + + rotate_draw.matrix = &mymat; + rotate_draw.rotation = rotation; + rotate_draw.scale_x = scale_factor; + rotate_draw.scale_y = scale_factor; + rotate_draw.scale_z = 1; + rotate_draw.scale_enable = true; + + menu_display_rotate_z(&rotate_draw, video_info); + + xmb_draw_icon(video_info, + xmb->icon_size, + &mymat, + texture, + x, + y, + width, + height, + 1.0, + rotation, + scale_factor, + &item_color[0], + xmb->shadow_offset); + } } } @@ -4620,355 +4627,232 @@ static bool xmb_load_image(void *userdata, void *data, enum menu_image_type type static const char *xmb_texture_path(unsigned id) { - char *iconpath = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); - char *icon_name = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); - char *icon_fullpath = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); - - iconpath[0] = icon_name[0] = icon_fullpath[0] = '\0'; - switch (id) { case XMB_TEXTURE_MAIN_MENU: #if defined(HAVE_LAKKA) - icon_name = "lakka.png"; - break; + return "lakka.png"; #else - icon_name = "retroarch.png"; - break; + return "retroarch.png"; #endif case XMB_TEXTURE_SETTINGS: - icon_name = "settings.png"; - break; + return "settings.png"; case XMB_TEXTURE_HISTORY: - icon_name = "history.png"; - break; + return "history.png"; case XMB_TEXTURE_FAVORITES: - icon_name = "favorites.png"; - break; + return "favorites.png"; case XMB_TEXTURE_ADD_FAVORITE: - icon_name = "add-favorite.png"; - break; + return "add-favorite.png"; case XMB_TEXTURE_MUSICS: - icon_name = "musics.png"; - break; + return "musics.png"; #if defined(HAVE_FFMPEG) || defined(HAVE_MPV) case XMB_TEXTURE_MOVIES: - icon_name = "movies.png"; - break; + return "movies.png"; #endif #ifdef HAVE_IMAGEVIEWER case XMB_TEXTURE_IMAGES: - icon_name = "images.png"; - break; + return "images.png"; #endif case XMB_TEXTURE_SETTING: - icon_name = "setting.png"; - break; + return "setting.png"; case XMB_TEXTURE_SUBSETTING: - icon_name = "subsetting.png"; - break; + return "subsetting.png"; case XMB_TEXTURE_ARROW: - icon_name = "arrow.png"; - break; + return "arrow.png"; case XMB_TEXTURE_RUN: - icon_name = "run.png"; - break; + return "run.png"; case XMB_TEXTURE_CLOSE: - icon_name = "close.png"; - break; + return "close.png"; case XMB_TEXTURE_RESUME: - icon_name = "resume.png"; - break; + return "resume.png"; case XMB_TEXTURE_CLOCK: - icon_name = "clock.png"; - break; + return "clock.png"; case XMB_TEXTURE_BATTERY_FULL: - icon_name = "battery-full.png"; - break; + return "battery-full.png"; case XMB_TEXTURE_BATTERY_CHARGING: - icon_name = "battery-charging.png"; - break; + return "battery-charging.png"; case XMB_TEXTURE_POINTER: - icon_name = "pointer.png"; - break; + return "pointer.png"; case XMB_TEXTURE_SAVESTATE: - icon_name = "savestate.png"; - break; + return "savestate.png"; case XMB_TEXTURE_LOADSTATE: - icon_name = "loadstate.png"; - break; + return "loadstate.png"; case XMB_TEXTURE_UNDO: - icon_name = "undo.png"; - break; + return "undo.png"; case XMB_TEXTURE_CORE_INFO: - icon_name = "core-infos.png"; - break; + return "core-infos.png"; case XMB_TEXTURE_WIFI: - icon_name = "wifi.png"; - break; + return "wifi.png"; case XMB_TEXTURE_CORE_OPTIONS: - icon_name = "core-options.png"; - break; + return "core-options.png"; case XMB_TEXTURE_INPUT_REMAPPING_OPTIONS: - icon_name = "core-input-remapping-options.png"; - break; + return "core-input-remapping-options.png"; case XMB_TEXTURE_CHEAT_OPTIONS: - icon_name = "core-cheat-options.png"; - break; + return "core-cheat-options.png"; case XMB_TEXTURE_DISK_OPTIONS: - icon_name = "core-disk-options.png"; - break; + return "core-disk-options.png"; case XMB_TEXTURE_SHADER_OPTIONS: - icon_name = "core-shader-options.png"; - break; + return "core-shader-options.png"; case XMB_TEXTURE_ACHIEVEMENT_LIST: - icon_name = "achievement-list.png"; - break; + return "achievement-list.png"; case XMB_TEXTURE_SCREENSHOT: - icon_name = "screenshot.png"; - break; + return "screenshot.png"; case XMB_TEXTURE_RELOAD: - icon_name = "reload.png"; - break; + return "reload.png"; case XMB_TEXTURE_RENAME: - icon_name = "rename.png"; - break; + return "rename.png"; case XMB_TEXTURE_FILE: - icon_name = "file.png"; - break; + return "file.png"; case XMB_TEXTURE_FOLDER: - icon_name = "folder.png"; - break; + return "folder.png"; case XMB_TEXTURE_ZIP: - icon_name = "zip.png"; - break; + return "zip.png"; case XMB_TEXTURE_MUSIC: - icon_name = "music.png"; - break; + return "music.png"; case XMB_TEXTURE_FAVORITE: - icon_name = "favorites-content.png"; - break; + return "favorites-content.png"; case XMB_TEXTURE_IMAGE: - icon_name = "image.png"; - break; + return "image.png"; case XMB_TEXTURE_MOVIE: - icon_name = "movie.png"; - break; + return "movie.png"; case XMB_TEXTURE_CORE: - icon_name = "core.png"; - break; + return "core.png"; case XMB_TEXTURE_RDB: - icon_name = "database.png"; - break; + return "database.png"; case XMB_TEXTURE_CURSOR: - icon_name = "cursor.png"; - break; + return "cursor.png"; case XMB_TEXTURE_SWITCH_ON: - icon_name = "on.png"; - break; + return "on.png"; case XMB_TEXTURE_SWITCH_OFF: - icon_name = "off.png"; - break; + return "off.png"; case XMB_TEXTURE_ADD: - icon_name = "add.png"; - break; + return "add.png"; #ifdef HAVE_NETWORKING case XMB_TEXTURE_NETPLAY: - icon_name = "netplay.png"; - break; + return "netplay.png"; case XMB_TEXTURE_ROOM: - icon_name = "menu_room.png"; - break; + return "menu_room.png"; case XMB_TEXTURE_ROOM_LAN: - icon_name = "menu_room_lan.png"; - break; + return "menu_room_lan.png"; case XMB_TEXTURE_ROOM_RELAY: - icon_name = "menu_room_relay.png"; - break; + return "menu_room_relay.png"; #endif case XMB_TEXTURE_KEY: - icon_name = "key.png"; - break; + return "key.png"; case XMB_TEXTURE_KEY_HOVER: - icon_name = "key-hover.png"; - break; + return "key-hover.png"; case XMB_TEXTURE_DIALOG_SLICE: - icon_name = "dialog-slice.png"; - break; + return "dialog-slice.png"; case XMB_TEXTURE_ACHIEVEMENTS: - icon_name = "menu_achievements.png"; - break; + return "menu_achievements.png"; case XMB_TEXTURE_AUDIO: - icon_name = "menu_audio.png"; - break; + return "menu_audio.png"; case XMB_TEXTURE_DRIVERS: - icon_name = "menu_drivers.png"; - break; + return "menu_drivers.png"; case XMB_TEXTURE_EXIT: - icon_name = "menu_exit.png"; - break; + return "menu_exit.png"; case XMB_TEXTURE_FRAMESKIP: - icon_name = "menu_frameskip.png"; - break; + return "menu_frameskip.png"; case XMB_TEXTURE_HELP: - icon_name = "menu_help.png"; - break; + return "menu_help.png"; case XMB_TEXTURE_INFO: - icon_name = "menu_info.png"; - break; + return "menu_info.png"; case XMB_TEXTURE_INPUT_SETTINGS: - icon_name = "Libretro - Pad.png"; - break; + return "Libretro - Pad.png"; case XMB_TEXTURE_LATENCY: - icon_name = "menu_latency.png"; - break; + return "menu_latency.png"; case XMB_TEXTURE_NETWORK: - icon_name = "menu_network.png"; - break; + return "menu_network.png"; case XMB_TEXTURE_POWER: - icon_name = "menu_power.png"; - break; + return "menu_power.png"; case XMB_TEXTURE_RECORD: - icon_name = "menu_record.png"; - break; + return "menu_record.png"; case XMB_TEXTURE_SAVING: - icon_name = "menu_saving.png"; - break; + return "menu_saving.png"; case XMB_TEXTURE_UPDATER: - icon_name = "menu_updater.png"; - break; + return "menu_updater.png"; case XMB_TEXTURE_VIDEO: - icon_name = "menu_video.png"; - break; + return "menu_video.png"; case XMB_TEXTURE_MIXER: - icon_name = "menu_mixer.png"; - break; + return "menu_mixer.png"; case XMB_TEXTURE_LOG: - icon_name = "menu_log.png"; - break; + return "menu_log.png"; case XMB_TEXTURE_OSD: - icon_name = "menu_osd.png"; - break; + return "menu_osd.png"; case XMB_TEXTURE_UI: - icon_name = "menu_ui.png"; - break; + return "menu_ui.png"; case XMB_TEXTURE_USER: - icon_name = "menu_user.png"; - break; + return "menu_user.png"; case XMB_TEXTURE_PRIVACY: - icon_name = "menu_privacy.png"; - break; + return "menu_privacy.png"; case XMB_TEXTURE_PLAYLIST: - icon_name = "menu_playlist.png"; - break; + return "menu_playlist.png"; case XMB_TEXTURE_QUICKMENU: - icon_name = "menu_quickmenu.png"; - break; + return "menu_quickmenu.png"; case XMB_TEXTURE_REWIND: - icon_name = "menu_rewind.png"; - break; + return "menu_rewind.png"; case XMB_TEXTURE_OVERLAY: - icon_name = "menu_overlay.png"; - break; + return "menu_overlay.png"; case XMB_TEXTURE_OVERRIDE: - icon_name = "menu_override.png"; - break; + return "menu_override.png"; case XMB_TEXTURE_NOTIFICATIONS: - icon_name = "menu_notifications.png"; - break; + return "menu_notifications.png"; case XMB_TEXTURE_STREAM: - icon_name = "menu_stream.png"; - break; + return "menu_stream.png"; case XMB_TEXTURE_SHUTDOWN: - icon_name = "menu_shutdown.png"; - break; + return "menu_shutdown.png"; case XMB_TEXTURE_INPUT_DPAD_U: - icon_name = "input_DPAD-U.png"; - break; + return "input_DPAD-U.png"; case XMB_TEXTURE_INPUT_DPAD_D: - icon_name = "input_DPAD-D.png"; - break; + return "input_DPAD-D.png"; case XMB_TEXTURE_INPUT_DPAD_L: - icon_name = "input_DPAD-L.png"; - break; + return "input_DPAD-L.png"; case XMB_TEXTURE_INPUT_DPAD_R: - icon_name = "input_DPAD-R.png"; - break; + return "input_DPAD-R.png"; case XMB_TEXTURE_INPUT_STCK_U: - icon_name = "input_STCK-U.png"; - break; + return "input_STCK-U.png"; case XMB_TEXTURE_INPUT_STCK_D: - icon_name = "input_STCK-D.png"; - break; + return "input_STCK-D.png"; case XMB_TEXTURE_INPUT_STCK_L: - icon_name = "input_STCK-L.png"; - break; + return "input_STCK-L.png"; case XMB_TEXTURE_INPUT_STCK_R: - icon_name = "input_STCK-R.png"; - break; + return "input_STCK-R.png"; case XMB_TEXTURE_INPUT_STCK_P: - icon_name = "input_STCK-P.png"; - break; + return "input_STCK-P.png"; case XMB_TEXTURE_INPUT_BTN_U: - icon_name = "input_BTN-U.png"; - break; + return "input_BTN-U.png"; case XMB_TEXTURE_INPUT_BTN_D: - icon_name = "input_BTN-D.png"; - break; + return "input_BTN-D.png"; case XMB_TEXTURE_INPUT_BTN_L: - icon_name = "input_BTN-L.png"; - break; + return "input_BTN-L.png"; case XMB_TEXTURE_INPUT_BTN_R: - icon_name = "input_BTN-R.png"; - break; + return "input_BTN-R.png"; case XMB_TEXTURE_INPUT_LB: - icon_name = "input_LB.png"; - break; + return "input_LB.png"; case XMB_TEXTURE_INPUT_RB: - icon_name = "input_RB.png"; - break; + return "input_RB.png"; case XMB_TEXTURE_INPUT_LT: - icon_name = "input_LT.png"; - break; + return "input_LT.png"; case XMB_TEXTURE_INPUT_RT: - icon_name = "input_RT.png"; - break; + return "input_RT.png"; case XMB_TEXTURE_INPUT_SELECT: - icon_name = "input_SELECT.png"; - break; + return "input_SELECT.png"; case XMB_TEXTURE_INPUT_START: - icon_name = "input_START.png"; - break; + return "input_START.png"; case XMB_TEXTURE_CHECKMARK: - icon_name = "menu_check.png"; - break; + return "menu_check.png"; case XMB_TEXTURE_MENU_ADD: - icon_name = "menu_add.png"; - break; + return "menu_add.png"; case XMB_TEXTURE_BRIGHTNESS: - icon_name = "menu_brightness.png"; - break; + return "menu_brightness.png"; case XMB_TEXTURE_PAUSE: - icon_name = "menu_pause.png"; - break; + return "menu_pause.png"; + case XMB_TEXTURE_DEFAULT: + return "default.png"; + case XMB_TEXTURE_DEFAULT_CONTENT: + return "default-content.png"; } - - fill_pathname_application_special(iconpath, - PATH_MAX_LENGTH * sizeof(char), - APPLICATION_SPECIAL_DIRECTORY_ASSETS_XMB_ICONS); - - icon_fullpath = iconpath; - strlcat(icon_fullpath, icon_name, PATH_MAX_LENGTH * sizeof(char)); - - if (!filestream_exists(icon_fullpath)) - { - RARCH_WARN("[XMB] Asset missing: %s\n", icon_fullpath); - free(icon_fullpath); - return NULL; - } - - free(icon_fullpath); - return icon_name; + return NULL; } static void xmb_context_reset_textures( @@ -4976,25 +4860,42 @@ static void xmb_context_reset_textures( { unsigned i; settings_t *settings = config_get_ptr(); + xmb->assets_missing = false; for (i = 0; i < XMB_TEXTURE_LAST; i++) { - if (xmb_texture_path(i) == NULL) + if (!menu_display_reset_textures_list(xmb_texture_path(i), iconpath, &xmb->textures.list[i], TEXTURE_FILTER_MIPMAP_LINEAR)) { - /* If the icon doesn't exist at least try to return the subsetting icon*/ - if (!(i == XMB_TEXTURE_DIALOG_SLICE || i == XMB_TEXTURE_KEY_HOVER || i == XMB_TEXTURE_KEY_HOVER)) - menu_display_reset_textures_list(xmb_texture_path(XMB_TEXTURE_SUBSETTING), iconpath, &xmb->textures.list[i], TEXTURE_FILTER_MIPMAP_LINEAR); - continue; + RARCH_WARN("[XMB] Asset missing: %s%s\n", iconpath, xmb_texture_path(i)); + /* If the icon is missing return the subsetting (because some themes are incomplete) */ + if (!(i == XMB_TEXTURE_DIALOG_SLICE || i == XMB_TEXTURE_KEY_HOVER || i == XMB_TEXTURE_KEY)) + { + /* OSD Warning only if subsetting icon is missing */ + if ( + !menu_display_reset_textures_list(xmb_texture_path(XMB_TEXTURE_SUBSETTING), iconpath, &xmb->textures.list[i], TEXTURE_FILTER_MIPMAP_LINEAR) + && !(settings->uints.menu_xmb_theme == XMB_ICON_THEME_CUSTOM) + ) + { + runloop_msg_queue_push(msg_hash_to_str(MSG_MISSING_ASSETS), 1, 256, false); + /* Do not draw icons if subsetting is missing */ + goto error; + } + /* Do not draw icons if this ones are is missing */ + switch (i) + { + case XMB_TEXTURE_POINTER: + case XMB_TEXTURE_ARROW: + case XMB_TEXTURE_CLOCK: + case XMB_TEXTURE_BATTERY_CHARGING: + case XMB_TEXTURE_BATTERY_FULL: + case XMB_TEXTURE_DEFAULT: + case XMB_TEXTURE_DEFAULT_CONTENT: + goto error; + } + } } - menu_display_reset_textures_list(xmb_texture_path(i), iconpath, &xmb->textures.list[i], TEXTURE_FILTER_MIPMAP_LINEAR); } - /* Warn only if critical assets are missing, some themes are incomplete */ - if ( - ((xmb_texture_path(XMB_TEXTURE_SUBSETTING) == NULL)) && !(settings->uints.menu_xmb_theme == XMB_ICON_THEME_CUSTOM) - ) - runloop_msg_queue_push(msg_hash_to_str(MSG_MISSING_ASSETS), 1, 256, false); - menu_display_allocate_white_texture(); xmb->main_menu_node.icon = xmb->textures.list[XMB_TEXTURE_MAIN_MENU]; @@ -5039,6 +4940,12 @@ static void xmb_context_reset_textures( xmb->netplay_tab_node.zoom = xmb->categories_active_zoom; #endif +return; + +error: + xmb->assets_missing = true ; + RARCH_WARN("[XMB] Critical asset missing, no icons will be drawn\n"); + return; } static void xmb_context_reset_background(const char *iconpath) From 982b39a8bf6c9c9de5c15ac04dc7953967e52cc6 Mon Sep 17 00:00:00 2001 From: alfrix Date: Thu, 29 Nov 2018 14:49:27 -0300 Subject: [PATCH 31/40] Simplify and cleanup path handling, log the specific assets missing --- menu/drivers/ozone/ozone.c | 43 ++-- menu/drivers/ozone/ozone_texture.c | 338 ++++++++++------------------- menu/drivers/ozone/ozone_texture.h | 2 +- 3 files changed, 136 insertions(+), 247 deletions(-) diff --git a/menu/drivers/ozone/ozone.c b/menu/drivers/ozone/ozone.c index 210799e229..5f8c65af9f 100644 --- a/menu/drivers/ozone/ozone.c +++ b/menu/drivers/ozone/ozone.c @@ -109,7 +109,7 @@ void ozone_free_list_nodes(file_list_t *list, bool actiondata) } } -static void *ozone_init(void **userdata, bool video_is_threaded) +static void *ozone_init(void **userdata, bool video_is_threaded) { bool fallback_color_theme = false; unsigned width, height, color_theme = 0; @@ -184,7 +184,7 @@ static void *ozone_init(void **userdata, bool video_is_threaded) if (settings->bools.menu_use_preferred_system_color_theme) { #ifdef HAVE_LIBNX - if (R_SUCCEEDED(setsysInitialize())) + if (R_SUCCEEDED(setsysInitialize())) { ColorSetId theme; setsysGetColorSetId(&theme); @@ -206,7 +206,7 @@ static void *ozone_init(void **userdata, bool video_is_threaded) color_theme = settings->uints.menu_ozone_color_theme; ozone_set_color_theme(ozone, color_theme); } - + ozone->need_compute = false; ozone->animations.scroll_y = 0.0f; ozone->animations.scroll_y_sidebar = 0.0f; @@ -352,7 +352,10 @@ static void ozone_context_reset(void *data, bool is_threaded) strlcat(filename, ".png", sizeof(filename)); if (!menu_display_reset_textures_list(filename, ozone->png_path, &ozone->textures[i], TEXTURE_FILTER_MIPMAP_LINEAR)) + { ozone->has_all_assets = false; + RARCH_WARN("[OZONE] Asset missing: %s%s%s\n", ozone->png_path, path_default_slash(), filename); + } } /* Sidebar textures */ @@ -363,7 +366,10 @@ static void ozone_context_reset(void *data, bool is_threaded) strlcat(filename, ".png", sizeof(filename)); if (!menu_display_reset_textures_list(filename, ozone->tab_path, &ozone->tab_textures[i], TEXTURE_FILTER_MIPMAP_LINEAR)) + { ozone->has_all_assets = false; + RARCH_WARN("[OZONE] Asset missing: %s%s%s\n", ozone->tab_path, path_default_slash(), filename); + } } /* Theme textures */ @@ -372,8 +378,11 @@ static void ozone_context_reset(void *data, bool is_threaded) /* Icons textures init */ for (i = 0; i < OZONE_ENTRIES_ICONS_TEXTURE_LAST; i++) - if (!menu_display_reset_textures_list(ozone_entries_icon_texture_path(ozone, i), ozone->icons_path, &ozone->icons_textures[i], TEXTURE_FILTER_MIPMAP_LINEAR)) + if (!menu_display_reset_textures_list(ozone_entries_icon_texture_path(i), ozone->icons_path, &ozone->icons_textures[i], TEXTURE_FILTER_MIPMAP_LINEAR)) + { ozone->has_all_assets = false; + RARCH_WARN("[OZONE] Asset missing: %s%s%s\n", ozone->icons_path, path_default_slash(), ozone_entries_icon_texture_path(i)); + } menu_display_allocate_white_texture(); @@ -428,7 +437,7 @@ static void ozone_context_destroy(void *data) /* Textures */ for (i = 0; i < OZONE_TEXTURE_LAST; i++) video_driver_texture_unload(&ozone->textures[i]); - + /* Icons */ for (i = 0; i < OZONE_TAB_TEXTURE_LAST; i++) video_driver_texture_unload(&ozone->tab_textures[i]); @@ -779,7 +788,7 @@ static void ozone_update_scroll(ozone_handle_t *ozone, bool allow_animation, ozo if (new_scroll > 0) new_scroll = 0; - + if (allow_animation) { /* Cursor animation */ @@ -845,7 +854,7 @@ static void ozone_compute_entries_position(ozone_handle_t *ozone) /* Entry */ menu_entry_t entry; ozone_node_t *node = NULL; - + menu_entry_init(&entry); menu_entry_get(&entry, 0, (unsigned)i, NULL, true); @@ -908,7 +917,7 @@ static void ozone_render(void *data, bool is_idle) ozone_handle_t *ozone = (ozone_handle_t*)data; if (!data) return; - + if (ozone->need_compute) { ozone_compute_entries_position(ozone); @@ -1063,12 +1072,12 @@ static void ozone_draw_footer(ozone_handle_t *ozone, video_frame_info_t *video_i menu_display_blend_end(video_info); ozone_draw_text(video_info, ozone, - do_swap ? + do_swap ? msg_hash_to_str(MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_OK) : msg_hash_to_str(MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK), video_info->width - back_width, video_info->height - back_height + FONT_SIZE_FOOTER, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.footer, ozone->theme->text_rgba, false); ozone_draw_text(video_info, ozone, - do_swap ? + do_swap ? msg_hash_to_str(MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK) : msg_hash_to_str(MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_OK), video_info->width - ok_width, video_info->height - ok_height + FONT_SIZE_FOOTER, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.footer, ozone->theme->text_rgba, false); @@ -1197,9 +1206,9 @@ static void ozone_frame(void *data, video_frame_info_t *video_info) ozone->raster_blocks.sidebar.carr.coords.vertices = 0; /* Background */ - menu_display_draw_quad(video_info, - 0, 0, video_info->width, video_info->height, - video_info->width, video_info->height, + menu_display_draw_quad(video_info, + 0, 0, video_info->width, video_info->height, + video_info->width, video_info->height, !video_info->libretro_running ? ozone->theme->background : ozone->theme->background_libretro_running ); @@ -1223,7 +1232,7 @@ static void ozone_frame(void *data, video_frame_info_t *video_info) ozone->animations.scroll_y, ozone->is_playlist ); - + /* Old list */ if (ozone->draw_old_list) ozone_draw_entries(ozone, @@ -1433,7 +1442,7 @@ static int ozone_menu_iterate(menu_handle_t *menu, void *userdata, enum menu_act if (!ozone) return generic_menu_iterate(menu, userdata, action); - + selection_buf = menu_entries_get_selection_buf_ptr(0); tag = (uintptr_t)selection_buf; new_action = action; @@ -1463,7 +1472,7 @@ static int ozone_menu_iterate(menu_handle_t *menu, void *userdata, enum menu_act tag = (uintptr_t)ozone; new_selection = ozone->categories_selection_ptr - 1; - + if (new_selection < 0) new_selection = horizontal_list_size + ozone->system_tab_end; @@ -1703,7 +1712,7 @@ static void ozone_list_cache(void *data, bottom_boundary = video_info_height - 87 - 78; for (i = 0; i < entries_end; i++) - { + { ozone_node_t *node = (ozone_node_t*) file_list_get_userdata_at_offset(selection_buf, i); if (!node) diff --git a/menu/drivers/ozone/ozone_texture.c b/menu/drivers/ozone/ozone_texture.c index 7af3843ee1..8249bd6d0d 100644 --- a/menu/drivers/ozone/ozone_texture.c +++ b/menu/drivers/ozone/ozone_texture.c @@ -307,6 +307,7 @@ menu_texture_item ozone_entries_icon_get_texture(ozone_handle_t *ozone, return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_CURSOR]; case FILE_TYPE_PLAYLIST_ENTRY: case MENU_SETTING_ACTION_RUN: + return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_RUN]; case MENU_SETTING_ACTION_RESUME_ACHIEVEMENTS: return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_RESUME]; case MENU_SETTING_ACTION_CLOSE: @@ -448,351 +449,230 @@ menu_texture_item ozone_entries_icon_get_texture(ozone_handle_t *ozone, return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_SUBSETTING]; } -const char *ozone_entries_icon_texture_path(ozone_handle_t *ozone, unsigned id) +const char *ozone_entries_icon_texture_path(unsigned id) { - char icon_fullpath[255]; - char *icon_name = NULL; - switch (id) { case OZONE_ENTRIES_ICONS_TEXTURE_MAIN_MENU: #if defined(HAVE_LAKKA) - icon_name = "lakka.png"; - break; + return "lakka.png"; #else - icon_name = "retroarch.png"; - break; + return "retroarch.png"; #endif case OZONE_ENTRIES_ICONS_TEXTURE_SETTINGS: - icon_name = "settings.png"; - break; + return "settings.png"; case OZONE_ENTRIES_ICONS_TEXTURE_HISTORY: - icon_name = "history.png"; - break; + return "history.png"; case OZONE_ENTRIES_ICONS_TEXTURE_FAVORITES: - icon_name = "favorites.png"; - break; + return "favorites.png"; case OZONE_ENTRIES_ICONS_TEXTURE_ADD_FAVORITE: - icon_name = "add-favorite.png"; - break; + return "add-favorite.png"; case OZONE_ENTRIES_ICONS_TEXTURE_MUSICS: - icon_name = "musics.png"; - break; + return "musics.png"; #if defined(HAVE_FFMPEG) || defined(HAVE_MPV) case OZONE_ENTRIES_ICONS_TEXTURE_MOVIES: - icon_name = "movies.png"; - break; + return "movies.png"; #endif #ifdef HAVE_IMAGEVIEWER case OZONE_ENTRIES_ICONS_TEXTURE_IMAGES: - icon_name = "images.png"; - break; + return "images.png"; #endif case OZONE_ENTRIES_ICONS_TEXTURE_SETTING: - icon_name = "setting.png"; - break; + return "setting.png"; case OZONE_ENTRIES_ICONS_TEXTURE_SUBSETTING: - icon_name = "subsetting.png"; - break; + return "subsetting.png"; case OZONE_ENTRIES_ICONS_TEXTURE_ARROW: - icon_name = "arrow.png"; - break; + return "arrow.png"; case OZONE_ENTRIES_ICONS_TEXTURE_RUN: - icon_name = "run.png"; - break; + return "run.png"; case OZONE_ENTRIES_ICONS_TEXTURE_CLOSE: - icon_name = "close.png"; - break; + return "close.png"; case OZONE_ENTRIES_ICONS_TEXTURE_RESUME: - icon_name = "resume.png"; - break; + return "resume.png"; case OZONE_ENTRIES_ICONS_TEXTURE_CLOCK: - icon_name = "clock.png"; - break; + return "clock.png"; case OZONE_ENTRIES_ICONS_TEXTURE_BATTERY_FULL: - icon_name = "battery-full.png"; - break; + return "battery-full.png"; case OZONE_ENTRIES_ICONS_TEXTURE_BATTERY_CHARGING: - icon_name = "battery-charging.png"; - break; + return "battery-charging.png"; case OZONE_ENTRIES_ICONS_TEXTURE_POINTER: - icon_name = "pointer.png"; - break; + return "pointer.png"; case OZONE_ENTRIES_ICONS_TEXTURE_SAVESTATE: - icon_name = "savestate.png"; - break; + return "savestate.png"; case OZONE_ENTRIES_ICONS_TEXTURE_LOADSTATE: - icon_name = "loadstate.png"; - break; + return "loadstate.png"; case OZONE_ENTRIES_ICONS_TEXTURE_UNDO: - icon_name = "undo.png"; - break; + return "undo.png"; case OZONE_ENTRIES_ICONS_TEXTURE_CORE_INFO: - icon_name = "core-infos.png"; - break; + return "core-infos.png"; case OZONE_ENTRIES_ICONS_TEXTURE_WIFI: - icon_name = "wifi.png"; - break; + return "wifi.png"; case OZONE_ENTRIES_ICONS_TEXTURE_CORE_OPTIONS: - icon_name = "core-options.png"; - break; + return "core-options.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_REMAPPING_OPTIONS: - icon_name = "core-input-remapping-options.png"; - break; + return "core-input-remapping-options.png"; case OZONE_ENTRIES_ICONS_TEXTURE_CHEAT_OPTIONS: - icon_name = "core-cheat-options.png"; - break; + return "core-cheat-options.png"; case OZONE_ENTRIES_ICONS_TEXTURE_DISK_OPTIONS: - icon_name = "core-disk-options.png"; - break; + return "core-disk-options.png"; case OZONE_ENTRIES_ICONS_TEXTURE_SHADER_OPTIONS: - icon_name = "core-shader-options.png"; - break; + return "core-shader-options.png"; case OZONE_ENTRIES_ICONS_TEXTURE_ACHIEVEMENT_LIST: - icon_name = "achievement-list.png"; - break; + return "achievement-list.png"; case OZONE_ENTRIES_ICONS_TEXTURE_SCREENSHOT: - icon_name = "screenshot.png"; - break; + return "screenshot.png"; case OZONE_ENTRIES_ICONS_TEXTURE_RELOAD: - icon_name = "reload.png"; - break; + return "reload.png"; case OZONE_ENTRIES_ICONS_TEXTURE_RENAME: - icon_name = "rename.png"; - break; + return "rename.png"; case OZONE_ENTRIES_ICONS_TEXTURE_FILE: - icon_name = "file.png"; - break; + return "file.png"; case OZONE_ENTRIES_ICONS_TEXTURE_FOLDER: - icon_name = "folder.png"; - break; + return "folder.png"; case OZONE_ENTRIES_ICONS_TEXTURE_ZIP: - icon_name = "zip.png"; - break; + return "zip.png"; case OZONE_ENTRIES_ICONS_TEXTURE_MUSIC: - icon_name = "music.png"; - break; + return "music.png"; case OZONE_ENTRIES_ICONS_TEXTURE_FAVORITE: - icon_name = "favorites-content.png"; - break; + return "favorites-content.png"; case OZONE_ENTRIES_ICONS_TEXTURE_IMAGE: - icon_name = "image.png"; - break; + return "image.png"; case OZONE_ENTRIES_ICONS_TEXTURE_MOVIE: - icon_name = "movie.png"; - break; + return "movie.png"; case OZONE_ENTRIES_ICONS_TEXTURE_CORE: - icon_name = "core.png"; - break; + return "core.png"; case OZONE_ENTRIES_ICONS_TEXTURE_RDB: - icon_name = "database.png"; - break; + return "database.png"; case OZONE_ENTRIES_ICONS_TEXTURE_CURSOR: - icon_name = "cursor.png"; - break; + return "cursor.png"; case OZONE_ENTRIES_ICONS_TEXTURE_SWITCH_ON: - icon_name = "on.png"; - break; + return "on.png"; case OZONE_ENTRIES_ICONS_TEXTURE_SWITCH_OFF: - icon_name = "off.png"; - break; + return "off.png"; case OZONE_ENTRIES_ICONS_TEXTURE_ADD: - icon_name = "add.png"; - break; + return "add.png"; #ifdef HAVE_NETWORKING case OZONE_ENTRIES_ICONS_TEXTURE_NETPLAY: - icon_name = "netplay.png"; - break; + return "netplay.png"; case OZONE_ENTRIES_ICONS_TEXTURE_ROOM: - icon_name = "menu_room.png"; - break; + return "menu_room.png"; case OZONE_ENTRIES_ICONS_TEXTURE_ROOM_LAN: - icon_name = "menu_room_lan.png"; - break; + return "menu_room_lan.png"; case OZONE_ENTRIES_ICONS_TEXTURE_ROOM_RELAY: - icon_name = "menu_room_relay.png"; - break; + return "menu_room_relay.png"; #endif case OZONE_ENTRIES_ICONS_TEXTURE_KEY: - icon_name = "key.png"; - break; + return "key.png"; case OZONE_ENTRIES_ICONS_TEXTURE_KEY_HOVER: - icon_name = "key-hover.png"; - break; + return "key-hover.png"; case OZONE_ENTRIES_ICONS_TEXTURE_DIALOG_SLICE: - icon_name = "dialog-slice.png"; - break; + return "dialog-slice.png"; case OZONE_ENTRIES_ICONS_TEXTURE_ACHIEVEMENTS: - icon_name = "menu_achievements.png"; - break; + return "menu_achievements.png"; case OZONE_ENTRIES_ICONS_TEXTURE_AUDIO: - icon_name = "menu_audio.png"; - break; + return "menu_audio.png"; case OZONE_ENTRIES_ICONS_TEXTURE_DRIVERS: - icon_name = "menu_drivers.png"; - break; + return "menu_drivers.png"; case OZONE_ENTRIES_ICONS_TEXTURE_EXIT: - icon_name = "menu_exit.png"; - break; + return "menu_exit.png"; case OZONE_ENTRIES_ICONS_TEXTURE_FRAMESKIP: - icon_name = "menu_frameskip.png"; - break; + return "menu_frameskip.png"; case OZONE_ENTRIES_ICONS_TEXTURE_HELP: - icon_name = "menu_help.png"; - break; + return "menu_help.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INFO: - icon_name = "menu_info.png"; - break; + return "menu_info.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_SETTINGS: - icon_name = "Libretro - Pad.png"; - break; + return "Libretro - Pad.png"; case OZONE_ENTRIES_ICONS_TEXTURE_LATENCY: - icon_name = "menu_latency.png"; - break; + return "menu_latency.png"; case OZONE_ENTRIES_ICONS_TEXTURE_NETWORK: - icon_name = "menu_network.png"; - break; + return "menu_network.png"; case OZONE_ENTRIES_ICONS_TEXTURE_POWER: - icon_name = "menu_power.png"; - break; + return "menu_power.png"; case OZONE_ENTRIES_ICONS_TEXTURE_RECORD: - icon_name = "menu_record.png"; - break; + return "menu_record.png"; case OZONE_ENTRIES_ICONS_TEXTURE_SAVING: - icon_name = "menu_saving.png"; - break; + return "menu_saving.png"; case OZONE_ENTRIES_ICONS_TEXTURE_UPDATER: - icon_name = "menu_updater.png"; - break; + return "menu_updater.png"; case OZONE_ENTRIES_ICONS_TEXTURE_VIDEO: - icon_name = "menu_video.png"; - break; + return "menu_video.png"; case OZONE_ENTRIES_ICONS_TEXTURE_MIXER: - icon_name = "menu_mixer.png"; - break; + return "menu_mixer.png"; case OZONE_ENTRIES_ICONS_TEXTURE_LOG: - icon_name = "menu_log.png"; - break; + return "menu_log.png"; case OZONE_ENTRIES_ICONS_TEXTURE_OSD: - icon_name = "menu_osd.png"; - break; + return "menu_osd.png"; case OZONE_ENTRIES_ICONS_TEXTURE_UI: - icon_name = "menu_ui.png"; - break; + return "menu_ui.png"; case OZONE_ENTRIES_ICONS_TEXTURE_USER: - icon_name = "menu_user.png"; - break; + return "menu_user.png"; case OZONE_ENTRIES_ICONS_TEXTURE_PRIVACY: - icon_name = "menu_privacy.png"; - break; + return "menu_privacy.png"; case OZONE_ENTRIES_ICONS_TEXTURE_PLAYLIST: - icon_name = "menu_playlist.png"; - break; + return "menu_playlist.png"; case OZONE_ENTRIES_ICONS_TEXTURE_QUICKMENU: - icon_name = "menu_quickmenu.png"; - break; + return "menu_quickmenu.png"; case OZONE_ENTRIES_ICONS_TEXTURE_REWIND: - icon_name = "menu_rewind.png"; - break; + return "menu_rewind.png"; case OZONE_ENTRIES_ICONS_TEXTURE_OVERLAY: - icon_name = "menu_overlay.png"; - break; + return "menu_overlay.png"; case OZONE_ENTRIES_ICONS_TEXTURE_OVERRIDE: - icon_name = "menu_override.png"; - break; + return "menu_override.png"; case OZONE_ENTRIES_ICONS_TEXTURE_NOTIFICATIONS: - icon_name = "menu_notifications.png"; - break; + return "menu_notifications.png"; case OZONE_ENTRIES_ICONS_TEXTURE_STREAM: - icon_name = "menu_stream.png"; - break; + return "menu_stream.png"; case OZONE_ENTRIES_ICONS_TEXTURE_SHUTDOWN: - icon_name = "menu_shutdown.png"; - break; + return "menu_shutdown.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_DPAD_U: - icon_name = "input_DPAD-U.png"; - break; + return "input_DPAD-U.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_DPAD_D: - icon_name = "input_DPAD-D.png"; - break; + return "input_DPAD-D.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_DPAD_L: - icon_name = "input_DPAD-L.png"; - break; + return "input_DPAD-L.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_DPAD_R: - icon_name = "input_DPAD-R.png"; - break; + return "input_DPAD-R.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_STCK_U: - icon_name = "input_STCK-U.png"; - break; + return "input_STCK-U.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_STCK_D: - icon_name = "input_STCK-D.png"; - break; + return "input_STCK-D.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_STCK_L: - icon_name = "input_STCK-L.png"; - break; + return "input_STCK-L.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_STCK_R: - icon_name = "input_STCK-R.png"; - break; + return "input_STCK-R.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_STCK_P: - icon_name = "input_STCK-P.png"; - break; + return "input_STCK-P.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_BTN_U: - icon_name = "input_BTN-U.png"; - break; + return "input_BTN-U.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_BTN_D: - icon_name = "input_BTN-D.png"; - break; + return "input_BTN-D.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_BTN_L: - icon_name = "input_BTN-L.png"; - break; + return "input_BTN-L.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_BTN_R: - icon_name = "input_BTN-R.png"; - break; + return "input_BTN-R.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_LB: - icon_name = "input_LB.png"; - break; + return "input_LB.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_RB: - icon_name = "input_RB.png"; - break; + return "input_RB.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_LT: - icon_name = "input_LT.png"; - break; + return "input_LT.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_RT: - icon_name = "input_RT.png"; - break; + return "input_RT.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_SELECT: - icon_name = "input_SELECT.png"; - break; + return "input_SELECT.png"; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_START: - icon_name = "input_START.png"; - break; + return "input_START.png"; case OZONE_ENTRIES_ICONS_TEXTURE_CHECKMARK: - icon_name = "menu_check.png"; - break; + return "menu_check.png"; case OZONE_ENTRIES_ICONS_TEXTURE_MENU_ADD: - icon_name = "menu_add.png"; - break; + return "menu_add.png"; case OZONE_ENTRIES_ICONS_TEXTURE_BRIGHTNESS: - icon_name = "menu_brightnes.png"; - break; + return "menu_brightness.png"; case OZONE_ENTRIES_ICONS_TEXTURE_PAUSE: - icon_name = "menu_pause.png"; - break; + return "menu_pause.png"; } - - fill_pathname_join( - icon_fullpath, - ozone->icons_path, - icon_name, - sizeof(icon_fullpath) - ); - - if (!filestream_exists(icon_fullpath)) - { - return "subsetting.png"; - } - else - return icon_name; + return NULL; } void ozone_unload_theme_textures(ozone_handle_t *ozone) @@ -838,4 +718,4 @@ bool ozone_reset_theme_textures(ozone_handle_t *ozone) } return result; -} \ No newline at end of file +} diff --git a/menu/drivers/ozone/ozone_texture.h b/menu/drivers/ozone/ozone_texture.h index e06bea008f..374a798c65 100644 --- a/menu/drivers/ozone/ozone_texture.h +++ b/menu/drivers/ozone/ozone_texture.h @@ -199,7 +199,7 @@ enum OZONE_ENTRIES_ICONS_TEXTURE_LAST }; -const char *ozone_entries_icon_texture_path(ozone_handle_t *ozone, unsigned id); +const char *ozone_entries_icon_texture_path(unsigned id); menu_texture_item ozone_entries_icon_get_texture(ozone_handle_t *ozone, enum msg_hash_enums enum_idx, unsigned type, bool active); From 3934cec5973f1929260162c06c1bb1fcc495daf7 Mon Sep 17 00:00:00 2001 From: Tatsuya79 Date: Thu, 29 Nov 2018 22:40:23 +0100 Subject: [PATCH 32/40] Default framecount_show to off. --- config.def.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.def.h b/config.def.h index 6bf045ab21..385550499a 100644 --- a/config.def.h +++ b/config.def.h @@ -550,7 +550,7 @@ static const int wasapi_sh_buffer_length = -16; /* auto */ static const bool fps_show = false; /* Enables displaying the current frame count. */ -static const bool framecount_show = true; +static const bool framecount_show = false; /* Includes displaying the current memory usage/total with FPS/Frames. */ static const bool memory_show = false; From c0cada4b55bf550311c85653ca2a2637f19b7f48 Mon Sep 17 00:00:00 2001 From: Tatsuya79 Date: Fri, 30 Nov 2018 00:30:12 +0100 Subject: [PATCH 33/40] Fix title window fps counter. --- gfx/video_driver.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gfx/video_driver.c b/gfx/video_driver.c index de50911b15..88ef1862ef 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -2454,7 +2454,7 @@ void video_driver_frame(const void *data, unsigned width, if (video_info.fps_show) { snprintf(video_info.fps_text, sizeof(video_info.fps_text), - "|| FPS: %6.1f ", last_fps); + " || FPS: %6.1f ", last_fps); } if (video_info.framecount_show) { @@ -2464,7 +2464,7 @@ void video_driver_frame(const void *data, unsigned width, (uint64_t)video_driver_frame_count); } snprintf(video_driver_window_title, sizeof(video_driver_window_title), - "%s%s%s%s", title, video_info.fps_text, + "%s%s%s", title, video_info.fps_show ? video_info.fps_text : "", video_info.framecount_show ? frames_text : ""); } From 0e295716b9908c8a9ac1e89e30b735e008e6f55c Mon Sep 17 00:00:00 2001 From: Stuart Carnie Date: Thu, 29 Nov 2018 22:04:43 -0700 Subject: [PATCH 34/40] feat(metal): Add native rotation support for Metal driver * fix crash when frame or frame size is 0 --- gfx/common/metal/Context.h | 1 + gfx/common/metal/Context.m | 34 +++++++++++++- gfx/common/metal/RendererCommon.h | 1 + gfx/common/metal/RendererCommon.m | 14 ++++++ gfx/common/metal_common.h | 2 + gfx/common/metal_common.m | 44 +++++++++++-------- gfx/drivers/metal.m | 18 +++++--- .../RetroArch_Metal.xcodeproj/project.pbxproj | 32 +++++++++++++- 8 files changed, 118 insertions(+), 28 deletions(-) diff --git a/gfx/common/metal/Context.h b/gfx/common/metal/Context.h index 5068df92a2..2897367664 100644 --- a/gfx/common/metal/Context.h +++ b/gfx/common/metal/Context.h @@ -76,6 +76,7 @@ typedef struct /*! @brief end commits the command buffer */ - (void)end; +- (void)setRotation:(unsigned)rotation; - (bool)readBackBuffer:(uint8_t *)buffer; @end diff --git a/gfx/common/metal/Context.m b/gfx/common/metal/Context.m index 69d1c059f6..34fc099afc 100644 --- a/gfx/common/metal/Context.m +++ b/gfx/common/metal/Context.m @@ -53,10 +53,16 @@ id _states[GFX_MAX_SHADERS][2]; id _clearState; - Uniforms _uniforms; bool _captureEnabled; id _backBuffer; + + unsigned _rotation; + matrix_float4x4 _mvp_no_rot; + matrix_float4x4 _mvp; + + Uniforms _uniforms; + Uniforms _uniformsNoRotate; } - (instancetype)initWithDevice:(id)d @@ -75,6 +81,11 @@ _commandQueue = [_device newCommandQueue]; _clearColor = MTLClearColorMake(0, 0, 0, 1); _uniforms.projectionMatrix = matrix_proj_ortho(0, 1, 0, 1); + + _rotation = 0; + [self setRotation:0]; + _mvp_no_rot = matrix_proj_ortho(0, 1, 0, 1); + _mvp = matrix_proj_ortho(0, 1, 0, 1); { MTLSamplerDescriptor *sd = [MTLSamplerDescriptor new]; @@ -130,6 +141,27 @@ return &_uniforms; } +- (void)setRotation:(unsigned)rotation +{ + _rotation = 270 * rotation; + + /* Calculate projection. */ + _mvp_no_rot = matrix_proj_ortho(0, 1, 0, 1); + + bool allow_rotate = true; + if (!allow_rotate) + { + _mvp = _mvp_no_rot; + return; + } + + matrix_float4x4 rot = matrix_rotate_z((float)(M_PI * _rotation / 180.0f)); + _mvp = simd_mul(rot, _mvp_no_rot); + + _uniforms.projectionMatrix = _mvp; + _uniformsNoRotate.projectionMatrix = _mvp_no_rot; +} + - (void)setDisplaySyncEnabled:(bool)displaySyncEnabled { #if TARGET_OS_OSX diff --git a/gfx/common/metal/RendererCommon.h b/gfx/common/metal/RendererCommon.h index 977cf7b607..f0835f271e 100644 --- a/gfx/common/metal/RendererCommon.h +++ b/gfx/common/metal/RendererCommon.h @@ -55,6 +55,7 @@ typedef NS_ENUM(NSUInteger, RTextureFilter) }; extern matrix_float4x4 matrix_proj_ortho(float left, float right, float top, float bottom); +extern matrix_float4x4 matrix_rotate_z(float rot); extern matrix_float4x4 make_matrix_float4x4(const float *v); #endif /* RendererCommon_h */ diff --git a/gfx/common/metal/RendererCommon.m b/gfx/common/metal/RendererCommon.m index c3be58dc86..95ff5c889c 100644 --- a/gfx/common/metal/RendererCommon.m +++ b/gfx/common/metal/RendererCommon.m @@ -86,3 +86,17 @@ matrix_float4x4 matrix_proj_ortho(float left, float right, float top, float bott matrix_float4x4 mat = {P, Q, R, S}; return mat; } + +matrix_float4x4 matrix_rotate_z(float rot) +{ + float cz, sz; + __sincosf(rot, &sz, &cz); + + simd_float4 P = simd_make_float4(cz, -sz, 0, 0); + simd_float4 Q = simd_make_float4(sz, cz, 0, 0); + simd_float4 R = simd_make_float4( 0, 0, 1, 0); + simd_float4 S = simd_make_float4( 0, 0, 0, 1); + + matrix_float4x4 mat = {P, Q, R, S}; + return mat; +} diff --git a/gfx/common/metal_common.h b/gfx/common/metal_common.h index 66b7f08b92..4fbefa25ac 100644 --- a/gfx/common/metal_common.h +++ b/gfx/common/metal_common.h @@ -96,6 +96,8 @@ extern MTLPixelFormat SelectOptimalPixelFormat(MTLPixelFormat fmt); /*! @brief setNeedsResize triggers a display resize */ - (void)setNeedsResize; +- (void)setViewportWidth:(unsigned)width height:(unsigned)height forceFull:(BOOL)forceFull allowRotate:(BOOL)allowRotate; +- (void)setRotation:(unsigned)rotation; @end diff --git a/gfx/common/metal_common.m b/gfx/common/metal_common.m index 2c2129d911..d2afec6184 100644 --- a/gfx/common/metal_common.m +++ b/gfx/common/metal_common.m @@ -216,21 +216,19 @@ return YES; } -- (void)_updateUniforms +- (void)setViewportWidth:(unsigned)width height:(unsigned)height forceFull:(BOOL)forceFull allowRotate:(BOOL)allowRotate { - _uniforms.projectionMatrix = matrix_proj_ortho(0, 1, 0, 1); -} - -- (void)_updateViewport:(CGSize)size -{ - RARCH_LOG("[Metal]: _updateViewport size %.0fx%.0f\n", size.width, size.height); +#if 0 + RARCH_LOG("[Metal]: setViewportWidth size %dx%d\n", width, height); +#endif - _viewport->full_width = (unsigned int)size.width; - _viewport->full_height = (unsigned int)size.height; + _viewport->full_width = width; + _viewport->full_height = height; video_driver_set_size(&_viewport->full_width, &_viewport->full_height); - _layer.drawableSize = size; - video_driver_update_viewport(_viewport, NO, _keepAspect); + _layer.drawableSize = CGSizeMake(width, height); + video_driver_update_viewport(_viewport, forceFull, _keepAspect); + // update matrix _context.viewport = _viewport; _viewportMVP.outputSize = simd_make_float2(_viewport->full_width, _viewport->full_height); @@ -256,8 +254,10 @@ [self _beginFrame]; _frameView.frameCount = frameCount; - _frameView.size = CGSizeMake(width, height); - [_frameView updateFrame:data pitch:pitch]; + if (data && width && height) { + _frameView.size = CGSizeMake(width, height); + [_frameView updateFrame:data pitch:pitch]; + } [self _drawViews:video_info]; @@ -277,7 +277,7 @@ id rce = _context.rce; [rce pushDebugGroup:@"overlay"]; [rce setRenderPipelineState:[_context getStockShader:VIDEO_SHADER_STOCK_BLEND blend:YES]]; - [rce setVertexBytes:&_uniforms length:sizeof(_uniforms) atIndex:BufferIndexUniforms]; + [rce setVertexBytes:_context.uniforms length:sizeof(*_context.uniforms) atIndex:BufferIndexUniforms]; [rce setFragmentSamplerState:_samplerStateLinear atIndex:SamplerIndexDraw]; [_overlay drawWithEncoder:rce]; [rce popDebugGroup]; @@ -338,7 +338,6 @@ _context.viewport = _viewport; } [_context begin]; - [self _updateUniforms]; } - (void)_drawViews:(video_frame_info_t *)video_info @@ -351,7 +350,7 @@ if ((_frameView.drawState & ViewDrawStateEncoder) != 0) { - [rce setVertexBytes:&_uniforms length:sizeof(_uniforms) atIndex:BufferIndexUniforms]; + [rce setVertexBytes:_context.uniforms length:sizeof(*_context.uniforms) atIndex:BufferIndexUniforms]; [rce setRenderPipelineState:_t_pipelineStateNoAlpha]; if (_frameView.filter == RTextureFilterNearest) { @@ -410,6 +409,11 @@ // TODO(sgc): resize all drawables } +- (void)setRotation:(unsigned)rotation +{ + [_context setRotation:rotation]; +} + - (Uniforms *)viewportMVP { return &_viewportMVP; @@ -419,7 +423,7 @@ - (void)mtkView:(MTKView *)view drawableSizeWillChange:(CGSize)size { - [self _updateViewport:size]; + [self setViewportWidth:(unsigned int)size.width height:(unsigned int)size.height forceFull:NO allowRotate:YES]; } - (void)drawInMTKView:(MTKView *)view @@ -897,7 +901,7 @@ typedef struct MTLALIGN(16) rce = [cb renderCommandEncoderWithDescriptor:rpd]; } -#if METAL_DEBUG +#if DEBUG && METAL_DEBUG rce.label = [NSString stringWithFormat:@"pass %d", i]; #endif @@ -1126,6 +1130,8 @@ typedef struct MTLALIGN(16) texture_t *source = &_engine.frame.texture[0]; for (unsigned i = 0; i < shader->passes; source = &_engine.pass[i++].rt) { + matrix_float4x4 *mvp = (i == shader->passes-1) ? &_context.uniforms->projectionMatrix : &_engine.mvp; + /* clang-format off */ semantics_map_t semantics_map = { { @@ -1154,7 +1160,7 @@ typedef struct MTLALIGN(16) &_engine.luts[0].size_data, sizeof(*_engine.luts)}, }, { - &_engine.mvp, /* MVP */ + mvp, /* MVP */ &_engine.pass[i].rt.size_data, /* OutputSize */ &_engine.frame.output_size, /* FinalViewportSize */ &_engine.pass[i].frame_count, /* FrameCount */ diff --git a/gfx/drivers/metal.m b/gfx/drivers/metal.m index 3496d035bf..29c792c9ab 100644 --- a/gfx/drivers/metal.m +++ b/gfx/drivers/metal.m @@ -151,16 +151,22 @@ static void metal_free(void *data) static void metal_set_viewport(void *data, unsigned viewport_width, unsigned viewport_height, bool force_full, bool allow_rotate) { -#if 0 - RARCH_LOG("[Metal]: set_viewport size: %dx%d full: %s rotate: %s\n", - viewport_width, viewport_height, - force_full ? "YES" : "NO", - allow_rotate ? "YES" : "NO"); -#endif + MetalDriver *md = (__bridge MetalDriver *)data; + if (md == nil) { + return; + } + + [md setViewportWidth:viewport_width height:viewport_height forceFull:force_full allowRotate:allow_rotate]; } static void metal_set_rotation(void *data, unsigned rotation) { + MetalDriver *md = (__bridge MetalDriver *)data; + if (md == nil) { + return; + } + + [md setRotation:rotation]; } static void metal_viewport_info(void *data, struct video_viewport *vp) diff --git a/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj b/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj index a97c52c3f8..5ca7fea33a 100644 --- a/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj +++ b/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj @@ -88,6 +88,17 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 05132C6621A74D7A00379846 /* ozone_texture.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ozone_texture.c; sourceTree = ""; }; + 05132C6721A74D7B00379846 /* ozone_theme.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ozone_theme.h; sourceTree = ""; }; + 05132C6821A74D7B00379846 /* ozone.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ozone.h; sourceTree = ""; }; + 05132C6921A74D7B00379846 /* ozone_entries.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ozone_entries.c; sourceTree = ""; }; + 05132C6A21A74D7B00379846 /* ozone.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ozone.c; sourceTree = ""; }; + 05132C6B21A74D7B00379846 /* ozone_theme.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ozone_theme.c; sourceTree = ""; }; + 05132C6C21A74D7B00379846 /* ozone_sidebar.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ozone_sidebar.c; sourceTree = ""; }; + 05132C6D21A74D7B00379846 /* ozone_sidebar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ozone_sidebar.h; sourceTree = ""; }; + 05132C6E21A74D7B00379846 /* ozone_display.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ozone_display.c; sourceTree = ""; }; + 05132C6F21A74D7B00379846 /* ozone_texture.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ozone_texture.h; sourceTree = ""; }; + 05132C7021A74D7B00379846 /* ozone_display.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ozone_display.h; sourceTree = ""; }; 05269A6120ABF20500C29F1E /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; }; 05366512213F8BE5007E7EA0 /* thumbnailpackdownload.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = thumbnailpackdownload.cpp; sourceTree = ""; }; 05366513213F8BE5007E7EA0 /* ui_qt_application.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_qt_application.cpp; sourceTree = ""; }; @@ -514,7 +525,6 @@ 05D7753320A5678300646447 /* griffin_cpp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = griffin_cpp.cpp; path = ../../griffin/griffin_cpp.cpp; sourceTree = ""; }; 05D7753420A5678400646447 /* griffin_glslang.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = griffin_glslang.cpp; path = ../../griffin/griffin_glslang.cpp; sourceTree = ""; }; 05EFAFC22191D64200D27059 /* stripes.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = stripes.c; sourceTree = ""; }; - 05EFAFC32191D64200D27059 /* ozone.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ozone.c; sourceTree = ""; }; 05F2872F20F2BEEA00632D47 /* task_autodetect.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = task_autodetect.c; sourceTree = ""; }; 05F2873020F2BEEA00632D47 /* task_netplay_find_content.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = task_netplay_find_content.c; sourceTree = ""; }; 05F2873120F2BEEA00632D47 /* task_netplay_nat_traversal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = task_netplay_nat_traversal.c; sourceTree = ""; }; @@ -610,6 +620,24 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 05132C6521A74D5100379846 /* ozone */ = { + isa = PBXGroup; + children = ( + 05132C6E21A74D7B00379846 /* ozone_display.c */, + 05132C7021A74D7B00379846 /* ozone_display.h */, + 05132C6921A74D7B00379846 /* ozone_entries.c */, + 05132C6C21A74D7B00379846 /* ozone_sidebar.c */, + 05132C6D21A74D7B00379846 /* ozone_sidebar.h */, + 05132C6621A74D7A00379846 /* ozone_texture.c */, + 05132C6F21A74D7B00379846 /* ozone_texture.h */, + 05132C6B21A74D7B00379846 /* ozone_theme.c */, + 05132C6721A74D7B00379846 /* ozone_theme.h */, + 05132C6A21A74D7B00379846 /* ozone.c */, + 05132C6821A74D7B00379846 /* ozone.h */, + ); + path = ozone; + sourceTree = ""; + }; 05366511213F8BE5007E7EA0 /* qt */ = { isa = PBXGroup; children = ( @@ -801,12 +829,12 @@ isa = PBXGroup; children = ( 05A8C53520DB72F000FF7857 /* nuklear */, + 05132C6521A74D5100379846 /* ozone */, 05A8C54020DB72F000FF7857 /* materialui.c */, 05A8C53420DB72F000FF7857 /* menu_generic.c */, 05A8C53320DB72F000FF7857 /* menu_generic.h */, 05A8C53D20DB72F000FF7857 /* nuklear.c */, 05A8C53E20DB72F000FF7857 /* null.c */, - 05EFAFC32191D64200D27059 /* ozone.c */, 05A8C53C20DB72F000FF7857 /* rgui.c */, 05EFAFC22191D64200D27059 /* stripes.c */, 05A8C53220DB72F000FF7857 /* xmb.c */, From cd2d2f88079c74da631ce40e4b0ecee6c2b9af00 Mon Sep 17 00:00:00 2001 From: alfrix Date: Fri, 30 Nov 2018 18:10:28 -0300 Subject: [PATCH 35/40] Add icons for apply on toggle and autoapply --- menu/drivers/ozone/ozone_texture.c | 10 +++++++++- menu/drivers/ozone/ozone_texture.h | 4 +++- menu/drivers/xmb.c | 12 +++++++++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/menu/drivers/ozone/ozone_texture.c b/menu/drivers/ozone/ozone_texture.c index 8e3455593a..b1a34532a8 100644 --- a/menu/drivers/ozone/ozone_texture.c +++ b/menu/drivers/ozone/ozone_texture.c @@ -212,7 +212,7 @@ menu_texture_item ozone_entries_icon_get_texture(ozone_handle_t *ozone, #ifdef HAVE_LAKKA_SWITCH case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE: #endif -#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE: return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_POWER]; #endif @@ -277,6 +277,10 @@ menu_texture_item ozone_entries_icon_get_texture(ozone_handle_t *ozone, case MENU_ENUM_LABEL_CHEAT_ADD_NEW_TOP: case MENU_ENUM_LABEL_CHEAT_ADD_NEW_BOTTOM: return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_MENU_ADD]; + case MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_TOGGLE: + return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_MENU_APPLY_TOGGLE]; + case MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_LOAD: + return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_MENU_APPLY_COG]; default: break; } @@ -674,6 +678,10 @@ switch (id) return "menu_brightness.png"; case OZONE_ENTRIES_ICONS_TEXTURE_PAUSE: return "menu_pause.png"; + case OZONE_ENTRIES_ICONS_TEXTURE_MENU_APPLY_TOGGLE: + return "menu_apply_toggle.png"; + case OZONE_ENTRIES_ICONS_TEXTURE_MENU_APPLY_COG: + return "menu_apply_cog.png"; } return NULL; } diff --git a/menu/drivers/ozone/ozone_texture.h b/menu/drivers/ozone/ozone_texture.h index 374a798c65..5441732378 100644 --- a/menu/drivers/ozone/ozone_texture.h +++ b/menu/drivers/ozone/ozone_texture.h @@ -196,6 +196,8 @@ enum OZONE_ENTRIES_ICONS_TEXTURE_MENU_ADD, OZONE_ENTRIES_ICONS_TEXTURE_BRIGHTNESS, OZONE_ENTRIES_ICONS_TEXTURE_PAUSE, + OZONE_ENTRIES_ICONS_TEXTURE_MENU_APPLY_TOGGLE, + OZONE_ENTRIES_ICONS_TEXTURE_MENU_APPLY_COG, OZONE_ENTRIES_ICONS_TEXTURE_LAST }; @@ -207,4 +209,4 @@ menu_texture_item ozone_entries_icon_get_texture(ozone_handle_t *ozone, bool ozone_reset_theme_textures(ozone_handle_t *ozone); void ozone_unload_theme_textures(ozone_handle_t *ozone); -#endif \ No newline at end of file +#endif diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index d0e3419a13..ea131d5342 100755 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -207,6 +207,8 @@ enum XMB_TEXTURE_PAUSE, XMB_TEXTURE_DEFAULT, XMB_TEXTURE_DEFAULT_CONTENT, + XMB_TEXTURE_MENU_APPLY_TOGGLE, + XMB_TEXTURE_MENU_APPLY_COG, XMB_TEXTURE_LAST }; @@ -2454,7 +2456,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, #ifdef HAVE_LAKKA_SWITCH case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE: #endif -#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) +#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX) case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE: return xmb->textures.list[XMB_TEXTURE_POWER]; #endif @@ -2518,6 +2520,10 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, case MENU_ENUM_LABEL_CHEAT_ADD_NEW_TOP: case MENU_ENUM_LABEL_CHEAT_ADD_NEW_BOTTOM: return xmb->textures.list[XMB_TEXTURE_MENU_ADD]; + case MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_TOGGLE: + return xmb->textures.list[XMB_TEXTURE_MENU_APPLY_TOGGLE]; + case MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_LOAD: + return xmb->textures.list[XMB_TEXTURE_MENU_APPLY_COG]; default: break; } @@ -4854,6 +4860,10 @@ static const char *xmb_texture_path(unsigned id) return "default.png"; case XMB_TEXTURE_DEFAULT_CONTENT: return "default-content.png"; + case XMB_TEXTURE_MENU_APPLY_TOGGLE: + return "menu_apply_toggle.png"; + case XMB_TEXTURE_MENU_APPLY_COG: + return "menu_apply_cog.png"; } return NULL; } From a617f0d43691e75d3ffd67e0049eee622f870486 Mon Sep 17 00:00:00 2001 From: Tatsuya79 Date: Sat, 1 Dec 2018 11:27:39 +0100 Subject: [PATCH 36/40] Frame count should be OFF by default. --- configuration.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configuration.c b/configuration.c index 981ba24638..4264d236a5 100644 --- a/configuration.c +++ b/configuration.c @@ -1317,7 +1317,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings, SETTING_BOOL("builtin_imageviewer_enable", &settings->bools.multimedia_builtin_imageviewer_enable, true, true, false); SETTING_BOOL("fps_show", &settings->bools.video_fps_show, true, false, false); SETTING_BOOL("statistics_show", &settings->bools.video_statistics_show, true, false, false); - SETTING_BOOL("framecount_show", &settings->bools.video_framecount_show, true, true, false); + SETTING_BOOL("framecount_show", &settings->bools.video_framecount_show, true, false, false); SETTING_BOOL("memory_show", &settings->bools.video_memory_show, true, false, 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); From b0273953410ec63605374afd1dfa07c0e7bae4dc Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 3 Dec 2018 00:40:50 +0100 Subject: [PATCH 37/40] (Android/Vulkan) Enable 'emulate mailbox' for Android --- gfx/common/vulkan_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gfx/common/vulkan_common.c b/gfx/common/vulkan_common.c index 24402cddba..9958f7526b 100644 --- a/gfx/common/vulkan_common.c +++ b/gfx/common/vulkan_common.c @@ -42,7 +42,7 @@ #define VENDOR_ID_NV 0x10DE #define VENDOR_ID_INTEL 0x8086 -#ifdef _WIN32 +#if defined(_WIN32) || defined(ANDROID) #define VULKAN_EMULATE_MAILBOX #endif From be285b6acae8c17505ff945319ab0ba10ea8a81b Mon Sep 17 00:00:00 2001 From: hunterk Date: Sun, 2 Dec 2018 20:23:36 -0600 Subject: [PATCH 38/40] set a default SRAM autosave interval on modern platforms --- config.def.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/config.def.h b/config.def.h index 546e7bebfd..50126da58c 100644 --- a/config.def.h +++ b/config.def.h @@ -536,7 +536,13 @@ static const bool pause_nonactive = true; /* 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(_WIN32) || defined(OSX) || defined(ANDROID) || defined(IOS) +/* Flush to file every 10 seconds on modern platforms by default */ +static const unsigned autosave_interval = 10; +#else +/* Default to disabled on I/O-constrained platforms */ static const unsigned autosave_interval = 0; +#endif /* Publicly announce netplay */ static const bool netplay_public_announce = true; From 687fe77cd741aa1d5eb7ffeb2a81e42acd5b8945 Mon Sep 17 00:00:00 2001 From: hunterk Date: Tue, 4 Dec 2018 23:30:57 -0600 Subject: [PATCH 39/40] add a couple more qualifiers for the autosave interval --- config.def.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.def.h b/config.def.h index 50126da58c..91d0ec6eec 100644 --- a/config.def.h +++ b/config.def.h @@ -536,7 +536,7 @@ static const bool pause_nonactive = true; /* 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(_WIN32) || defined(OSX) || defined(ANDROID) || defined(IOS) +#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; #else From a42cacaaf6e43ec1a7eea749086609730288833e Mon Sep 17 00:00:00 2001 From: Rob Loach Date: Wed, 5 Dec 2018 01:55:22 -0500 Subject: [PATCH 40/40] autosave_interval: Fix syntax error --- config.def.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.def.h b/config.def.h index 91d0ec6eec..380e04440e 100644 --- a/config.def.h +++ b/config.def.h @@ -536,7 +536,7 @@ static const bool pause_nonactive = true; /* 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) +#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; #else