Beetle PSX HW – Experimental texture replacement now available!

DISCLAIMER: Libretro as a group or entity has no affiliation or involvement in the creation of assets contained in any texture pack

So this has been a project that has been cooking in the oven for about a year in the form of a bounty. The goal is to come up with a way to not only dump all the textures of a PlayStation1 game, but also to replace them with user-supplied textures.

Doing this is hard with PlayStation renderers due to the general low level of abstraction of these renderers, which is why it’s not exactly a commonplace feature in many PS1 emulators.

So far we have let it cook slowly in the oven. However, the recent release of people preparing a Proof Of Concept demo in the form of a Chrono Cross texture pack and the circulation of a modified Beetle PSX HW core that adds support for custom texture injection has led us to make the decision to include this feature already in the buildbot cores rather than wait it out. We hope by doing this, that this feature can organically grow and that more people start taking an active interest in making their own texture packs this way for their own favorite content. Libretro is all about enabling people the power and freedom to do what they want with their legally bought content, after all.

Requirements/Availability

Should only require the Vulkan renderer and a graphics card that is compatible with the Vulkan API. Will not work with either OpenGL or software rendering.

Android, Linux and Windows are all supported targets.

How to get it

The usual. Either you have Beetle PSX HW already installed, in which case you would just go to RetroArch’s Online Updater and select ‘Update Cores’. In case you don’t have it already installed, go to ‘Online Updater’, select ‘Core Updater’ or ‘Core Downloader’ (depends on the version of RetroArch you’re using), and then download Beetle PSX HW.

Explanation of core options

Two new core options have been added.

Dump Textures

While the game is running, it will dump all current active textures it comes across to a directory. The name of this folder is [gamename]-texture-replacements, and it will dumped inside the same dir that your content (ISO or other image format) comes from.

Replace Textures

It will attempt to use all HD textures from the ‘texture-replacements’ directory. The name of this folder is [gamename]-texture-replacements, and it will try to read this directory from the same dir that your content (ISO or other image format) comes from.

NOTE: Later on, we might add another option that allows you to point the dumping and injection path to somewhere else. Right now this is a problem for instance when you have your content stored on a slow disk device like a HDD but you want your texture replacement files to be read from your much faster but smaller SSD instead. Right now, you are forced to move the image to your SSD as well, because otherwise it just dumps and/or reads these texture replacement files from the same dir as the image, in this case the mechanical harddrive.

How to make it work

Make sure you have the textures extracted already in your [ganename]texture-replacements dir, and make sure that the dir is in the same dir that your game content file (ISO or other image format) comes from.

Start Beetle PSX HW, make sure that you are using the Vulkan renderer (it won’t work with either the software renderer or GL renderer), and then make sure the ‘Replace Textures’ option is enabled.

If it works properly, you’ll start seeing low-resolution textures replaced by higher-resolution ones.

Screenshots

Future

We hope to provide you with an article in the near future that goes into how to create your own texture pack for a game.

Is the format set in stone? Is it complete? Probably no to both. It is a Work-In-Progress. However, we hope that by putting it out there already, the community can already start experimenting with the option, putting it through its paces, and see what its limitations are and how far it can be pushed.

PCSX ReARMed now has dynarec support across multiple platforms!


If you can recall, a few days ago, Beetle PSX gained a dynamic recompiler based on Lightrec/GNU Lightning. We are happy to inform you that the latest version of PCSX ReARMed now available on the buildbot also has Lightrec support enabled for x86 (32bit and 64bit) and Aarch64 (64bit ARM).

How to get it

There are two ways to update your PCSX ReARMed core:

a – If you have already installed the core before, you can go to Online Updater and select ‘Update Installed Cores’.

b – If you haven’t installed the core yet, go to Online Updater, ‘Core Updater’, and select ‘PCSX ReARMed’ from the list. It will then download and install this core.

So what has changed?

Before, PCSX ReARMed only had a dynamic recompiler for 32bit ARM-based systems. Every other CPU architecture would instead have to revert to a CPU interpreter core. This mean that for every other achitecture, it would be far slower than the optimized 32bit ARM versions.

What has changed now is that x86 (32bit and 64bit) and Aarch64 (64bit ARM) now use the Lightrec dynamic recompiler. ARM 32bit will still use the Ari64 dynamic recompiler because it just happens to be much faster than Lightrec.

Other things important of note – the 32bit ARM version uses a different renderer, NEON GPU renderer. All the other versions use P.E.Op.S. Soft GPU. NEON GPU Plugin has an enhanced resolution which gives you a 4x upscaling, while P.E.Op.S. Soft GPU doesn’t have any such feature. We’d like to bring the NEON GPU Renderer over to the other platforms but right now, the C codepaths are pretty bad compared to the optimized 32bit ARM NEON codepaths. It would require a lot of work to bring it up to par and get rid of the graphics glitches, so Pete’s Soft it is for now.

Current limitations

  • Right now it won’t work with the HLE BIOS feature. The dynamic recompiler only works right now with a real BIOS.
  • Runahead won’t work reliably right now.
  • Right now, Lightrec in PCSX ReARMed uses the Cycle Timing Check mode. If you can recall from our earlier article on Beetle PSX, this is a dynarec mode with additional cycle timing checks, which makes it significantly slower than the ‘Max performance’ mode. Hopefully PCSX ReARMed can eventually use the ‘Max Performance’ mode soon, giving us an additional speed boost.

We hope these issues can be resolved soon.

Performance tests

Test hardware: Desktop PC – Core i7 7700k, Windows 10

Game Interpreter (No Dithering) Interpreter (With Dithering) Dynarec (No Dithering) Dynarec (With Dithering)
Final Doom 246fps 245fps 621fps 616fps
Resident Evil 250fps 248fps 642fps 639fps
Tekken 3 190fps 175fps 279fps 250fps