Previous Post

Status update from kd-11 (2020-01-01)

Next Post
no preview
DESCRIPTION

Hi,

kd-11 here with a new progress update for RPCS3.

I'd like to first wish everyone a happy year 2020 and thank all of you who support the project. As for the project, a lot happened in the last month of last year that I would like to explain further so I decided to address all of it in one update for simplicity. First, let's get the minor stuff out of the way first. Minor commits that were made in December 2019 include:

Some rendering improvements were made that removed flickering in TLOU.

Some workarounds were added to our DualShock4 handling code to allow 3rd party controllers to work.

Some outdated Vulkan code was removed and some refactoring was done.

This brings us to the major task from December 2019 - the ZCULL rewrite. For those who have kept up with previous reports, you know by now the job of the ZCULL unit is both as a synchronization clock as well as generating occlusion statistics for Cell. While simply generating timestamps is easy, generating occlusion statistics is very expensive since we need the user's GPU to generate the data required and then write it back to Cell. This is a costly affair and involves preparing data for the GPU, uploading the data, processing using the GPU 3D pipeline then reading the generated data back to the CPU. It's also used in a heavy streaming manner, so that at any one time there can be hundreds of jobs queued up in the worst cases. This made it a major bottleneck to performance and optimization was required. This is where most of my time in November and December was spent. I tried several approaches to the rewrite and was initially met with failure after failure. What worked for one game would end up being very slow in another game. However, I kept working on it and with the help of our testers, a good implementation was found that was balanced around being friendly to both the GPU and CPU. Multithreading in RSX was also expanded and made more efficient to further improve throughput in highly strained situations where a lot of data requires processing. A relaxed ZCULL mode was introduced that makes the ZCULL unit behave as a separate unit and does not fully obey synchronization rules imposed on the rest of the 3D pipeline. The culmination of this endeavor was the ZCULL rewrite pull request that can be found [here.] Right from the testing phase, the relaxed ZCULL mode showed great improvements in games which had many small draw calls and some large performance gains could be seen, upto 50% in some cases. This was the break that was needed to make some games playable, and opens up the emulator for further optimization in other areas as the major bottleneck has been alleviated.

So what's next? Well, the ZCULL rewrite took a lot of energy and I wanted to shift my focus onto some simpler tasks for the first two weeks of the new year. As such, I plan to focus on minor bugfixes and then work on some quality of life improvements with the RPCS3 native interface interactions, such as adding support for more scripts other than latin which will remove the annoying '#' symbols when some languages are displayed. I also plan to add a few more interfaces that have been sorely lacking from the emulator so far and overall aim for a better couch experience. After that I plan on returning to the shader interpreter work which should take a few weeks to complete.

Thank you all for your continued support.

Regards,

kd-11

Nekotekina PATREON 7 favs
VIEWS1
FILES1 file
POSTEDJan 1, 2020
ARCHIVEDJun 10, 2026