FifoPlayer

FifoPlayer is a powerful developer tool for debugging graphics related issues. It can be used to record an emulated scene during emulation and to playback it arbitrarily often lateron. Furthermore, it allows for close inspection of each FIFO command sent to the GPU during emulation. Possible use cases for FifoPlayer include debugging rendering issues in games which a developer does not have access to. Users can just record a fifo log and give it to devs, who can analyze the rendering commands without the actual game iso. Also, having an automatically formatted FIFO command list very much eases the task of figuring out how a specific game's graphics are rendered and where it goes wrong in Dolphin. FifoPlayer can restrict the render output to the objects of interest, effectively cleaning up any irritating "unrelated" objects.

How to record a fifo log?
Any of the FifoPlayer functionality requires a FIFO log to be recorded. This basically intercepts all commands sent to the GPU during the recording and stores them in a .dff file to allow easy playback and inspection.
 * While running a game, open the Fifo Player dialog from the Tools menu
 * In the Fifo Player dialog, select the Record tab
 * Adjust the number of frames to render (different issues will need a different fifo log length; for example when render output depends on the previously rendered frame, you'll want to record more than one frame)
 * Press Record and wait until the recording has finished
 * Press Save and make sure the specified filename uses a .dff extension
 * Things to keep in mind: Depending on the game, the settings Virtual XFB, Real XFB and EFB copies to RAM may cause various issues for playback. YMMV, but if the game doesn't require these settings, keep them disabled while recording.
 * Scenes involving texture preloading can't be recorded at this stage.

How to play back a fifo log?
Developers of course will want to use this to see if they can reproduce issues locally. But it's also useful for users to verify that their recorded fifo log actually works.
 * Use the Open toolbar button to open the .dff file that you want to play back. Note that fifo logs won't appear in your game list. For a more streamlined workflow you might want to use dolphin in batch mode by calling "dolphin-emu -b -e file.dff" from command line (this will play back the fifo log and immediately close the emulator once you close the emulation window).
 * Note: If the emulator immediately crashes or shows fifo errors when opening a .dff file, try disabling Dual Core mode. It's known to have some problems at the moment.
 * Render output is divided in frames. Each frame is divided in different objects. An object is defined as a group of vertices that are drawn consecutively with the same pipeline configuration.
 * In the Play tab of the Fifo Player dialog, you can adjust which frames will be rendered during playback. Note that skipped frames are rendered (but not shown) nevertheless to ensure resource validity (e.g. for EFB copies) in the following frames.
 * Similarly, you can limit the range of rendered objects. This is especially useful when you have a huge scene but are only interested in one single object which is rendered incorrectly.
 * TODO: Explain Early Memory Updates.

How to analyze a fifo log?
This is purely a developer tool because it requires strong knowledge of what GPU registers are and how they are used in the GPU FIFO.
 * Start fifo log playback like explained above and open the Analyze tab in the Fifo Player dialog
 * You should see three columns there: The leftmost one will show you a list of rendered frames. The mid column lists all objects within the selected frame. The right column shows all FIFO commands called for that object. When selecting one of the FIFO commands, a more or less descriptive explanation will be shown at the bottom of the dialog.
 * Note that the FIFO command list is a tad unintuitive: The first command should generally be a vertex draw command (e.g. 0x80) which is the one which actually draws the command, while the FIFO commands after that refer to any state changes after that (i.e. they actually apply to the next object)
 * There's also a search function that allows you to search within the currently shown command list (i.e. not across different objects/frames). It's a bit buggy at the moment, so it takes some time to get used to.
 * The currently selected FIFO command can be copied to clipboard by pressing CTRL+C