Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -13,6 +12,6 @@ index cb6fc34fa..829a5795a 100644
- pspDirectory = memStickDirectory / "PSP";
- }
+ pspDirectory = memStickDirectory / "PSP";

switch (directoryType) {
case DIRECTORY_PSP:
Original file line number Diff line number Diff line change
@@ -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 "$<$<COMPILE_LANGUAGE:CXX>:-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 "$<$<COMPILE_LANGUAGE:CXX>:-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.
Original file line number Diff line number Diff line change
@@ -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 "$<$<COMPILE_LANGUAGE:CXX>:-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 "$<$<COMPILE_LANGUAGE:CXX>:-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.
Original file line number Diff line number Diff line change
@@ -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<VkPhysicalDeviceFeatures *, VkPhysicalDeviceFeatures> 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++) {
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -102,14 +102,14 @@ BufferFiltering = 1
InternalResolution = 1
AndroidHwScale = 1
HighQualityDepth = 1
FrameSkip = 3
FrameSkip = 1
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 seems to aggressive as a default with vulkan

FrameSkipType = 0
AutoFrameSkip = True
FrameRate = -1
FrameRate2 = -1
FrameSkipUnthrottle = True
ForceMaxEmulatedFPS = 30
AnisotropyLevel = 4
ForceMaxEmulatedFPS = 0
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this seems sane to me and helps with audio stretching. But I didn't do thorough testing

AnisotropyLevel = 0
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Leaving this off as a default seems sane, if users want prettier in lieu of smooth they can set it themselves

VertexDecCache = True
TextureBackoffCache = True
TextureSecondaryCache = False
Expand All @@ -130,7 +130,7 @@ TexScalingType = 0
TexDeposterize = False
VSyncInterval = True
DisableStencilTest = False
BloomHack = 2
BloomHack = 0
TimerHack = False
SplineBezierQuality = 0
HardwareTessellation = False
Expand Down Expand Up @@ -179,7 +179,7 @@ UberShaderFragment = True
[Sound]
Enable = True
AudioBackend = 0
AudioLatency = 1
AudioLatency = 2
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Relaxing this seemed to help with the 3 titles I tested (lumines2 which is very audio latency sensitive)

ExtraAudioBuffering = False
SoundSpeedHack = False
AudioResampler = False
Expand Down