PCSX2 Documentation/GSdx Debug
The goal of this page is to describe the GSdx debug capabilities and to explain how to use them efficiently. After this tutorial, you should be able to
- generate a small reproducible testcase
- reproduce the bug
- understand what happen under the hood
Requirement: understand the standard GPU rendering pipeline
You can represent the emotion engine (CPU) and the graphics synthesiser (GPU) as 2 separates black-boxed blocks linked together with an unique channel. GSdump is a recording of all communications + an initial GS reset state (AKA GS save state).
Note: edit wiki to see correct format (TODO nice picture)
Round 1: recording ------ ------ | EE | <=> | GS | ------ v ------ | v GSdump record Round 2: replaying ------ > | GS | ^ ------ | ^ GSdump data
The EE/GS state depends on the user input (from the keyboard/pad). It is quite difficult to replay the same scene, angle of the 3d scene could be different. Some lighting effects could be also different. The GSdump saves a couple of frames to allow constant replay. This way you can compare renderer precisely. For example you can check that pixel (32, 456) of draw call 45 is exactly the same colour. If the value is slightly different it is likely a rounding bug. If the value is completely different, it is a bug.
As GSdump only record the communication, you can change all GSdx options during the replay. You can test a new hack, a new renderer, new resolution etc...
Last but not least, GSdump avoid all the shortcoming of the core emulator. For example the core remaps segmentation fault handler which isn't supported by all debug tools. Without the core, you can easily run external tools such as Valgrind/GPU debugger/CPU debugger.
How to generate a GSdump
See forum thread. (need copy past)
Extra note: recent GSdx will compress single-frame dump directly to xz format
How to replay GSdump
Advance debug capabilities
=> gs register state dump => gs texture/buffer dump => OpenGL trace