Eric Warmenhoven f9fa3eb5e8 Fix Vulkan renderer on Metal.
Vertex attribute binding strides must be aligned to 4 bytes, so says
MoltenVK. So we'll create the quad as R32G32_SFLOAT instead of
R8G8_SNORM.

Also when running a debug build of the core in a debug build of
retroarch in the debugger, the dynamic linker gets very confused about
which spirv-cross functions to call. The easiest way to give it a clue
is to reduce the exported symbol list.

Also fix the debug build on Apple.
2023-05-05 22:27:59 -04:00
..
2023-05-05 22:27:59 -04:00
2018-12-12 11:25:22 +01:00
2018-12-15 21:48:02 +01:00
2023-02-24 01:54:58 +01:00
2016-12-03 17:13:06 +01:00
2016-12-03 17:13:06 +01:00
2016-12-03 17:13:06 +01:00
2019-12-25 11:04:17 -08:00

Parallel PSX

This is a Vulkan implementation of the PlayStation 1 (PSX) graphics chip. The aim is to be best-in-class for visual quality as well as accuracy for a HW rendered plugin.

Main features:

  • Internal upscaling
  • Multisample anti-aliasing
  • Adaptive smoothing, which aims to make 2D elements smooth, and 3D elements crisp and sharp
  • Full mask bit emulation
  • Full framebuffer emulation
  • Standalone API for easy integration in other emulators
  • RSX dump playback support (can be dumped from Beetle PSX)
  • PGXP integration (sub-pixel precision and perspective correctness)

Hardware and drivers tested on

  • nVidia Linux (375.xx)
  • AMDGPU-PRO 16.30
  • Mesa Intel, Broadwell GPU (seems to fully work if you build very latest driver from source!)
  • Mesa Radeon (RADV, missing some features for full mask bit emulation)

Overview

This project consists of three modules.

Vulkan backend

This is an implementation of a higher-level API which retains most of Vulkan's ways to slash out driver overhead while being convenient to use. This API was designed to be reusable and might be hoisted out to its own project eventually.

Framebuffer Atlas

A key component is having the ability to track various access to the PSX framebuffer (1024x512). The atlas tracks hazards on 8x8 blocks and when hazards are found, Vulkan pipeline barriers and batch flushes occur. This allows us to render while doing blits to different regions of VRAM without having to fully stall the GPU.

Renderer

The renderer implements the PSX GPU commands, using both the atlas and the Vulkan backend.

Building dump player

The dump player is used to play-back and trace dumps which are used to debug games. Dumps are generated from Beetle-PSX or other programs.

git submodule init
git submodule update
mkdir build
cd build
cmake .. -DWSI=GLFW
make -j8
./rsx-player dump.rsx --dump-vram dump/game

Credits

This renderer would not have existed without the excellent Mednafen PSX emulator as well as Rustation PSX renderer. Otherwise, all code sans submodules in this repository is by Tiny Tiger.