Saturn emulator erings reaches 1.0 with GPU rendering and internal resolution up to 16x

John's open-source Saturn emulator now renders on DirectX 12, Metal and Vulkan through compute shaders written in Go, and upscales the 3D properly rather than filtering the finished frame.

AI-drafted from 3 sources. This story was written with AI from the outside reporting listed under Sources, and checked by automated tools before it went up. The originals have the full detail.

erings, an open-source Sega Saturn emulator written in Go, reached version 1.0.0 on 11 October. Its developer, John, writes in the release post that it now has the two features they wanted from the start: rendering on the GPU through compute shaders, and internal resolution upscaling at 2x, 4x, 8x or 16x. The project also has a website for the first time.

One set of drawing code for every renderer

GPU rendering runs on DirectX 12 on Windows, Metal on macOS and Vulkan 1.3 on Linux, and falls back to the software renderer when none can be used. Rather than break the Saturn's quads into triangles, which John says would only ever approximate them, John uses compute shaders that draw each pixel the way the software renderer does. The shaders are written in a restricted subset of Go, an idea John credits to Ebitengine's Kage, and translated for each backend. A drawing bug fixed in that Go code is fixed in software and on every GPU at once, and John says they saw that happen while testing NiGHTS.

The upscaling works inside the renderer instead of filtering the finished image. Lines and polygons gain pixels while keeping their original positions, but textures get no new detail, so 3D edges look smooth while sprites stay jagged. For a mostly 2D fighter such as Waku Waku 7, John says they cannot see a difference between the scales.

The numbers

On John's M4 MacBook Air, the worst-case frame in the NiGHTS test fell from 10.960 ms in version 0.4.3 to 8.354 ms in 1.0.0's software renderer, and to 7.900 ms on the GPU. Software upscaling is "basically unusable" in John's words, with 4x at about 8 fps, while the GPU holds full speed at 2x and 4x. John calls 2x the realistic limit for that laptop.

On a Windows laptop with an RTX 5060, NiGHTS averaged 8.919 ms at 4x and 17.587 ms at 8x, just over the 16.666 ms a 60 fps frame allows. Waku Waku 7 held 60 fps at 8x with 15.409 ms, and at 16x took 56.372 ms a frame, which John does not recommend. John also says Vulkan on Linux is "significantly slower than DX12".

The release notes add corrected colours and warn that saves from previous versions are not compatible. erings is GPL-3.0, includes a high-level BIOS so a real one is optional, and supports RetroAchievements. The post is open about AI: the tests, most comments and the Go-to-GPU compiler and backends were "pretty much all AI coded", designed, reviewed and corrected by John.

Sources

Image: erings.dev

More news from Gaming World