From da4652aa2a6365beee1348c2f56473bb10b70f52 Mon Sep 17 00:00:00 2001 From: Stuart Kenny Date: Mon, 6 Sep 2021 20:00:50 +0100 Subject: [PATCH 1/6] Do not skip SwapBuffer() when skipDrawReason set. Fixes nothing being rendered with high frameskip ratios. --- libretro/LibretroGraphicsContext.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libretro/LibretroGraphicsContext.h b/libretro/LibretroGraphicsContext.h index ca684a71c3..ee15e5a1ac 100644 --- a/libretro/LibretroGraphicsContext.h +++ b/libretro/LibretroGraphicsContext.h @@ -51,9 +51,7 @@ public: bool Init(bool cache_context); void SetRenderTarget() override {} void SwapBuffers() override { - if (!gstate_c.skipDrawReason) { - video_cb(RETRO_HW_FRAME_BUFFER_VALID, PSP_CoreParameter().pixelWidth, PSP_CoreParameter().pixelHeight, 0); - } + video_cb(RETRO_HW_FRAME_BUFFER_VALID, PSP_CoreParameter().pixelWidth, PSP_CoreParameter().pixelHeight, 0); } virtual void ContextReset(); virtual void ContextDestroy(); From 3b39b6fcaa4de173f31ff580a291a3f1abf2aaa0 Mon Sep 17 00:00:00 2001 From: Stuart Kenny Date: Mon, 6 Sep 2021 20:03:57 +0100 Subject: [PATCH 2/6] Do not fast forward by default. --- libretro/libretro.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libretro/libretro.cpp b/libretro/libretro.cpp index 970e5860cd..c368b6aa54 100644 --- a/libretro/libretro.cpp +++ b/libretro/libretro.cpp @@ -397,6 +397,16 @@ static void check_variables(CoreParameter &coreParam) } } + bool isFastForwarding = environ_cb(RETRO_ENVIRONMENT_GET_FASTFORWARDING, &isFastForwarding); + if (isFastForwarding) + { + coreParam.fastForward = true; + } + else + { + coreParam.fastForward = false; + } + if (ppsspp_texture_scaling_type.Update(&g_Config.iTexScalingType) && gpu) gpu->ClearCacheNextFrame(); @@ -683,7 +693,6 @@ bool retro_load_game(const struct retro_game_info *game) coreParam.startBreak = false; coreParam.printfEmuLog = true; coreParam.headLess = true; - coreParam.fastForward = true; coreParam.graphicsContext = ctx; coreParam.gpuCore = ctx->GetGPUCore(); coreParam.cpuCore = CPUCore::JIT; From 6db91abf171335ca7df184b162079e7fd798d77a Mon Sep 17 00:00:00 2001 From: Stuart Kenny Date: Mon, 6 Sep 2021 20:10:13 +0100 Subject: [PATCH 3/6] Move core initialization code out of retro_load_game method --- libretro/libretro.cpp | 181 ++++++++++++++---------------------------- 1 file changed, 60 insertions(+), 121 deletions(-) diff --git a/libretro/libretro.cpp b/libretro/libretro.cpp index c368b6aa54..21b65b15b0 100644 --- a/libretro/libretro.cpp +++ b/libretro/libretro.cpp @@ -343,7 +343,7 @@ static void check_variables(CoreParameter &coreParam) { bool updated = false; - if ( coreState != CORE_POWERUP + if ( coreState != CoreState::CORE_POWERUP && environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && !updated) return; @@ -421,58 +421,78 @@ void retro_set_input_state(retro_input_state_t cb) { input_state_cb = cb; } void retro_init(void) { - struct retro_log_callback log; -#if 0 - g_Config.Load(""); -#endif - - g_Config.bEnableLogging = true; - // libretro does its own timing, so this should stay CONTINUOUS. - g_Config.iFastForwardMode = (int)FastForwardMode::CONTINUOUS; - g_Config.bMemStickInserted = true; - g_Config.iGlobalVolume = VOLUME_FULL - 1; - g_Config.iReverbVolume = VOLUME_FULL; - g_Config.iAltSpeedVolume = -1; - g_Config.bEnableSound = true; - g_Config.iCwCheatRefreshRate = 60; - g_Config.iMemStickSizeGB = 16; - g_Config.bFuncReplacements = true; - g_Config.bEncryptSave = true; - g_Config.bHighQualityDepth = true; - g_Config.bLoadPlugins = true; - g_Config.bFragmentTestCache = true; - g_Config.bSavedataUpgrade= true; - g_Config.bSeparateSASThread = true; - g_Config.sMACAddress = "12:34:56:78:9A:BC"; - - g_Config.iFirmwareVersion = PSP_DEFAULT_FIRMWARE; - g_Config.iPSPModel = PSP_MODEL_SLIM; - - LogManager::Init(&g_Config.bEnableLogging); - g_threadManager.Init(cpu_info.num_cores, cpu_info.logical_cpu_count); - host = new LibretroHost; + struct retro_input_descriptor desc[] = { + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "Cross" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "Circle" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Triangle" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "Square" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "L" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "R" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" }, + { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, + { 0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X, "Right Analog X" }, + { 0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y, "Right Analog Y" }, + { 0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Left Analog X" }, + { 0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Left Analog Y" }, + { 0 }, + }; + environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, desc); + if (environ_cb(RETRO_ENVIRONMENT_GET_INPUT_BITMASKS, NULL)) + libretro_supports_bitmasks = true; + + struct retro_log_callback log; if (environ_cb(RETRO_ENVIRONMENT_GET_LOG_INTERFACE, &log)) { + LogManager::Init(&g_Config.bEnableLogging); printfLogger = new PrintfLogger(log); - LogManager *logman = LogManager::GetInstance(); + LogManager* logman = LogManager::GetInstance(); logman->RemoveListener(logman->GetConsoleListener()); logman->RemoveListener(logman->GetDebuggerListener()); logman->ChangeFileLog(nullptr); logman->AddListener(printfLogger); -#if 1 logman->SetAllLogLevels(LogTypes::LINFO); -#endif } - if (environ_cb(RETRO_ENVIRONMENT_GET_INPUT_BITMASKS, NULL)) - libretro_supports_bitmasks = true; + g_Config.Load("", ""); + g_Config.iInternalResolution = 0; + g_Config.sMACAddress = "12:34:56:78:9A:BC"; + + const char* nickname = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_USERNAME, &nickname) && nickname) + g_Config.sNickName = std::string(nickname); + + Path retro_base_dir; + Path retro_save_dir; + const char* dir_ptr = NULL; + if (environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &dir_ptr) && dir_ptr) + retro_base_dir = Path(dir_ptr); + + if (environ_cb(RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY, &dir_ptr) && dir_ptr) + retro_save_dir = Path(dir_ptr); + + retro_base_dir /= "PPSSPP"; + + g_Config.currentDirectory = retro_base_dir; + g_Config.defaultCurrentDirectory = retro_base_dir; + g_Config.memStickDirectory = retro_save_dir; + g_Config.flash0Directory = retro_base_dir / "flash0"; + g_Config.internalDataDirectory = retro_base_dir; + + VFSRegister("", new DirectoryAssetReader(retro_base_dir)); + + host = new LibretroHost; } void retro_deinit(void) { + g_threadManager.Teardown(); LogManager::Shutdown(); delete printfLogger; @@ -611,72 +631,13 @@ namespace Libretro bool retro_load_game(const struct retro_game_info *game) { - static Path retro_base_dir; - static Path retro_save_dir; - std::string error_string; - enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_XRGB8888; - const char *nickname = NULL; - const char *dir_ptr = NULL; - struct retro_input_descriptor desc[] = { - { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, - { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, - { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, - { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, - { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "Cross" }, - { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "Circle" }, - { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Triangle" }, - { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "Square" }, - { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "L" }, - { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "R" }, - { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" }, - { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, - { 0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X, "Right Analog X" }, - { 0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y, "Right Analog Y" }, - { 0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Left Analog X" }, - { 0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Left Analog Y" }, - { 0 }, - }; - - environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, desc); - + retro_pixel_format fmt = retro_pixel_format::RETRO_PIXEL_FORMAT_XRGB8888; if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { ERROR_LOG(SYSTEM, "XRGB8888 is not supported.\n"); return false; } - if (environ_cb(RETRO_ENVIRONMENT_GET_USERNAME, &nickname) && nickname) - g_Config.sNickName = std::string(nickname); - - - if (environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &dir_ptr) - && dir_ptr) - { - retro_base_dir = Path(dir_ptr); - } - - if (environ_cb(RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY, &dir_ptr) - && dir_ptr) - { - retro_save_dir = Path(dir_ptr); - } - - if (retro_base_dir.empty()) - retro_base_dir = Path(game->path).NavigateUp(); - - retro_base_dir /= "PPSSPP"; - - if (retro_save_dir.empty()) - retro_save_dir = Path(game->path).NavigateUp(); - - g_Config.currentDirectory = retro_base_dir; - g_Config.defaultCurrentDirectory = retro_base_dir; - g_Config.memStickDirectory = retro_save_dir; - g_Config.flash0Directory = retro_base_dir / "flash0"; - g_Config.internalDataDirectory = retro_base_dir; - - VFSRegister("", new DirectoryAssetReader(retro_base_dir)); - coreState = CORE_POWERUP; ctx = LibretroGraphicsContext::CreateGraphicsContext(); INFO_LOG(SYSTEM, "Using %s backend", ctx->Ident()); @@ -695,13 +656,10 @@ bool retro_load_game(const struct retro_game_info *game) coreParam.headLess = true; coreParam.graphicsContext = ctx; coreParam.gpuCore = ctx->GetGPUCore(); - coreParam.cpuCore = CPUCore::JIT; + coreParam.cpuCore = (CPUCore)g_Config.iCpuCore; check_variables(coreParam); -#if 0 - g_Config.bVertexDecoderJit = (coreParam.cpuCore == CPU_JIT) ? true : false; -#endif - + std::string error_string; if (!PSP_InitStart(coreParam, &error_string)) { ERROR_LOG(BOOT, "%s", error_string.c_str()); @@ -722,8 +680,6 @@ void retro_unload_game(void) delete ctx; ctx = nullptr; PSP_CoreParameter().graphicsContext = nullptr; - - g_threadManager.Teardown(); } void retro_reset(void) @@ -732,20 +688,11 @@ void retro_reset(void) PSP_Shutdown(); -#if 0 - coreState = CORE_POWERUP; - if (!PSP_InitStart(PSP_CoreParameter(), &error_string)) - { - ERROR_LOG(BOOT, "%s", error_string.c_str()); - environ_cb(RETRO_ENVIRONMENT_SHUTDOWN, nullptr); - } -#else if (!PSP_Init(PSP_CoreParameter(), &error_string)) { ERROR_LOG(BOOT, "%s", error_string.c_str()); environ_cb(RETRO_ENVIRONMENT_SHUTDOWN, nullptr); } -#endif } static void retro_input(void) @@ -787,7 +734,7 @@ static void retro_input(void) for (i = 0; i < sizeof(map) / sizeof(*map); i++) { - bool pressed = ret & (1 << map[i].retro); + bool pressed = ret & (1 << map[i].retro); if (pressed) { @@ -812,16 +759,8 @@ void retro_run(void) if (PSP_IsIniting()) { std::string error_string; -#if 0 - if (!PSP_InitUpdate(&error_string)) - { - graphics_context->SwapBuffers(); - return; - } -#else while (!PSP_InitUpdate(&error_string)) sleep_ms(4); -#endif if (!PSP_IsInited()) { From 0f45c95d17794bf3cee0b40986363088cf41e03e Mon Sep 17 00:00:00 2001 From: Stuart Kenny Date: Mon, 6 Sep 2021 20:13:07 +0100 Subject: [PATCH 4/6] Fix capitalization in core option labels. --- libretro/libretro.cpp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/libretro/libretro.cpp b/libretro/libretro.cpp index 21b65b15b0..3b3dc0377a 100644 --- a/libretro/libretro.cpp +++ b/libretro/libretro.cpp @@ -198,37 +198,37 @@ template class RetroOption std::vector> list_; }; -static RetroOption ppsspp_cpu_core("ppsspp_cpu_core", "CPU Core", { { "jit", CPUCore::JIT }, { "IR jit", CPUCore::IR_JIT }, { "interpreter", CPUCore::INTERPRETER } }); +static RetroOption ppsspp_cpu_core("ppsspp_cpu_core", "CPU Core", { { "JIT", CPUCore::JIT }, { "IR JIT", CPUCore::IR_JIT }, { "Interpreter", CPUCore::INTERPRETER } }); static RetroOption ppsspp_locked_cpu_speed("ppsspp_locked_cpu_speed", "Locked CPU Speed", { { "off", 0 }, { "222MHz", 222 }, { "266MHz", 266 }, { "333MHz", 333 } }); -static RetroOption ppsspp_language("ppsspp_language", "Language", { { "automatic", -1 }, { "english", PSP_SYSTEMPARAM_LANGUAGE_ENGLISH }, { "japanese", PSP_SYSTEMPARAM_LANGUAGE_JAPANESE }, { "french", PSP_SYSTEMPARAM_LANGUAGE_FRENCH }, { "spanish", PSP_SYSTEMPARAM_LANGUAGE_SPANISH }, { "german", PSP_SYSTEMPARAM_LANGUAGE_GERMAN }, { "italian", PSP_SYSTEMPARAM_LANGUAGE_ITALIAN }, { "dutch", PSP_SYSTEMPARAM_LANGUAGE_DUTCH }, { "portuguese", PSP_SYSTEMPARAM_LANGUAGE_PORTUGUESE }, { "russian", PSP_SYSTEMPARAM_LANGUAGE_RUSSIAN }, { "korean", PSP_SYSTEMPARAM_LANGUAGE_KOREAN }, { "chinese_traditional", PSP_SYSTEMPARAM_LANGUAGE_CHINESE_TRADITIONAL }, { "chinese_simplified", PSP_SYSTEMPARAM_LANGUAGE_CHINESE_SIMPLIFIED } }); -static RetroOption ppsspp_rendering_mode("ppsspp_rendering_mode", "Rendering Mode", { { "buffered", FB_BUFFERED_MODE }, { "nonbuffered", FB_NON_BUFFERED_MODE } }); +static RetroOption ppsspp_language("ppsspp_language", "Language", { { "Automatic", -1 }, { "English", PSP_SYSTEMPARAM_LANGUAGE_ENGLISH }, { "Japanese", PSP_SYSTEMPARAM_LANGUAGE_JAPANESE }, { "French", PSP_SYSTEMPARAM_LANGUAGE_FRENCH }, { "Spanish", PSP_SYSTEMPARAM_LANGUAGE_SPANISH }, { "German", PSP_SYSTEMPARAM_LANGUAGE_GERMAN }, { "Italian", PSP_SYSTEMPARAM_LANGUAGE_ITALIAN }, { "Dutch", PSP_SYSTEMPARAM_LANGUAGE_DUTCH }, { "Portuguese", PSP_SYSTEMPARAM_LANGUAGE_PORTUGUESE }, { "Russian", PSP_SYSTEMPARAM_LANGUAGE_RUSSIAN }, { "Korean", PSP_SYSTEMPARAM_LANGUAGE_KOREAN }, { "Chinese Traditional", PSP_SYSTEMPARAM_LANGUAGE_CHINESE_TRADITIONAL }, { "Chinese Simplified", PSP_SYSTEMPARAM_LANGUAGE_CHINESE_SIMPLIFIED } }); +static RetroOption ppsspp_rendering_mode("ppsspp_rendering_mode", "Rendering Mode", { { "Buffered", FB_BUFFERED_MODE }, { "Skip Buffer Effects", FB_NON_BUFFERED_MODE } }); static RetroOption ppsspp_auto_frameskip("ppsspp_auto_frameskip", "Auto Frameskip", false); -static RetroOption ppsspp_frameskip("ppsspp_frameskip", "Frameskip", { "off", "1", "2", "3", "4", "5", "6", "7", "8" }); -static RetroOption ppsspp_frameskiptype("ppsspp_frameskiptype", "Frameskip Type", { {"number of frames", 0}, {"percent of fps", 1} }); -static RetroOption ppsspp_internal_resolution("ppsspp_internal_resolution", "Internal Resolution (restart)", 1, { "480x272", "960x544", "1440x816", "1920x1088", "2400x1360", "2880x1632", "3360x1904", "3840x2176", "4320x2448", "4800x2720" }); -static RetroOption ppsspp_button_preference("ppsspp_button_preference", "Confirmation Button", { { "cross", PSP_SYSTEMPARAM_BUTTON_CROSS }, { "circle", PSP_SYSTEMPARAM_BUTTON_CIRCLE } }); +static RetroOption ppsspp_frameskip("ppsspp_frameskip", "Frameskip", { "Off", "1", "2", "3", "4", "5", "6", "7", "8" }); +static RetroOption ppsspp_frameskiptype("ppsspp_frameskiptype", "Frameskip Type", { {"Number of frames", 0}, {"Percent of FPS", 1} }); +static RetroOption ppsspp_internal_resolution("ppsspp_internal_resolution", "Internal Resolution (Restart)", 1, { "480x272", "960x544", "1440x816", "1920x1088", "2400x1360", "2880x1632", "3360x1904", "3840x2176", "4320x2448", "4800x2720" }); +static RetroOption ppsspp_button_preference("ppsspp_button_preference", "Confirmation Button", { { "Cross", PSP_SYSTEMPARAM_BUTTON_CROSS }, { "Circle", PSP_SYSTEMPARAM_BUTTON_CIRCLE } }); static RetroOption ppsspp_fast_memory("ppsspp_fast_memory", "Fast Memory (Speedhack)", true); static RetroOption ppsspp_block_transfer_gpu("ppsspp_block_transfer_gpu", "Block Transfer GPU", true); -static RetroOption ppsspp_texture_scaling_level("ppsspp_texture_scaling_level", "Texture Scaling Level", { { "off", 1 }, { "2x", 2 }, { "3x", 3 }, { "4x", 4 }, { "5x", 5 }, { "auto", 0 } }); +static RetroOption ppsspp_texture_scaling_level("ppsspp_texture_scaling_level", "Texture Scaling Level", { { "Auto", 0 }, { "Off", 1 }, { "2x", 2 }, { "3x", 3 }, { "4x", 4 }, { "5x", 5 } }); static RetroOption ppsspp_texture_scaling_type("ppsspp_texture_scaling_type", "Texture Scaling Type", { { "xbrz", TextureScalerCommon::XBRZ }, { "hybrid", TextureScalerCommon::HYBRID }, { "bicubic", TextureScalerCommon::BICUBIC }, { "hybrid_bicubic", TextureScalerCommon::HYBRID_BICUBIC } }); -static RetroOption ppsspp_texture_filtering("ppsspp_texture_filtering", "Texture Filtering", { { "auto", 1 }, { "nearest", 2 }, { "linear", 3 } }); +static RetroOption ppsspp_texture_filtering("ppsspp_texture_filtering", "Texture Filtering", { { "Auto", 1 }, { "Nearest", 2 }, { "Linear", 3 } }); static RetroOption ppsspp_texture_anisotropic_filtering("ppsspp_texture_anisotropic_filtering", "Anisotropic Filtering", { "off", "2x", "4x", "8x", "16x" }); -static RetroOption ppsspp_lower_resolution_for_effects("ppsspp_lower_resolution_for_effects", "Lower resolution for effects", { {"off", 0}, {"safe", 1}, {"balanced", 2}, {"aggressive", 3} }); +static RetroOption ppsspp_lower_resolution_for_effects("ppsspp_lower_resolution_for_effects", "Lower resolution for effects", { {"Off", 0}, {"Safe", 1}, {"Balanced", 2}, {"Aggressive", 3} }); static RetroOption ppsspp_texture_deposterize("ppsspp_texture_deposterize", "Texture Deposterize", false); static RetroOption ppsspp_texture_replacement("ppsspp_texture_replacement", "Texture Replacement", false); static RetroOption ppsspp_gpu_hardware_transform("ppsspp_gpu_hardware_transform", "GPU Hardware T&L", true); static RetroOption ppsspp_vertex_cache("ppsspp_vertex_cache", "Vertex Cache (Speedhack)", false); static RetroOption ppsspp_cheats("ppsspp_cheats", "Internal Cheats Support", false); -static RetroOption ppsspp_io_threading("ppsspp_io_threading", "I/O on thread (experimental)", true); +static RetroOption ppsspp_io_threading("ppsspp_io_threading", "I/O on thread (Experimental)", true); static RetroOption ppsspp_io_timing_method("ppsspp_io_timing_method", "IO Timing Method", { { "Fast", IOTimingMethods::IOTIMING_FAST }, { "Host", IOTimingMethods::IOTIMING_HOST }, { "Simulate UMD delays", IOTimingMethods::IOTIMING_REALISTIC } }); static RetroOption ppsspp_frame_duplication("ppsspp_frame_duplication", "Duplicate frames in 30hz games", false); static RetroOption ppsspp_software_skinning("ppsspp_software_skinning", "Software Skinning", true); static RetroOption ppsspp_ignore_bad_memory_access("ppsspp_ignore_bad_memory_access", "Ignore bad memory accesses", true); -static RetroOption ppsspp_lazy_texture_caching("ppsspp_lazy_texture_caching", "Lazy texture caching (speedup)", false); -static RetroOption ppsspp_retain_changed_textures("ppsspp_retain_changed_textures", "Retain changed textures (speedup, mem hog)", false); -static RetroOption ppsspp_force_lag_sync("ppsspp_force_lag_sync", "Force real clock sync (slower, less lag)", false); -static RetroOption ppsspp_spline_quality("ppsspp_spline_quality", "Spline/Bezier curves quality", { {"low", 0}, {"medium", 1}, {"high", 2} }); -static RetroOption ppsspp_disable_slow_framebuffer_effects("ppsspp_disable_slow_framebuffer_effects", "Disable slower effects (speedup)", false); +static RetroOption ppsspp_lazy_texture_caching("ppsspp_lazy_texture_caching", "Lazy texture caching (Speedup)", false); +static RetroOption ppsspp_retain_changed_textures("ppsspp_retain_changed_textures", "Retain changed textures (Speedup, mem hog)", false); +static RetroOption ppsspp_force_lag_sync("ppsspp_force_lag_sync", "Force real clock sync (Slower, less lag)", false); +static RetroOption ppsspp_spline_quality("ppsspp_spline_quality", "Spline/Bezier curves quality", { {"Low", 0}, {"Medium", 1}, {"High", 2} }); +static RetroOption ppsspp_disable_slow_framebuffer_effects("ppsspp_disable_slow_framebuffer_effects", "Disable slower effects (Speedup)", false); void retro_set_environment(retro_environment_t cb) { From c593da050c7dd5392fdca71429196a94ef388bbf Mon Sep 17 00:00:00 2001 From: Stuart Kenny Date: Mon, 6 Sep 2021 20:14:08 +0100 Subject: [PATCH 5/6] Expose inflight frames as core option. --- libretro/libretro.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libretro/libretro.cpp b/libretro/libretro.cpp index 3b3dc0377a..5c0b28f2c1 100644 --- a/libretro/libretro.cpp +++ b/libretro/libretro.cpp @@ -209,6 +209,7 @@ static RetroOption ppsspp_internal_resolution("ppsspp_internal_resolution", static RetroOption ppsspp_button_preference("ppsspp_button_preference", "Confirmation Button", { { "Cross", PSP_SYSTEMPARAM_BUTTON_CROSS }, { "Circle", PSP_SYSTEMPARAM_BUTTON_CIRCLE } }); static RetroOption ppsspp_fast_memory("ppsspp_fast_memory", "Fast Memory (Speedhack)", true); static RetroOption ppsspp_block_transfer_gpu("ppsspp_block_transfer_gpu", "Block Transfer GPU", true); +static RetroOption ppsspp_inflight_frames("ppsspp_inflight_frames", "Buffered frames (Slower, less lag, restart)", { "No buffer", "Up to 1", "Up to 2" }); static RetroOption ppsspp_texture_scaling_level("ppsspp_texture_scaling_level", "Texture Scaling Level", { { "Auto", 0 }, { "Off", 1 }, { "2x", 2 }, { "3x", 3 }, { "4x", 4 }, { "5x", 5 } }); static RetroOption ppsspp_texture_scaling_type("ppsspp_texture_scaling_type", "Texture Scaling Type", { { "xbrz", TextureScalerCommon::XBRZ }, { "hybrid", TextureScalerCommon::HYBRID }, { "bicubic", TextureScalerCommon::BICUBIC }, { "hybrid_bicubic", TextureScalerCommon::HYBRID_BICUBIC } }); static RetroOption ppsspp_texture_filtering("ppsspp_texture_filtering", "Texture Filtering", { { "Auto", 1 }, { "Nearest", 2 }, { "Linear", 3 } }); @@ -249,6 +250,7 @@ void retro_set_environment(retro_environment_t cb) vars.push_back(ppsspp_vertex_cache.GetOptions()); vars.push_back(ppsspp_fast_memory.GetOptions()); vars.push_back(ppsspp_block_transfer_gpu.GetOptions()); + vars.push_back(ppsspp_inflight_frames.GetOptions()); vars.push_back(ppsspp_software_skinning.GetOptions()); vars.push_back(ppsspp_lazy_texture_caching.GetOptions()); vars.push_back(ppsspp_retain_changed_textures.GetOptions()); @@ -375,6 +377,7 @@ static void check_variables(CoreParameter &coreParam) ppsspp_force_lag_sync.Update(&g_Config.bForceLagSync); ppsspp_spline_quality.Update(&g_Config.iSplineBezierQuality); ppsspp_disable_slow_framebuffer_effects.Update(&g_Config.bDisableSlowFramebufEffects); + ppsspp_inflight_frames.Update(&g_Config.iInflightFrames); ppsspp_language.Update(&g_Config.iLanguage); if (g_Config.iLanguage < 0) From feade27cd331d31c2de6531f0cd2b1c97784c727 Mon Sep 17 00:00:00 2001 From: Stuart Kenny Date: Mon, 6 Sep 2021 21:01:17 +0100 Subject: [PATCH 6/6] Review style fixes. --- libretro/libretro.cpp | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/libretro/libretro.cpp b/libretro/libretro.cpp index 5c0b28f2c1..9fe04e0454 100644 --- a/libretro/libretro.cpp +++ b/libretro/libretro.cpp @@ -401,14 +401,7 @@ static void check_variables(CoreParameter &coreParam) } bool isFastForwarding = environ_cb(RETRO_ENVIRONMENT_GET_FASTFORWARDING, &isFastForwarding); - if (isFastForwarding) - { - coreParam.fastForward = true; - } - else - { - coreParam.fastForward = false; - } + coreParam.fastForward = isFastForwarding; if (ppsspp_texture_scaling_type.Update(&g_Config.iTexScalingType) && gpu) gpu->ClearCacheNextFrame(); @@ -490,7 +483,7 @@ void retro_init(void) VFSRegister("", new DirectoryAssetReader(retro_base_dir)); - host = new LibretroHost; + host = new LibretroHost(); } void retro_deinit(void)