beetle-psx-libretro/parallel-psx
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
..
atlas Fix "almost" infinite loop in Suikoden 2020-09-26 19:44:47 -03:00
custom-textures libretro: android: Fix hw compilation 2020-06-25 22:44:35 -05:00
glsl Add UNSCALED to flat primitive vertex shader 2020-10-16 01:48:27 -03:00
khronos/include/vulkan Add updated Khronos headers. 2018-12-12 11:24:09 +01:00
renderer Fix Vulkan renderer on Metal. 2023-05-05 22:27:59 -04:00
SPIRV-Cross parallel-psx: Update to latest Granite. 2018-12-12 12:23:05 +01:00
stb Remove unused CMake build. 2018-12-12 11:25:22 +01:00
util Use libretro log callbacks. 2018-12-15 21:48:02 +01:00
volk parallel-psx: Update to latest Granite. 2018-12-12 12:23:05 +01:00
vulkan Remove unused shader_manager.cpp 2023-02-24 01:54:58 +01:00
.clang-format Add parallel-psx 2016-12-03 17:13:06 +01:00
COPYING Add parallel-psx 2016-12-03 17:13:06 +01:00
format_all.sh Add parallel-psx 2016-12-03 17:13:06 +01:00
main.cpp Rework UpdateDisplayMode and rsx set_display_mode functions 2020-02-25 13:04:35 -08:00
README.md Update READMEs 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.