Hi,
It's kd-11 with another RPCS3 development update.
I’d first like to apologize for the delayed update from my usual pattern; the task I was working on was more challenging than expected and I decided to delay the update until I had something concrete to report. But before I get into that, here’s a quick highlight of other tasks that were handled in the period since March 15th:
- The vulkan render scope restructuring was finally merged into master, bringing performance benefits with it. I discussed the basics of what this task did in the last update, but TLDR, it brings a decent performance uplift in RSX-limited applications.
- Fixed a major vertex processing bug that solved exploding vertices in some applications, e.g particle rendering in the Rachet & Clank future series.
- Refactored the backends to separate drawing code from the core. This was done in preparation for the shader interpreter integration.
- Some workarounds deemed obsolete due to driver releases were removed from the vulkan backend.
- General minor improvements in other areas, usually with fixes for bugs I encoutered while implementing the new fallback shaders.
On to the main attraction then - shader interpreter support, also called ubershaders. For those not up to speed, this is a mechanism where missing shaders during a first time run are interpreted on the GPU in real time to avoid missing visuals and broken output. The main challenge here is to implement most of the instruction set for the vertex and pixel shaders without losing too much performance. It’s not worth the effort if all we can get out of it is less than 1fps. The good news is that it proved to be a feasible strategy albeit requiring some further tuning and optimizations. Check out the screenshots below:
a) Simpler 2D games are working quite well with decent performance.
b) Here is Hatsune Miku: PDF running with pure interpreter and 75% render scale (1080p internal resolution, this game runs at 1440p internal resolution by default).
There are many other games already running, with performance being around 10-15fps at 720p. Lowering the resolution scale to 50% boosts performance significantly since the bottleneck is the shader complexity. I am still working with our testers to find the best balance for visuals and performance before these changes are ready for release. Please note that in practice, performance will not be as bad as in the screenshots as proper shaders are going to be compiling in the background and replacing the ubershader in realtime. From my limited testing so far, it is largely unnoticeable as the interpreter takes over for missing effects.
I am currently working on improving the performance of the interpreters as well as polishing up the accuracy later on. Poor performance is a major hurdle at the moment, but there are many ways we can improve this situation and I am investigating each of them. Hopefully this will be completed by the end of the upcoming week and we can have a more detailed announcement in the next two weeks.
Thank you all for your continued support.
Regards,
kd-11