diff --git a/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/package.mk b/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/package.mk index 37275783676..20a84452d1c 100644 --- a/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/package.mk +++ b/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/package.mk @@ -20,7 +20,7 @@ ################################################################################ PKG_NAME="ppsspp-lr" -PKG_VERSION="e49c0bd8836a8a8f678565357773386f1174d3f5" +PKG_VERSION="afbc66a318b86432642b532c575241f3716642ef" # v1.20.2 PKG_LICENSE="GPLv2" PKG_SITE="https://github.com/hrydgard/ppsspp" PKG_URL="https://github.com/hrydgard/ppsspp.git" diff --git a/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/patches/002-psp-path.patch b/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/patches/002-psp-path.patch index f9ce20c81c5..e874b35d841 100644 --- a/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/patches/002-psp-path.patch +++ b/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/patches/002-psp-path.patch @@ -1,8 +1,7 @@ -diff --git a/Core/System.cpp b/Core/System.cpp -index cb6fc34fa..829a5795a 100644 ---- a/Core/System.cpp -+++ b/Core/System.cpp -@@ -619,12 +619,7 @@ std::string PSP_GetLoading() { +diff --git a/Core/Util/PathUtil.cpp b/Core/Util/PathUtil.cpp +--- a/Core/Util/PathUtil.cpp ++++ b/Core/Util/PathUtil.cpp +@@ -45,12 +45,7 @@ Path GetSysDirectory(PSPDirectories directoryType) { const Path &memStickDirectory = g_Config.memStickDirectory; Path pspDirectory; @@ -13,6 +12,6 @@ index cb6fc34fa..829a5795a 100644 - pspDirectory = memStickDirectory / "PSP"; - } + pspDirectory = memStickDirectory / "PSP"; - + switch (directoryType) { case DIRECTORY_PSP: diff --git a/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/patches/004-build-flags.patch b/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/patches/004-build-flags.patch index 2daa6ced770..5d404f39dc2 100644 --- a/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/patches/004-build-flags.patch +++ b/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/patches/004-build-flags.patch @@ -1,10 +1,10 @@ --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -395,6 +395,7 @@ +@@ -413,6 +413,7 @@ # NEON optimizations in libpng17 seem to cause PNG load errors, see #14485. add_compile_definitions(PNG_ARM_NEON_OPT=0) + add_compile_options(-Ofast -fno-tree-slp-vectorize) - add_compile_options(-Wall -Werror=return-type -Wno-unused-function -Wno-sign-compare -Wno-unused-but-set-variable "$<$:-Wno-reorder>" -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-variable) + add_compile_options(-Wall -Werror=return-type -Wno-unused-function -Wno-sign-compare -Wno-unused-but-set-variable "$<$:-Wno-reorder>" -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-variable -Wno-error=incompatible-pointer-types) if(NOT CLANG) # This one is very useful but has many false positives. diff --git a/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/patches/005-fix-atomics-arm64.patch b/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/patches/005-fix-atomics-arm64.patch index 397f36496be..47aa78410c6 100644 --- a/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/patches/005-fix-atomics-arm64.patch +++ b/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/patches/005-fix-atomics-arm64.patch @@ -1,10 +1,10 @@ --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -396,6 +396,7 @@ +@@ -414,6 +414,7 @@ add_compile_definitions(PNG_ARM_NEON_OPT=0) add_compile_options(-Ofast -fno-tree-slp-vectorize) + add_compile_options(-mno-outline-atomics) - add_compile_options(-Wall -Werror=return-type -Wno-unused-function -Wno-sign-compare -Wno-unused-but-set-variable "$<$:-Wno-reorder>" -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-variable) + add_compile_options(-Wall -Werror=return-type -Wno-unused-function -Wno-sign-compare -Wno-unused-but-set-variable "$<$:-Wno-reorder>" -Wno-unknown-pragmas -Wno-unused-value -Wno-unused-variable -Wno-error=incompatible-pointer-types) if(NOT CLANG) # This one is very useful but has many false positives. diff --git a/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/patches/007-fix-vulkan-on-libmali.patch b/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/patches/007-fix-vulkan-on-libmali.patch new file mode 100644 index 00000000000..9f5ab2b0c0c --- /dev/null +++ b/projects/ROCKNIX/packages/emulators/libretro/ppsspp-lr/patches/007-fix-vulkan-on-libmali.patch @@ -0,0 +1,45 @@ +--- a/libretro/libretro_vulkan.cpp ++++ b/libretro/libretro_vulkan.cpp +@@ -109,27 +109,34 @@ static VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice_libretro(VkPhysicalDevice p + newInfo.enabledExtensionCount = (uint32_t)enabledExtensionNames.size(); + newInfo.ppEnabledExtensionNames = newInfo.enabledExtensionCount ? enabledExtensionNames.data() : nullptr; + +- // Then check for VkPhysicalDeviceFeatures2 chaining or pEnabledFeatures to enable required features. Note that when both +- // structs are present Features2 takes precedence. vkCreateDevice parameters don't give us a simple way to detect +- // VK_KHR_get_physical_device_properties2 usage so we'll always try both paths. ++ // Check for VkPhysicalDeviceFeatures2 in pNext chain. Per Vulkan spec, pEnabledFeatures ++ // must be NULL when VkPhysicalDeviceFeatures2 is present in pNext. + std::unordered_map originalFeaturePointers; + VkPhysicalDeviceFeatures placeholderEnabledFeatures{}; ++ bool hasFeatures2InChain = false; + + for (const VkBaseOutStructure *next = (const VkBaseOutStructure *)pCreateInfo->pNext; next != nullptr;) { + if (next->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2) { + VkPhysicalDeviceFeatures *enabledFeatures = &((VkPhysicalDeviceFeatures2 *)next)->features; + originalFeaturePointers.try_emplace(enabledFeatures, *enabledFeatures); ++ hasFeatures2InChain = true; + } + + next = (const VkBaseOutStructure *)next->pNext; + } + +- if (newInfo.pEnabledFeatures) { +- placeholderEnabledFeatures = *newInfo.pEnabledFeatures; +- } ++ if (!hasFeatures2InChain) { ++ // Only use pEnabledFeatures when VkPhysicalDeviceFeatures2 is NOT in pNext chain. ++ if (newInfo.pEnabledFeatures) { ++ placeholderEnabledFeatures = *newInfo.pEnabledFeatures; ++ } + +- newInfo.pEnabledFeatures = &placeholderEnabledFeatures; +- originalFeaturePointers.try_emplace((VkPhysicalDeviceFeatures *)newInfo.pEnabledFeatures, *newInfo.pEnabledFeatures); ++ newInfo.pEnabledFeatures = &placeholderEnabledFeatures; ++ originalFeaturePointers.try_emplace((VkPhysicalDeviceFeatures *)newInfo.pEnabledFeatures, *newInfo.pEnabledFeatures); ++ } else { ++ // Ensure pEnabledFeatures is NULL when features2 is used (Vulkan spec requirement). ++ newInfo.pEnabledFeatures = nullptr; ++ } + + for (const auto& pair : originalFeaturePointers) { + for (uint32_t i = 0; i < sizeof(VkPhysicalDeviceFeatures) / sizeof(VkBool32); i++) { diff --git a/projects/ROCKNIX/packages/emulators/libretro/retroarch/sources/RK3566/retroarch-core-options.cfg b/projects/ROCKNIX/packages/emulators/libretro/retroarch/sources/RK3566/retroarch-core-options.cfg index 59b65f5bfb6..2bb9a30f5ac 100644 --- a/projects/ROCKNIX/packages/emulators/libretro/retroarch/sources/RK3566/retroarch-core-options.cfg +++ b/projects/ROCKNIX/packages/emulators/libretro/retroarch/sources/RK3566/retroarch-core-options.cfg @@ -150,3 +150,21 @@ melonds_threaded_renderer = "enabled" melonds_touch_mode = "Joystick" virtualjaguar_bios = "enabled" virtualjaguar_usefastblitter = "enabled" +ppsspp_backend = "vulkan" +ppsspp_auto_frameskip = "enabled" +ppsspp_frameskip = "1" +ppsspp_frameskip_type = "Number of frames" +ppsspp_internal_resolution = "480x272" +ppsspp_fast_memory = "enabled" +ppsspp_gpu_hardware_transform = "enabled" +ppsspp_software_skinning = "enabled" +ppsspp_lazy_texture_caching = "enabled" +ppsspp_skip_gpu_readbacks = "enabled" +ppsspp_texture_filtering = "Auto" +ppsspp_texture_anisotropic_filtering = "Off" +ppsspp_spline_quality = "Low" +ppsspp_frame_duplication = "disabled" +ppsspp_io_threading = "enabled" +ppsspp_io_timing_method = "Fast" +ppsspp_unsafe_func_replacements = "enabled" +ppsspp_sound_speedhack = "disabled" diff --git a/projects/ROCKNIX/packages/emulators/standalone/ppsspp-sa/package.mk b/projects/ROCKNIX/packages/emulators/standalone/ppsspp-sa/package.mk index 4d8dfd1461f..c6922df016b 100644 --- a/projects/ROCKNIX/packages/emulators/standalone/ppsspp-sa/package.mk +++ b/projects/ROCKNIX/packages/emulators/standalone/ppsspp-sa/package.mk @@ -5,7 +5,7 @@ PKG_NAME="ppsspp-sa" PKG_SITE="https://github.com/hrydgard/ppsspp" PKG_URL="${PKG_SITE}.git" -PKG_VERSION="eb859735feddf88dbe651763f366a7705612113a" # v1.20.1 +PKG_VERSION="afbc66a318b86432642b532c575241f3716642ef" # v1.20.2 CHEAT_DB_VERSION="7c9fe1ae71155626cea767aed53f968de9f4051f" # Update cheat.db (17/01/2026) PKG_LICENSE="GPLv2" PKG_DEPENDS_TARGET="toolchain libzip SDL2 zlib zip" diff --git a/projects/ROCKNIX/packages/emulators/standalone/ppsspp-sa/patches/002-fullscreen-drm.patch b/projects/ROCKNIX/packages/emulators/standalone/ppsspp-sa/patches/002-fullscreen-drm.patch index e4be2a11208..d194f6bc368 100644 --- a/projects/ROCKNIX/packages/emulators/standalone/ppsspp-sa/patches/002-fullscreen-drm.patch +++ b/projects/ROCKNIX/packages/emulators/standalone/ppsspp-sa/patches/002-fullscreen-drm.patch @@ -74,26 +74,22 @@ index 04c16ca7a0..cecc4b7f0f 100644 g_display.pixel_yres = g_DesktopHeight; } diff --git a/UI/MainScreen.cpp b/UI/MainScreen.cpp -index d7a97347b1..531997fba0 100644 --- a/UI/MainScreen.cpp +++ b/UI/MainScreen.cpp -@@ -1454,19 +1454,6 @@ void MainScreen::CreateViews() { +@@ -1459,18 +1459,6 @@ LinearLayout *rightColumnItems = new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT)); rightColumnItems->SetSpacing(0.0f); ViewGroup *logo = new LogoView(false, new LinearLayoutParams(FILL_PARENT, 80.0f)); -#if !defined(MOBILE_DEVICE) - auto gr = GetI18NCategory(I18NCat::GRAPHICS); -- ImageID icon(g_Config.bFullScreen ? "I_RESTORE" : "I_FULLSCREEN"); -- UI::Button *fullscreenButton = logo->Add(new Button("", icon, new AnchorLayoutParams(48, 48, NONE, 0, 0, NONE, Centering::None))); +- Button *fullscreenButton = logo->Add(new Button("", ImageID(), new AnchorLayoutParams(48, 48, NONE, 0, 0, NONE, Centering::None))); - fullscreenButton->SetIgnoreText(true); -- fullscreenButton->OnClick.Add([fullscreenButton](UI::EventParams &e) { -- if (fullscreenButton) { -- fullscreenButton->SetImageID(ImageID(!g_Config.bFullScreen ? "I_RESTORE" : "I_FULLSCREEN")); -- } +- fullscreenButton->OnClick.Add([](UI::EventParams &e) { - g_Config.bFullScreen = !g_Config.bFullScreen; - System_ApplyFullscreenState(); - }); +- fullscreenButton->SetImageIDFunc([]() { +- return g_Config.bFullScreen ? ImageID("I_RESTORE") : ImageID("I_FULLSCREEN"); +- }); -#endif rightColumnItems->Add(logo); - - LinearLayout *rightColumnChoices = rightColumnItems; diff --git a/projects/ROCKNIX/packages/emulators/standalone/ppsspp-sa/sources/RK3566/ppsspp.ini b/projects/ROCKNIX/packages/emulators/standalone/ppsspp-sa/sources/RK3566/ppsspp.ini index 8be2d8b3ab0..d830a9b86d4 100755 --- a/projects/ROCKNIX/packages/emulators/standalone/ppsspp-sa/sources/RK3566/ppsspp.ini +++ b/projects/ROCKNIX/packages/emulators/standalone/ppsspp-sa/sources/RK3566/ppsspp.ini @@ -90,9 +90,9 @@ CardboardScreenSize = 50 CardboardXShift = 0 CardboardYShift = 0 ShowFPSCounter = 3 -GraphicsBackend = 0 (OPENGL) -FailedGraphicsBackends = -VulkanDevice = +GraphicsBackend = 3 (VULKAN) +FailedGraphicsBackends = +VulkanDevice = RenderingMode = 0 SoftwareRenderer = False HardwareTransform = True @@ -102,14 +102,14 @@ BufferFiltering = 1 InternalResolution = 1 AndroidHwScale = 1 HighQualityDepth = 1 -FrameSkip = 3 +FrameSkip = 1 FrameSkipType = 0 AutoFrameSkip = True FrameRate = -1 FrameRate2 = -1 FrameSkipUnthrottle = True -ForceMaxEmulatedFPS = 30 -AnisotropyLevel = 4 +ForceMaxEmulatedFPS = 0 +AnisotropyLevel = 0 VertexDecCache = True TextureBackoffCache = True TextureSecondaryCache = False @@ -130,7 +130,7 @@ TexScalingType = 0 TexDeposterize = False VSyncInterval = True DisableStencilTest = False -BloomHack = 2 +BloomHack = 0 TimerHack = False SplineBezierQuality = 0 HardwareTessellation = False @@ -179,7 +179,7 @@ UberShaderFragment = True [Sound] Enable = True AudioBackend = 0 -AudioLatency = 1 +AudioLatency = 2 ExtraAudioBuffering = False SoundSpeedHack = False AudioResampler = False