RetroArch 1.7.4 – Metal 2 macOS version available now!

RetroArch with Metal 2 support for macOS High Sierra users!

Up until now, we had three versions of RetroArch for macOS/OSX users:

  • RetroArch for OSX PowerPC (10.5) – For users with an old PowerMac or iBook/Powerbook. You should have at least Mac OS X version 10.5 (Leopard) installed in order for this version to work. Cores are packaged with this version because our buildbot does not serve fresh 32bit PowerPC cores for OSX.
  • RetroArch for OSX 32bit Intel (10.6) – For users with an old MacBook that has a 32bit Intel processor (for instance, 1st generation MacBook). In order to use this, you should have at least MacOS X version 10.6 (Snow Leopard) installed. Cores are packaged with this version because our buildbot does not serve fresh 32bit Intel cores for OSX.
  • RetroArch for macOS/OSX 64bit Intel (10.6) – This is what you are likely wanting to use on a modern Mac computer. You should have at least MacOS X/macOS version 10.7 (Lion) installed. Cores are distributed separately on our buildbot.

We are now adding a fourth one:

  • RetroArch for macOS 64bit Intel with Metal 2 support (10.13) – This version has all of the features of ‘RetroArch for macOS/OSX 64bit Intel’ plus a Metal 2 video driver. This version requires at least macOS 10.13 (High Sierra), a fairly modern version of macOS. For this version, we default to the Metal video driver by default.

If you have relatively modern Mac and you want to enjoy the latest in cutting edge technology, you should definitely try out this latest version. Get it by going to our Downloads page, and click on the download link below macOS High Sierra (or later).

Some important things you should know about Metal 2 – not all of the devices that can run macOS 10.13 necessarily support this. Here is a compatibility list of all supported hardware:

  • MacBook (Early 2015 or newer)
  • MacBook Pro (Mid 2012 or newer)
  • MacBook Air (Mid 2012 or newer)
  • Mac mini (Late 2012 or newer)
  • iMac (Late 2012 or newer)
  • Mac Pro (Late 2013)

What is Metal, and why is it relevant?

Up until the ’10s, Mac OS X has relied on the crossplatform OpenGL API to provide hardware accelerated rendering to developers writing Mac applications. However, since 2014, there has been an industry-wide push towards lower-level APIs, and Apple in specific decided to go with its own proprietary graphics API. This API is called Metal, and was first premiered with iOS 7 and Apple A7 devices. It has since some years ago made the switch to macOS as well, and this year the API has been bumped to version 2.

Apple has announced OpenGL will be deprecated in the future, its graphics driver stuck with the dated OpenGL 4.1 spec for years now. While we regret this industry wide push away from a standardized, cross-platform graphics API, we have been forced to move with the times and instead cater to all the major graphics APIs. There is no longer the potential for one single graphics API to cater to all platforms.

With the release of RetroArch 1.7.4, we have achieved an important milestone: we now have fully functioning graphics drivers for the three major next-generation graphics APIs. This includes Khronos’ Vulkan API (added to RetroArch since 2016), Microsoft’s Direct3D 11/12 (added to RetroArch since earlier this year), and now Apple’s Metal 2 for macOS. Thanks to Hans-Kristian Arntzen’s SPIRV-Cross middleware, we can reuse the same shaders across Direct3D/Vulkan/Metal. We therefore are very close to having a universal shader specification that will work on all the major platforms.

We are now ready for a future when Apple will outright kill OpenGL support, while at the same time we have ensured that we have one common set of shaders that can be used across all these video drivers. The developer who has added Metal 2 support to RetroArch has already indicated he intends to bring this over to iOS and tvOS as well. And who knows, maybe even backwards compatibility with Metal 1 could arrive.

How complete is the Metal video driver right now?

Fairly complete. You get:

  • Fully functioning menu drivers. XMB, MaterialUI and RGUI should work fine.
  • XMB shader pipeline effect should work as expected.
  • You can take screenshots.
  • You can go into fullscreen mode.
  • You can use slang shaders with the Metal video driver, the same shaders that can be used with Vulkan/D3D10/D3D11/D3D12.

Things that have still yet to be added which the author is considering adding:

  • Recording support independent of ffmpeg.
  • Support for the libretro API’s RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER.
  • Hardware renderer context support, so that libretro cores could make use of the Metal API.

General changelog

– COMMON: Support for “OEM-102” key (usually ‘\’ on Euro keyboards).
– MENU/QT/WIMP: Add option to filter extensions inside archives when adding to a playlist.
– METAL: Add screenshot support.

RetroArch 1.7.4 – Cheat code searching/creation interface with rumble features


Post written by RetroSven
RetroArch 1.7.4 has built-in cheat code searching/creating. Additional cheat system updates:

  • “Load Cheats” has been broken into two separate options. One will replace the list of cheats with what is being loaded whereas the other will append to the list of cheats with what is being loaded.
  • Cheat list is now automatically saved and loaded for each game
  • When using left/right to change the values of numbers, there is now a feature that gradually increases the step-size the longer you hold the button
  • Full cheat list management – Edit, Delete, Copy, Add, (to top of list, to bottom of list, above entry, below entry)
  • There are now two different cheat types – Emulator (handled by the emulator, the original type) and the new type – RetroArch – that is handled by RetroArch itself
  • Option to reload cheat file (if you manually edit file while RA is running)
  • Option to auto-apply cheats when loading game
  • Option to auto-apply cheats when toggling them on/off
  • Robust cheat searching interface (see instructions below) which works for just about every RA core
  • Rumble activation based on memory changing. For example, after finding the memory location for the number of lives in a game (via the cheat searching interface) you can set it up such that every time the value decreases (lose a life) the controller rumbles. Rumble tested with X360 controller, input driver dinput, joypad driver xinput. Available rumble controls:
    Rumble when memory value changes
    Rumble when memory value does not change
    Rumble when memory value decreases
    Rumble when memory value increases
    Rumble when memory value = value
    Rumble when memory value != value
    Rumble when memory value < value Rumble when memory value > value

General Guideline for Finding New Cheats:

  • Start game.
  • Go to Quick Menu -> Cheats -> Start or Continue Cheat Search.
  • Use left/right on “Start or Restart Cheat Search” to select a bit-size appropriate to the console you are using and the value your are searching.
  • For example, if you are playing Castlevania:SOTN on the PS1 and you want to search for the health value, then that’s a value that can be greater than 255 (0xFF), but it’s unlikely that the game developers anticipated a value larger than 65535 (0xFFFF) so set the search to 16-bit.
  • An alternate example – if you are playing Space Invaders on Atari 2600 and you want to search for the number of lives, then that’s a value that could possibly be stored in just 2-bits of data (max number of lives = 3) and since the Atari 2600 only has a very small memory space, it’s entirely possible that the memory location for the number of lives is only partially stored in a single byte while the rest of that same byte may store other important data that should not be touched. Set the size to 2-bit.
  • Select “Start or Restart Cheat Search” once you have selected the bit size
  • Go back to the game and lose a life
  • Go back to the quick menu and select “Search Memory For Values … Less Than Before” because when you started the search you had one more life than you do now. You could also try “Search Memory For Values … Equals To Before-1”. The number of matches should go down.
  • If the number of matches is still too great to peruse, then perform actions 5 and 6 repeatedly until the number of matches is something you feel comfortable trying (e.g. 10). If you run out of lives, just reset the game or restore a save state. Then your lives will likely be greater than the last time you checked, so select “Search Memory For Values … Greater Than Before”
  • Once you have a manageable list, select “Add the ## Matches to Your List”
  • Go back one menu to see the codes that have been added. Try turning just one on at a time to see if it has the desired effect. If not, turn it off and try the next one. One of them should be the location in memory that stores your number of lives and enabling the cheat in its default state will result in that memory location being overwritten by the cheat value continuously and voila infinite lives.
  • Alternately, you can “Search Memory For Values … Equal to ###” if you know the exact number (e.g. the number of hit points you have in an RPG).

Over 1000 new cheat and rumble codes added to the database across the following systems:

  • Atari 5200
  • Atari 7800
  • Atari 400/800/1200XL
  • ColecoVision
  • MSX/MSX2
  • NES
  • SNES
  • Sega Master System
  • Sega Genesis
  • TurboGrafx-16/PC-Engine

Incidentally, as a result of all this work, RetroSven also implemented savestate/serialization support for the mainline MAME core, and Reicast!

Many thanks to madmab, Bombbloke, Gilou9999, Bigby, Megaman_? for providing cheat and rumble codes for several different systems!

RetroArch 1.7.4 – Sync To Exact Content Frame Rate – Ideal for G-Sync/FreeSync users!


Blog post written by Tatsuya79

RetroArch 1.7.4 has a new feature that will be especially advantageous to users of variable sync display technologies, such as G-Sync/FreeSync. We call it “Sync to Exact Content Framerate”.

This option is the equivalent of forcing x1 speed while still allowing fast forward.
There will be no deviation from the core requested refresh rate alongside sound Dynamic Rate Control (the default RetroArch behaviour outside of this setting).
It should adapt to any refresh supported by your screen and provide smooth scrolling.

Steps to take for it to be effective:

  • Have G-Sync/FreeSync active in your video driver control panel and monitor menu
  • In RetroArch, set “Video” -> “Vertical Refresh Rate” to your monitor frequency
    (you can use “set display reported refresh rate” as it should give you your desktop refresh rate)
  • Activate “Frame Throttle”-> “Sync to Exact Content Framerate (G-Sync, FreeSync)”

Keep V-Sync active in Settings -> “Video”, it won’t work with it disabled.

Core-specific hints

  • MAME needs “Enable Throttle” in its core options to give the exact game timing.
  • Genesis Plus GX needs “System Region” set to “PAL” in its core options to switch to 50Hz. It doesn’t seem to be able to do it automatically.
  • This setting is not a silver bullet though, and it relies on the core to have proper frame timing. As a result, currently this setting can’t fix the frame pacing issues some cores suffer from (mGBA and Reicast have some at the moment).

    BeetleDC Libretro – Updates 26-7-2018

    BeetleDC Libretro and BeetleDC OIT Libretro have recently been updated.

    Here is a listing of all the changes/fixes/improvements:

    • (Dreamcast/Compatibility) Eldorado Gate – Broken opening FMV fixed (link)
    • (Dreamcast/Compatibility) Demolition Racer now works (link)
    • (Dreamcast/Compatibility) Redline Racer – Graphics bugs fixed (link)
    • (Dreamcast/Compatibility) Fixed rendering issues with Tokyo Xtreme Racer games (link)
    • (Dreamcast/Compatibility) Conflict Zone – Modern War Strategy now works
    • (NAOMI/Compatibility) Metal Slug 6 now works without graphics bugs

    BeetleDC OIT – Increased compatibility with AMD/Intel GPU drivers

    AMD GPU owners on Windows/Linux and Intel HD users on Linux/Mesa should probably be able to use the Reicast OIT core now, as several GLSL compliance bugs have been fixed by now.

    Note that BeetleDC OIT can still be very buggy for Intel HD users on Windows, and slow to boot. The renderer really lends itself better to discrete GPUs from AMD/NVidia.

    Render to texture upscaling!

    Previously, games which rendered to texture (such as Dead or Alive 2 or Crazy Taxi) would always output at 1 x native resolution. Now, you can set the upscaling factor. Games which render the screen to a texture should look much better as a result, provided your GPU is up to the task.

    An example – here is a comparison of the Crazy Taxi pause screen – left is 1x native resolution, right is 4x upscaled –

    xBRZ Texture upscaling

    This new setting allows you to upscale all the textures in a game up to 6 x their original resolution using the xBRZ texture filtering algorithm! See it in action with Shenmue in this video below –

    BeetleDC Libretro – Updates!

    BeetleDC Libretro and BeetleDC OIT Libretro have recently been updated.

    Here is a listing of all the changes/fixes/improvements:

    • (BeetleDC Libretro) – now requires OpenGL 3.0 core profile (and GLSL 1.30).
    • (BeetleDC Libretro OIT/OpenGL) – Increased compatibility with other GL 4.3 driver implementations.
    • (BeetleDC Libretro OIT) – Several performance improvements.
    • (BeetleDC Libretro OIT) – Fixed graphics issues in Resident Evil 3: Nemesis (link).
    • (Reicast Libretro OIT) – Fixed graphics issues in Dino Crisis (link).
    • (Dreamcast/PVR2) Bump mapping implemented (used in Rayman 2/Shenmue 2) (link).
    • (Dreamcast/PVR2) Trilinear filtering implemented (needed by NFL 2K2 in particular to display some ground textures correctly).
    • (Dreamcast) Bomberman Online – Fixed glitching title screen (link).
    • (Dreamcast/Compatibility) Shenmue 1 crashes fixed (thanks to x64 Dynarec CheckBlocks implementation)
    • (Dreamcast/Compatibility) Shenmue 2 crashes fixed (thanks to x64 Dynarec CheckBlocks implementation)
    • (Dreamcast/Compatibility) Alone In The Dark: New Nightmare – improvements to YUV / palette textures – no more downgraded colors in backgrounds (link).
    • (Dreamcast/Compatibility) Dead or Alive 2 LE (Japan) crashes fixed.
    • (Dreamcast/Compatibility) Draconus – Cult Of The Wyrm/Dragon’s Blood – fogging graphics glitch fixed (link).
    • (Dreamcast/Compatibility) Evolution: The World of Sacred Device (UK) now renders flat shaded polygons correctly (link).
    • (Dreamcast/Compatibility) Shadow Man works now. Set Cable Type to VGA or otherwise it will crash after the Dreamcast boot screen.
    • (Dreamcast/Compatibility) NBA 2K/2K1/2K2 now work.
    • (Dreamcast/Compatibility) Napple Tale crash no longer happens after leaving the circus.
    • (Dreamcast/Compatibility) Ooga Booga now goes ingame, some issues still remain though.
    • (Dreamcast/Compatibility) Soldier Of Fortune AI bugs fixed (link).
    • (Dreamcast/Compatibility) Test Drive Le Mans/Le Mans 24 Hours now works, still some audio glitches though.
    • (Dreamcast/Compatibility) Looney Tunes Space Race now works.
    • (Dreamcast/Compatibility) Wacky Races now works, still has some graphics glitches though.
    • (Dreamcast/Compatibility) San Francisco Rush 2049 – screen display issues fixed – Screen cropped at the top (link).
    • (Dreamcast/Compatibility) Fur Fighters now goes ingame, some issues still remain though.
    • (Dreamcast/Compatibility) Twinkle Star Sprites no longer unplayably slow due to excessive logging.
    • (Naomi) Analog input implemented for games like Monkey Ball/Virtua Tennis 2.
    • (Naomi) EEPROM saving/loading implemented.
    • (Naomi/Compatibility) Hokuto No Ken / Fist Of The North Star now works.
    • (Naomi/Compatibility) King of Fighters New Wave – no longer crashes during fights, there are still display glitches though.

    Also be sure to check our Youtube channel, where you can view a lot of videos on recent BeetleDC Libretro developments and more!