Sega Saturn emulator Yaba Sanshiro pushed a major update today for Android, changing the way it renders graphics to improve accuracy and increase the number of games compatible on it.
“The VDP1 core has been completely rewritten with compute shaders, greatly improving sprite rendering accuracy and compatibility for Sega Saturn games,” said the emulator’s developer, Shinya “DevMiyax” Miyamoto, on X.
He included a video in his post demonstrating Sega Rally Championship when swapping the “polygon generation type” setting from GPU tessellation to the experimental computer rasterizer. The environment still trembles with some seams, which isn’t found on original hardware, but those problems seem less pronounced with the new renderer.
The free Android version is here while the paid “Pro” version, which adds some extra features for US$5, is here. The iOS versions haven’t been updated since early January. The free iOS version is here while the paid iOS version is here.
The change has been just a couple weeks in the making. On May 3, Miyamoto said on X that he was investigating the polygon gap issue in Sega Rally. “To ensure accuracy, speed, and high resolution, I am migrating polygon rendering to a Compute Shader,” he said at the time.
He gave an update on his progress about a week ago, explaining that with the compute shader method, “even the tricky task of expanding the bottom-right coordinate in a vertex-based approach becomes surprisingly simple.” He accompanied that post with a pair of videos showing the difference it makes in Sega Worldwide Soccer: With GPU tessellation, the 3D flags before a match are segmented, while they look correct with the new computer shader.


Compute shaders’ improved accuracy
Miyamoto wrote a blog post last week explaining why the previous rendering method didn’t work and the new method works better.
In it, he explained that because modern GPUs render triangles while the Saturn’s VDP1 renders quads, modern GPUs draw the quads by splitting them into two triangles. But that means a texture that should look natural across the whole quad can appear distorted across the seam between the two triangles.

“Another big issue is how the right and bottom edges of a quad are handled,” he said. While the Saturn draws the full coordinates of a given polygon, modern GPUs don’t draw the bottom and right edges to avoid double-covering the same pixel. Miyamoto called it a sensible solution for today’s video cards.
“However, when you try to reproduce VDP1’s quad rasterization, this difference becomes a problem,” he said. “The rightmost column and bottommost row are missing by one pixel, and thin gaps appear between adjacent polygons.”
A third problem is caused by an emulator feature: upscaling the resolution. “At the SEGA Saturn’s native resolution, tiny coordinate offsets are barely noticeable,” Miyamoto said. “The original screen resolution is low, so single-pixel roughness blends naturally into the overall image. But when an emulator upscales the output by 2x or 4x, offsets that used to be invisible become very visible.”
Compute shaders, on the other hand, run a thread for each pixel on screen to improve accuracy.

“The previous triangle-based path required a lot of corrections to match the SEGA Saturn’s specification,” he said. “The new approach steps away from the fixed rules of triangle rasterization, and instead controls coverage testing and texture lookup for VDP1 inside the compute shader. It is not a direct forward mapping from texture to screen, but it is a practical method that stays performant on Android while getting closer to VDP1’s rasterization rules.”
While he conceded that the old tessellation method was faster in raw rendering speed, Miyamoto said using compute shaders can still be accomplished quickly enough to run games at 60 frames per second.
“The main goal of the new approach is to balance accuracy (no texture distortion, no gaps, correct one-pixel boundaries) with practical performance on Android (stable 60fps),” he said.
Earlier updates
Today’s rendering update comes a few months after a major user interface overhaul for Yaba Sanshiro’s Android version, as SHIRO! reported at the time. Miyamoto said he made that UI overhaul with the assistance of an agentic AI tool called Claude.
In a March blog post, he said he attempted to use Claude to improve the emulation itself but “it broke things pretty badly.”
That’s apparently changed, according to a social media post March 10.

“I finally started using AI to work on the core of my emulator,” Miyamoto said. “At first it kept breaking things. But once I documented my debugging process and problem-solving methods, it started fixing issues faster and more reliably than I can.”
It’s unclear whether any AI-related work is included with today’s update. The blog post about the switch to compute shaders doesn’t mention using AI.
Between that AI announcement and when SHIRO! reported on version 1.19.3’s UI overhaul, Miyamoto issued another update March 1. Version 1.19.11 improved compatibility with PAL games and fixed screen flickering in Sonic Jam, among other games.
Yaba Sanshiro began development in 2014 as a fork of Yabause, an emulator that is no longer actively worked on, to bring it to Android devices. A PC version was released later that’s been occasionally updated alongside the Android version — most recently, it was updated in February 2025.
Its name was changed to Yaba Sanshiro 2 in April 2021 after Google blacklisted the original app for including Action Replay cheats.
The emulator wasn’t approved for the Apple App Store until August 2024 when Apple changed its policy regarding game emulators.

Be the first to comment