mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-14 21:37:52 -07:00
Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.
ed67d1ae2f
Let's talk a bit about this bug. 12nd oldest bug not fixed in Dolphin, it was a lot of fun to debug and it kept me busy for a while :) Shoutout to Nintendo for framework.map, without which this could have taken a lot longer. Basic debugging using apitrace shows that the heat effect is rendered in an interesting way: * An EFB copy texture is created, using the hardware scaler to divide the texture resolution by two and that way create the blur effect. * This texture is then warped using indirect texturing: a deformation map is used to "move" the texture coordinates used to sample the framebuffer copy. Pixel shader: http://pastie.org/private/25oe1pqn6s0h5yieks1jfw Interestingly, when looking at apitrace, the deformation texture was only 4x4 pixels... weird. It also does not have any feature that you would expect from a deformation map. Seeing how the heat effect glitches, this deformation texture being wrong looks like a good candidate for the problem. Let's see how it's loaded! By NOPing random calls to GXSetTevIndirect, we find a call that when removed breaks the effect completely. The parameters used for this call come from the results of methods of JPAExTexShapeArc objects. 3 different objects go through this code path, by breaking each one we can notice that the one "controlling" the heat effect is the one at 0x81575b98. Following the path of this object a bit more, we can see that it has a method called "getIndTexId". When this is called, the returned texture ID is used to index a map and get a JPATextureArc object stored at 0x81577bec. Nice feature of JPATextureArc: they have a getName method. For this object, it returns "AK_kagerouInd01". We can probably use that to see how this texture should look like, by loading it "manually" from the Wind Waker DVD. Unfortunately I don't know how to do that. Fortunately @Abahbob got me the texture I wanted in less than 10min after I asked him on Twitter. AK_kagerouInd01 is a 32x32 texture that really looks like a deformation map: http://i.imgur.com/0TfZEVj.png . Fun fact: "kagerou" means "heat haze" in JP. So apparently we're not using the right texture object when rendering! The GXTexObj that maps to the JPATextureArc is at offset 0x81577bf0 and points to data at 0x80ed0460, but we're loading texture data from 0x0039d860 instead. I started to suspect the BP write that loads the texture parameters "did not work" somehow. Logged that and yes: nothing gets loaded to texture stage 1! ... but it turns out this is normal, the deformation map is loaded to texture stage 5 (hardcoded in the DOL). Wait, why is the TextureCache trying to load from texture stage 1 then?! Because someone sucked at hex. Fixes issue 2338. |
||
---|---|---|
CMakeTests | ||
Data | ||
docs | ||
Externals | ||
Installer | ||
Languages | ||
Source | ||
Tools | ||
.gitignore | ||
CMakeLists.txt | ||
license.txt | ||
Readme.txt |
Dolphin - A Gamecube / Triforce / Wii Emulator ========================================== Homesite: http://dolphin-emu.org/ Project Site: http://code.google.com/p/dolphin-emu Dolphin is an emulator for running Gamecube, Triforce and Wii games on Windows/Linux/OS X systems and recent Android devices. It's licensed under the terms of the GNU General Public License, version 2 (GPLv2). Team members: http://code.google.com/p/dolphin-emu/people/ Please read the FAQ before use: http://dolphin-emu.org/docs/faq/ [System Requirements] * OS: Microsoft Windows (XP/Vista or higher) or Linux or Apple Mac OS X (10.7 or higher). Windows XP x64 is NOT supported. Unix like systems other than Linux might work but are not officially supported. * Processor: A CPU with SSE2 support A modern CPU (3 GHz and Dual Core, not older than 2008) is highly recommended. * Graphics: A reasonably modern graphics card (Direct3D 10.0 / OpenGL 3.0). Direct3D 11 / OpenGL 4.4 recommended. [Installation on Windows] Use the solution file Source/dolphin-emu.sln to build Dolphin on Windows. Visual Studio 2013 is a hard requirement since previous versions don't support many C++ features that we use. Other compilers might be able to build Dolphin on Windows but have not been tested and are not recommended to be used. An installer can be created by using the Installer_win32.nsi and Installer_x64.nsi scripts in the Installer directory. This will require the Nullsoft Scriptable Install System (NSIS) to be installed. Creating an installer is not necessary to run Dolphin since the Build directory contains a working Dolphin distribution. [Installation on Linux/OS X] Dolphin requires CMake for systems other than Windows. Many libraries are bundled with Dolphin and used if they're not installed on your system. CMake will inform you if a bundled library is used or if you need to install any missing packages yourself. Build steps: mkdir Build cd Build cmake .. make On OS X, an application bundle will be created in ./Binaries. On Linux, it's strongly recommended to perform a global installation via "sudo make install". [Uninstalling] When Dolphin has been installed with the NSIS installer, you can uninstall Dolphin like any other Windows application. Linux users can run "cat install_manifest | xargs -d '\n' rm" from the build directory to uninstall Dolphin from their system. OS X users can simply delete Dolphin.app to uninstall it. Additionally, you'll want to remove the global user directory (see below to see where it's stored) if you don't plan to reinstall Dolphin. [Command line usage] Usage: Dolphin [-h] [-d] [-l] [-e <str>] [-b] [-V <str>] [-A <str>] -h, --help Show this help message -d, --debugger Opens the debugger -l, --logger Opens the logger -e, --exec=<str> Loads the specified file (DOL,ELF,WAD,GCM,ISO) -b, --batch Exit Dolphin with emulator -V, --video_backend=<str> Specify a video backend -A, --audio_emulation=<str> Low level (LLE) or high level (HLE) audio Available DSP emulation engines are HLE (High Level Emulation) and LLE (Low Level Emulation). HLE is fast but often less accurate while LLE is slow but close to perfect. Note that LLE has two submodes (Interpreter and Recompiler), which cannot be selected from the command line. Available video backends are "D3D" (only available on Windows Vista or higher), "OGL". There's also "Software Renderer", which uses the CPU for rendering and is intended for debugging purposes, only. [Sys Files] totaldb.dsy: Database of symbols (for devs only) GC/font_ansi.bin: font dumps GC/font_sjis.bin: font dumps GC/dsp_coef.bin: DSP dumps GC/dsp_rom.bin: DSP dumps The DSP dumps included with Dolphin have been written from scratch and do not contain any copyrighted material. They should work for most purposes, however some games implement copy protection by checksumming the dumps. You will need to dump the DSP files from a console and replace the default dumps if you want to fix those issues. [Folder structure] These folders are installed read-only and should not be changed. GameSettings: per-game default settings database GC: DSP and font dumps Maps: symbol tables (dev only) OpenCL: OpenCL code Shaders: post-processing shaders Themes: icon themes for GUI Wii: default Wii NAND contents [User folder structure] A number of user writeable directories are created for caching purposes or for allowing the user to edit their contents. On OS X and Linux these folders are stored in ~/Library/Application Support/Dolphin/ and ~/.dolphin-emu respectively. On Windows the user directory is stored in the "My Documents" folder by default, but there are various way to override this behavior: - Creating a file called "portable.txt" next to the Dolphin executable will store the user directory in a local directory called "User" next to the Dolphin executable. - If the registry string value "LocalUserConfig" exists in "HKEY_CURRENT_USER/Dolphin Emulator" and has the value "1", Dolphin will always start in portable mode. - If the registry string value "UserConfigPath" exists in "HKEY_CURRENT_USER/Dolphin Emulator", the user folders will be stored in the directory given by that string. The other two methods will be prioritized over this setting. List of user folders: Cache: used to cache the ISO list Config: configuration files Dump: anything dumped from dolphin GameConfig: additional settings to be applied per-game GC: memory cards Load: custom textures Logs: logs, if enabled ScreenShots: screenshots taken via Dolphin StateSaves: save states Wii: Wii NAND contents [Custom textures] Custom textures have to be placed in the user directory under Load/Textures/<GameID>/. You can find the Game ID by right-clicking a game in the ISO list and selecting "ISO Properties".