Previous Post

Status update from kd-11 (2019-08-16)

Next Post
no preview
DESCRIPTION

Hi,

It's kd-11 here with a long-awaited update on RSX emulation in the RPCS3 project. First, I would like to apologize for the delay, I chose to delay the report by a week to give me more time to complete some work that was still in-progress so that I could have more information to share with you.

Several weeks ago while I was doing regression analysis and cleanup, I encountered a particularly puzzling issue in newer naughty dog games, including The Last of Us and Uncharted 3. They seemed to have regressed and had a lot of 'noise' in their presentation. After spending days analyzing logs and traces, I realized there was nothing wrong with the emulator. The games had seemingly regressed but in reality they had problems all along that were hidden by other problems. As such I started working on a stop-gap solution to the situation. At first, I could not find any possible solution, until I started theorizing on how a game would render with both Cell and RSX at the same time. I added a memory hash routine to scan large sections of memory for alterations and found a hit - the engine was rendering in parallel with both processors and re-injecting results from the previous frame into the last stage of the next frame. This meant that it was necessary to accurately initialize memory with Cell contents, a feature already planned but largely unimplemented called "Read Buffers" in the debug settings. Several days later, this feature started working and the results were immediately promising. However, in the meantime, I received complaints of very poor performance in these games, and it was reported that using the "CPU blit" option seemed to help with this. For those unaware, CPU blit simulates the GPU copy engine on the CPU which is very inefficient. Having performance be faster using this debug option was a sign that something was broken and therefore I started on the second part of the task. I rewrote blit engine behaviour to simulate a proper DMA controller and treating PS3 VRAM as completely separate memory than PS3 main memory. I also added a DMA memory mirror pool with a sparse memory pool, but this is still done manually and not in-driver. Improvements to this are planned for the near future. This work drastically improved performance of the code and gave a few more frames in affected titles, including naughty dog games, God of War 3, etc. While the new blit engine DMA work is still not complete, it is already very promising. Note that in most affected titles there may not be much improvement in framerate if RSX is not the bottleneck.

A picture is worth a thousand words, and a video is even better. You can see the impact of these changes in the attached video.

But.. what about MGS4? More information will be made available in the upcoming days, but I can confirm progress is going well.

Thank you all for your continued support.

Regards,

kd-11

Nekotekina PATREON 7 favs
VIEWS1
FILES1 file
POSTEDAug 16, 2019
ARCHIVEDJun 10, 2026
FILES