beetle-psx-libretro/parallel-psx
Autechre a0a08bb4a5
Merge pull request #722 from xzn/scaled_read
Scaled read (fix performance regression)
2020-09-17 21:13:02 +02:00
..
atlas Simplify hack to avoid texture filtering on scaled read 2020-09-17 13:23:42 -03:00
custom-textures libretro: android: Fix hw compilation 2020-06-25 22:44:35 -05:00
glsl Add shift variable to spec constant 2020-09-16 12:01:25 -03:00
khronos/include/vulkan Add updated Khronos headers. 2018-12-12 11:24:09 +01:00
renderer Merge pull request #722 from xzn/scaled_read 2020-09-17 21:13:02 +02: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 wip so far 2020-06-16 22:53:15 +02: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.