Commit Graph

13005 Commits

Author SHA1 Message Date
skidau 7443a07f6e Merge pull request #1253 from lioncash/jitcache
JitCache: Use std::array to back the arrays within it.
2014-10-12 13:59:37 +11:00
skidau 9ddbdeb39f Merge pull request #995 from FioraAeterna/fma
Add FMA support to emitter and use it in the JIT
2014-10-12 13:56:18 +11:00
Fog 432e89b68d Added Dump Frames/Audio to Movie Menu 2014-10-11 12:31:02 -04:00
skidau a373cc0654 Merge pull request #1231 from Armada651/borderless
Support the borderless fullscreen option in all backends.
2014-10-11 14:27:49 +11:00
skidau 8738b1879c Removed the MMU Speed Hack option. The TLBHack is now enabled if the MMU option is disabled. This will help catch cases where a game requires the TLBHack but the option has not been set in the game ini. It also removes the possibility to mistakenly enable both the MMU and TLBHack. 2014-10-11 11:31:16 +11:00
Lioncash 98d9a38fe0 Merge pull request #1242 from lioncash/sync
Android: Use apply() instead of commit() for SharedPreference changes.
2014-10-10 18:42:54 -04:00
Ryan Houdek f6233cd531 Merge pull request #1254 from RachelBryk/unicode
Replace wxFileExists() with File::Exists().
2014-10-10 17:35:22 -05:00
Henrik Rydgård 877081c7df Be consistent with braces. 2014-10-10 22:34:03 +02:00
Henrik Rydgård 9bca1a00d7 x64 emitter: Add some more missing ops (MOVDQA, MOVDQU, PSHUFHW)
Also constify some pointers.
2014-10-10 18:30:05 +02:00
Henrik Rydgård a2c46665c5 x64 emitter: Add a few missing instructions 2014-10-10 18:30:04 +02:00
Rachel Bryk bf7de71fd0 Replace wxFileExists() with File::Exists().
It did not handle unicode properly.
2014-10-10 11:22:47 -04:00
crudelios 1e3b9ecdc1 Fix compile errors after rebase. 2014-10-10 12:44:44 +01:00
crudelios 9786f54414 Fixed a small bug. 2014-10-10 12:28:17 +01:00
crudelios 987bd8bb8f Several small optimizations. 2014-10-10 12:28:16 +01:00
crudelios 176ea06e82 Get buildbot to compile. 2014-10-10 12:28:15 +01:00
crudelios 47c67f014f Fix linux build and various warnings.
Increase savestate version.
2014-10-10 12:28:13 +01:00
crudelios 2d4b7e3f3f Reimplement Bounding Box calculation using the software renderer. 2014-10-10 12:27:06 +01:00
Lioncash 8b831c9483 JitCache: Use std::array to back the arrays within it.
Cleans up some of the allocation process.
2014-10-10 00:22:09 -04:00
Fiora 7ba9a8537b JIT: add basic register allocation heuristics
Should be at least a bit better than the previous LRU approach. Currently
has two basic components: whether a register is dirty (dirty registers need
to be stored, so clobbering them hurts more) and how many other registers will
be used between now and the next time a register gets used.

Also don't pre-load values that don't need to be in registers.
2014-10-09 20:09:14 -07:00
skidau b7aed97508 Merge pull request #1239 from FioraAeterna/updatetables
CPU: improve instruction table flags for RC bits
2014-10-10 13:04:57 +11:00
Lioncash 560f180ea4 Merge pull request #1251 from lioncash/cast
PPCAnalyst: Remove unnecessary casts
2014-10-09 20:26:32 -04:00
Lioncash bb377d0fc3 PPCAnalyst: Remove unnecessary casts 2014-10-09 20:19:01 -04:00
Steven V. bcf8f8f0b2 Fixed minor capitalization issue 2014-10-09 16:59:58 -04:00
Steven Vascellaro 2ce90f267c Moved "Connect Wiimote" options into submenu
Moved "Connect Wiimote 1-4" and "Connect Wii Balance Board" into their
own submenu.
2014-10-09 15:15:42 -04:00
Fiora 9d45f51459 JIT: fix accidental disabling of block linking by default
Oops.
2014-10-09 12:00:40 -07:00
Jules Blok 03e1bd0995 Limit Borderless Fullscreen to Windows systems. 2014-10-09 11:30:26 +02:00
Lioncash 67e44c0e63 Merge pull request #1235 from lioncash/func
VolumeGC: Use regular return type declaration for GetStringDecoder
2014-10-09 01:20:57 -04:00
Fog fc4125cdd1 Proper Audio/Video Dumping 2014-10-09 00:06:04 -04:00
Lioncash 053f5c1f17 Android: Use apply() instead of commit() for SharedPreference changes.
apply() changes the in-memory instance of SharedPreferences and writes to the disk asynchronously, rather than synchronously, which commit() does. Since these are done on the UI thread, they should be asynchronous.
2014-10-08 23:12:25 -04:00
skidau 86b81c55bf Merge pull request #1226 from skidau/emu-wiimote-speaker-sample-rate
Hooked up the emulated wiimote speaker's sample rate and volume set by the game
2014-10-09 14:11:21 +11:00
Sean Maas 17f0fdb18f [Android] Return to game list instead of exiting app 2014-10-08 22:28:18 -04:00
Lioncash 677d74df88 Merge pull request #1240 from FioraAeterna/fixdebugblocklink
Debug: fix disable block linking option
2014-10-08 22:13:33 -04:00
Fiora 8bf2cf0641 Debug: fix disable block linking option
Previously it did the opposite of what it was supposed to; when checked, it'd
turn block linking on, and when unchecked, it'd turn it off.

Also update JITIL's block linking disabling in debug mode to match the behavior
of the regular JIT.
2014-10-08 19:03:25 -07:00
Fiora 75a1310ba9 CPU: improve instruction table flags for RC bits 2014-10-08 11:44:37 -07:00
Rachel Bryk 2cfc1eac51 Fix another crash in tas input. 2014-10-08 09:46:28 -04:00
Fiora 9734f0c834 JIT64: use FMA instructions 2014-10-07 21:41:01 -07:00
Ryan Houdek 2423b9b2bd Merge pull request #1237 from Sonicadvance1/fix-ARM32-XER
Fix ARMv7 JIT from XER optimization.
2014-10-07 21:56:36 -05:00
Ryan Houdek 5f0011d065 Fix ARMv7 JIT from XER optimization.
This was a subtle bug I introduced since I removed a LDR in one of the ComputeCarry functions.
Basically since I wasn't loading the XER value prior to operations when I did a BIC tmp, tmp, 1 it would clear the first bit in our temp register but
retain the rest of the "random" data from that temp register. This would then save in to xer_ca, which the Interpreter will use later without any
masking to generate the XER value. Our XER generation helper functions don't do any masking since they were only expecting a single bit worth of data
in xer_ca with the rest being zero.
So now we only have one bit of data being stored in xer_ca from the ARMv7 JIT recompiler, and also a slight optimization in the ComputeCarry function
that is used on the immediate path. There wasn't any reason to load xer_ca since it only contains one bit of data now.
2014-10-07 21:43:15 -05:00
Rachel Bryk e09288aec1 Fix crash in tas input. 2014-10-07 22:35:56 -04:00
skidau 38b64fd077 Merge pull request #1213 from RachelBryk/wii-tas-input
Add wiimote tas input.
2014-10-08 13:15:43 +11:00
Fiora 4289221584 X64Emitter: add unit test for FMA 2014-10-07 18:21:07 -07:00
Fiora 019657cd93 X64Emitter: add FMA3 support 2014-10-07 18:21:07 -07:00
Lioncash 6cfa579870 VolumeGC: Use regular return type declaration for GetStringDecoder 2014-10-07 21:15:14 -04:00
Lioncash ab49d80e3f Merge pull request #1234 from Stevoisiak/renameNamesToBannerNames
Rename m_names to m_banner_names
2014-10-07 20:01:29 -04:00
Lioncash fab357552f Merge pull request #1233 from Stevoisiak/getNameRedundancy
Updated Netplay to use GetName()
2014-10-07 19:54:09 -04:00
Steven Vascellaro ebbbe43b8f Rename m_names to m_banner_names 2014-10-07 19:14:11 -04:00
Steven Vascellaro 4b9ee5ee39 Updated Netplay to use GetName() 2014-10-07 19:05:38 -04:00
Jules Blok 39f421d45d Support the borderless fullscreen option in all backends. 2014-10-07 16:48:43 +02:00
Jules Blok 7344f752b7 Replace BorderlessFullscreenEnabled by ExclusiveFullscreenEnabled.
Special handling was associated with this function, which only applies to exclusive fullscreen.
2014-10-07 16:43:32 +02:00
skidau f5b23834b5 Hooked up the emulated wiimote speaker's sample rate and volume set by the game. 2014-10-07 21:43:32 +11:00
comex 85086e1e6c Merge pull request #1224 from FioraAeterna/profile
JIT: re-add profiling support on x86_64
2014-10-07 02:31:04 -04:00
comex 39d01774de Merge pull request #1229 from lioncash/ts
Fifo: Fix tab/space mismatches
2014-10-07 02:27:37 -04:00
Fiora 5919d0962f JIT: re-add profiling support on x86_64
Still gives rather inaccurate results with conditional continue and/or
branch merging on, so those should probably be turned off when using it.
2014-10-06 20:26:58 -07:00
comex 9d059d1d2f Merge pull request #1221 from LPFaint99/memcard
Fix endian error. allows loading of current games save even if the memca...
2014-10-06 23:21:36 -04:00
skidau 1b573c4ca0 Merge pull request #1225 from lioncash/lolwx
DolphinWX: Make WXInputBase part of the WxUtils namespace.
2014-10-07 13:28:25 +11:00
skidau b3b34d16e6 Merge pull request #1218 from hthh/trampolinecaching
JIT: reuse trampolines when possible
2014-10-07 13:26:23 +11:00
skidau 8fdf43109f Merge pull request #1216 from FioraAeterna/movoptimizations
Add more AVX support, refactor emitter, reduce redundant XMM moves
2014-10-07 13:25:28 +11:00
LPFaint99 5dec943762 Fix endian error. allows loading of current games save even if the memcard is mostly full 2014-10-06 18:43:59 -07:00
Lioncash 16a74a9557 Fifo: Fix tab/space mismatches 2014-10-06 20:04:57 -04:00
Lioncash 700a4154dd Merge pull request #1228 from Stevoisiak/fixedSaveBannerFilename
Fix for banner filename from ID
2014-10-06 17:49:24 -04:00
Steven Vascellaro 63c05c15d5 Fix for banner filename from ID
Saving a banner as a .PNG now properly defaults to the gameID.
2014-10-06 17:42:24 -04:00
skidau 215685a6fe Merge pull request #1214 from rohit-n/format-warning
OGL: Silence string format warnings.
2014-10-06 16:12:40 +11:00
skidau a0a64369fc Merge pull request #1211 from skidau/remaining-block-count-zero
Re-added the change to make the dsp remaining block count zero-based.
2014-10-06 13:35:46 +11:00
Lioncash 7c05d029d3 Merge pull request #1085 from waddlesplash/refactoring
Migrate global init stuff into UICommon.
2014-10-05 21:25:44 -04:00
Lioncash af241c9710 Merge pull request #1215 from lioncash/spacing
DolphinWX: Fix double-spacing in some UI strings
2014-10-05 21:22:17 -04:00
Augustin Cavalier 19109e2d01 Migrate global init stuff into UICommon.
This avoids code duplication in a bunch of places .
I also moved the NVIDIA Optimus export into VideoCommon.
2014-10-05 20:47:37 -04:00
Lioncash 41ea4a28b2 DolphinWX: Make WXInputBase part of the WxUtils namespace.
There's no need for the preprocessor checks for wx, since this is used in wx code. Also, this being a part of the InputCommon namespace is kind of wrong.
2014-10-05 05:31:48 -04:00
Fiora 9b29fe8aed WIP: don't let the backpatcher hit the same location twice
If a location is hit by the backpatcher, don't fastmem it when recompiling the
block unless the block has actually been invalidated.
2014-10-04 21:28:21 -07:00
hthh c7208318fb JIT: Reuse trampolines when possible 2014-10-05 15:03:11 +11:00
skidau 871d308b88 Merge pull request #1206 from comex/amperspocalypse
Change a bunch of reference function arguments to pointers.
2014-10-05 12:14:04 +11:00
comex 47bf698b70 Merge pull request #1217 from lioncash/tcast
TrampolineCache: Remove unnecessary cast
2014-10-04 00:19:08 -04:00
comex 7bce3fcdf9 Merge pull request #1174 from FioraAeterna/fifowriteaddrfix
JIT: properly remove FIFO write addresses when code is invalidated
2014-10-04 00:18:58 -04:00
comex 1af4043f14 Merge pull request #1219 from FioraAeterna/fixclearcache
JIT: set clear_cache_asap to false when clearing the cache
2014-10-04 00:14:30 -04:00
skidau 0c4739eead Merge pull request #1202 from FioraAeterna/fixstartupbats
Fix BAT register initial values in bootcode
2014-10-04 13:10:47 +10:00
skidau d0ea2ad6dc Merge pull request #1198 from lioncash/crypt
WiiSaveCrypted: Move some function params over to std::string
2014-10-04 13:10:28 +10:00
skidau 6a3b05a9ea Merge pull request #1197 from RachelBryk/multicompress
Don't allow multi compress to compress wbfs or wad files.
2014-10-04 13:09:43 +10:00
Fiora 17c56b58ab JIT: set clear_cache_asap to false when clearing the cache
Would probably result in continual cache-clearing if the stack overflow code
in the BLR optimizations triggers.
2014-10-03 20:08:27 -07:00
Lioncash eb1ddb886e TrampolineCache: Remove unnecessary cast 2014-10-03 20:46:44 -04:00
Fiora bf014636c8 JIT: add more AVX support, reduce redundant XMM moves
10-20% reduction in typical compiled block size for float-heavy JIT blocks.
2014-10-03 16:17:08 -07:00
Fiora 8fe730194b JIT: load registers if they're going to be used later in the block 2014-10-03 11:58:04 -07:00
Lioncash 7610811f79 DolphinWX: Fix double-spacing in some UI strings 2014-10-03 13:54:18 -04:00
Fiora 6bff99fa75 JitAsmCommon: remove a few redundant moves 2014-10-03 10:05:42 -07:00
Fiora 7a2dd3a3c6 x64Emitter: refactor, add some new AVX instructions 2014-10-03 10:05:10 -07:00
Rohit Nirmal 12c6f97d80 OGL: Silence string format warnings. 2014-10-03 12:07:10 -04:00
Rachel Bryk c41b31d3ff Add wiimote tas input. 2014-10-03 12:02:52 -04:00
Rachel Bryk e0b5d4a86c Fix running dolphin with a single flag. 2014-10-03 07:39:51 -04:00
skidau 30c8de495e Re-added the change to make the dsp remaining block count zero-based. Fixes Dream Mix TV World Fighters. 2014-10-03 21:30:09 +10:00
skidau 16d3604211 Merge pull request #1196 from RachelBryk/framecount
Add on screen frame counter.
2014-10-03 13:31:52 +10:00
skidau 6333f41837 Merge pull request #1194 from RachelBryk/arg
If one argument is given, assume it is a game, and run it.
2014-10-03 13:31:37 +10:00
Blackbird88 981a21a12f Spelling mistake 2014-10-02 09:25:25 +02:00
comex 7f6284c2fc Change a bunch of reference function arguments to pointers.
Per the coding style and sanity.
2014-10-02 03:00:33 -04:00
comex c98a3f62be Merge pull request #1195 from rohit-n/maybe-uninitialized
VideoCommon: Silence -Wmaybe-uninitialized warnings.
2014-10-02 01:56:06 -04:00
Rohit Nirmal 3b25c88736 Change another NULL to nullptr. 2014-10-01 23:38:42 -05:00
Lioncash 54c454fc82 Jit64: Change a NULL to nullptr 2014-10-02 00:05:27 -04:00
skidau 68edddf10e Merge pull request #1193 from RachelBryk/ir-input-display
Fix IR input display.
2014-10-02 13:48:17 +10:00
skidau 50bf30111c Merge pull request #1189 from RachelBryk/nunchuck-input-display
Add support for cc and nunchuck in input display.
2014-10-02 13:47:35 +10:00
skidau 11126f0bfc Merge pull request #1155 from booto/dsp-int-fix
dsp int timing tweak
2014-10-02 13:46:03 +10:00
Fiora 1bce0a847b Fix BAT register initial values in bootcode
Probably won't affect any real things for now, since these BATs are already
hardcoded into the memory handling functions.
2014-10-01 12:54:06 -07:00
Rachel Bryk 4280d9777a Add support for cc and nunchuck in input display. 2014-10-01 03:51:49 -04:00
skidau ffe160ad81 Merge pull request #1187 from lioncash/global
AudioCommon: Prefix soundStream global with g_
2014-10-01 13:23:11 +10:00
skidau 19fbefd9bd Merge pull request #1176 from FioraAeterna/pagecrossings
MMU: support loads/stores that cross page boundaries
2014-10-01 13:22:52 +10:00
Lioncash 0d8b34612e WiiSaveCrypted: Move some function params over to std::string 2014-09-30 20:31:59 -04:00
Rachel Bryk 621d5c5cd8 Don't allow multi compress to compress wbfs or wad files. 2014-09-30 19:28:16 -04:00
Rachel Bryk f6c6f03cce Add on screen frame counter. 2014-09-30 18:49:44 -04:00
Rohit Nirmal ce8a4f5cc5 VideoCommon: Silence -Wmaybe-uninitialized warnings. 2014-09-30 16:14:18 -04:00
Tony Wasserka 13fc8e7df1 Merge pull request #578 from RachelBryk/IR
Cleanup Renderer::CalculateTargetSize(), and allow IRs higher than 4x to be set via INI.
2014-09-30 19:21:21 +02:00
Rachel Bryk c0270f63c5 If one argument is given, assume it is a game, and run it. 2014-09-30 09:21:34 -04:00
Rachel Bryk f7a993a853 Fix IR input display. 2014-09-30 08:24:18 -04:00
Fiora 85547d94be JIT: properly remove FIFO write addresses when code is invalidated
Fixes a bug caused by interaction with carry optimizations; might fix other
issues too.
2014-09-30 01:00:23 -07:00
Lioncash 7f7fb5e70c AudioCommon: Prefix soundStream global with g_ 2014-09-30 03:06:16 -04:00
comex a9b4016cd3 Merge pull request #1166 from FioraAeterna/flaglocking
JIT+Emitter: support locking flags
2014-09-30 02:57:53 -04:00
comex acac5325f5 Merge pull request #1134 from RachelBryk/movie-menu
Create new Movie menu.
2014-09-30 02:51:21 -04:00
comex 58a29ec0cd Merge pull request #1177 from lioncash/array
DSPJitRegCache: Use std::array to represent the register arrays
2014-09-30 02:50:53 -04:00
comex 71b4c2ee9c Merge pull request #1180 from Stevoisiak/Replace-GCM-With-ISO
Replaced GCM functions with ISO functions
2014-09-30 02:47:33 -04:00
comex 4edc7fbf85 Merge pull request #1190 from comex/stackalign
Remove useless STACKALIGN macro.
2014-09-30 01:54:38 -04:00
comex ac1f9f950f Merge pull request #1186 from lioncash/macro
NetPlayClient: Remove unused macro
2014-09-30 01:52:01 -04:00
comex ed2ce8d8d4 Merge pull request #1191 from comex/wxGetActiveWindow
Fix focus detection on OS X by replacing wxGetActiveWindow with wxWindow...
2014-09-30 01:49:39 -04:00
comex 2eebdff01b Remove useless STACKALIGN macro.
It only ever did anything on 32-bit OS X.

Anyway, it wasn't even on the right functions, and these days
ABI_PushRegistersAndAdjustStack should handle maintaining the ABI
correctly.
2014-09-30 01:42:47 -04:00
comex 8fed5aa492 Fix focus detection on OS X by replacing wxGetActiveWindow with wxWindow::FindFocus.
wxGetActiveWindow is implemented as "return NULL" on OS X, while
wxWindow::FindFocus works.  On Windows, the difference is in the use of
GetActiveWindow() vs. GetForegroundWindow().  A MSDN comment says:

> A system has only one active window, which GetForegroundWindow()
> returns. GetActiveWindow() seems to return the same window as
> GetForegroundWindow() if the foreground window belongs to the current
> thread. Otherwise, it always returns null, rather than the topmost
> window of the calling thread.

Since we are on the GUI thread, it shouldn't make any difference.
2014-09-30 01:35:48 -04:00
comex 5d61081f91 Merge pull request #1188 from comex/ReadDataFromFifo
ReadDataFromFifo is always called with len = 32.  Remove the parameter t...
2014-09-30 01:08:36 -04:00
Fiora 22f087275c MMU: support loads/stores that cross page boundaries
Fixes some strange issues with Rogue Squadron 3 in JIT mode.
2014-09-29 21:19:21 -07:00
Rachel Bryk f40e8a5cd0 Create new Movie menu. 2014-09-30 00:10:39 -04:00
skidau 63cee3328f Merge pull request #1167 from FioraAeterna/fixdebugwindow
Debug: fix display of instructions in virtual memory in MMU games
2014-09-30 13:28:41 +10:00
skidau f675b33640 Merge pull request #1164 from FioraAeterna/bpcarry
JIT: fix carry merging across breakpoints
2014-09-30 13:25:24 +10:00
skidau 9d9984e96f Merge pull request #1159 from FioraAeterna/blocklinkdebug
JIT: enable block linking and idle skipping in debug mode
2014-09-30 13:24:16 +10:00
skidau 7828ddd542 Merge pull request #1150 from FioraAeterna/extsmerge
JIT: merge lbz + extsb
2014-09-30 13:19:45 +10:00
skidau da221e3d9c Merge pull request #1018 from zhuowei/elf_map_basename_only
When loading the map file for a DOL/ELF file, extract only the filename from the DOL/ELF's path
2014-09-30 13:17:29 +10:00
comex 87a95727cd ReadDataFromFifo is always called with len = 32. Remove the parameter to enable optimizations.
And rename some variables around it to be less confusing.
2014-09-29 22:07:16 -04:00
Lioncash 05a8d9d54a NetPlayClient: Remove unused macro 2014-09-29 08:42:18 -04:00
Lioncash 843a3f6c15 Core: Move FPSCR exception flags to a typed enum 2014-09-29 00:46:15 -04:00
comex b8e31c1d3e Add OpenGL 4.0-4.5 core extensions.
This noticeably includes GL_ARB_get_program_binary, which was previously
thought unsupported on OS X.  Well, actually, the OS X implementation is
trivial and reports 0 binary formats (as of 10.10; this is hardcoded in
GLEngine, by the way), but at least it'll work if it's fixed someday.
2014-09-29 00:36:45 -04:00
comex 4c031bed4b Merge pull request #1179 from lioncash/casts
Jit_Integer: Get rid of some cast noise in boolX
2014-09-28 23:58:09 -04:00
skidau 8ae2152093 Merge pull request #1168 from lioncash/unique
CoreParameter: Use unique_ptrs over raw pointers.
2014-09-29 13:55:00 +10:00
skidau 007ba13cfa Merge pull request #1144 from skidau/fifo-linked
Moved the linking of the FIFO CPWritePointer near where CPWritePointer gets updated
2014-09-29 13:52:33 +10:00
skidau c7f3858379 Merge pull request #1138 from FioraAeterna/arithetweak
JIT: a small optimization for subfex and friends
2014-09-29 13:51:44 +10:00
Lioncash d13383c4e6 Merge pull request #1181 from FioraAeterna/debuggqr
GekkoDisassembler: show W and I in psq_l/psq_st disassembly
2014-09-28 23:45:49 -04:00
comex 6c0a68d507 Add the override config option.
I hate the config code, but now is not the time to fix it...
2014-09-28 21:34:31 -04:00
comex 3a2048ea57 Add a central variable g_want_determinism which controls whether to try to make things deterministic.
It now affects the GPU determinism mode as well as some miscellaneous
things that were calling IsNetPlayRunning.  Probably incomplete.

Notably, this can change while paused, if the user starts recording a
movie.  The movie code appears to have been missing locking between
setting g_playMode and doing other things, which probably had a small
chance of causing crashes or even desynced movies; fix that with
PauseAndLock.

The next commit will add a hidden config variable to override GPU
determinism mode.
2014-09-28 21:34:31 -04:00
comex 65af90669b Add the 'desynced GPU thread' mode.
It's a relatively big commit (less big with -w), but it's hard to test
any of this separately...

The basic problem is that in netplay or movies, the state of the CPU
must be deterministic, including when the game receives notification
that the GPU has processed FIFO data.  Dual core mode notifies the game
whenever the GPU thread actually gets around to doing the work, so it
isn't deterministic.  Single core mode is because it notifies the game
'instantly' (after processing the data synchronously), but it's too slow
for many systems and games.

My old dc-netplay branch worked as follows: everything worked as normal
except the state of the CP registers was a lie, and the CPU thread only
delivered results when idle detection triggered (waiting for the GPU if
they weren't ready at that point).  Usually, a game is idle iff all the
work for the frame has been done, except for a small amount of work
depending on the GPU result, so neither the CPU or the GPU waiting on
the other affected performance much.  However, it's possible that the
game could be waiting for some earlier interrupt, and any of several
games which, for whatever reason, never went into a detectable idle
(even when I tried to improve the detection) would never receive results
at all.  (The current method should have better compatibility, but it
also has slightly higher overhead and breaks some other things, so I
want to reimplement this, hopefully with less impact on the code, in the
future.)

With this commit, the basic idea is that the CPU thread acts as if the
work has been done instantly, like single core mode, but actually hands
it off asynchronously to the GPU thread (after backing up some data that
the game might change in memory before it's actually done).  Since the
work isn't done, any feedback from the GPU to the CPU, such as real
XFB/EFB copies (virtual are OK), EFB pokes, performance queries, etc. is
broken; but most games work with these options disabled, and there is no
need to try to detect what the CPU thread is doing.

Technically: when the flag g_use_deterministic_gpu_thread (currently
stuck on) is on, the CPU thread calls RunGpu like in single core mode.
This function synchronously copies the data from the FIFO to the
internal video buffer and updates the CP registers, interrupts, etc.
However, instead of the regular ReadDataFromFifo followed by running the
opcode decoder, it runs ReadDataFromFifoOnCPU ->
OpcodeDecoder_Preprocess, which relatively quickly scans through the
FIFO data, detects SetFinish calls etc., which are immediately fired,
and saves certain associated data from memory (e.g. display lists) in
AuxBuffers (a parallel stream to the main FIFO, which is a bit slow at
the moment), before handing the data off to the GPU thread to actually
render.  That makes up the bulk of this commit.

In various circumstances, including the aforementioned EFB pokes and
performance queries as well as swap requests (i.e. the end of a frame -
we don't want the CPU potentially pumping out frames too quickly and the
GPU falling behind*), SyncGPU is called to wait for actual completion.

The overhead mainly comes from OpcodeDecoder_Preprocess (which is,
again, synchronous), as well as the actual copying.

Currently, display lists and such are escrowed from main memory even
though they usually won't change over the course of a frame, and
textures are not even though they might, resulting in a small chance of
graphical glitches.  When the texture locking (i.e. fault on write) code
lands, I can make this all correct and maybe a little faster.

* This suggests an alternate determinism method of just delaying results
until a short time before the end of each frame.  For all I know this
might mostly work - I haven't tried it - but if any significant work
hinges on the competion of render to texture etc., the frame will be
missed.
2014-09-28 21:34:29 -04:00
comex 2d4b7c5900 Make ReadDataFromFifo static. 2014-09-28 21:25:12 -04:00
comex 0ae9e398c8 Rejigger some FIFO buffer variables to be more rational.
videoBuffer -> s_video_buffer
size -> s_video_buffer_write_ptr
g_pVideoData -> g_video_buffer_read_ptr (impl moved to Fifo.cpp)

This eradicates the wonderful use of 'size' as a global name, and makes
it clear that s_video_buffer_write_ptr and g_video_buffer_read_ptr are
the two ends of the FIFO buffer s_video_buffer.

Oh, and remove a useless namespace {}.
2014-09-28 21:25:12 -04:00
comex e86ddacb18 Changes to allow LoadCPReg to work in a preprocess mode which affects a separate state.
This state will be used to calculate sizes for skipping over commands on
a separate thread.  An alternative to having these state variables would
be to have the preprocessor stash "state as we go" somewhere, but I
think that would be much uglier.

GetVertexSize now takes an extra argument to determine which state to
use, as does FifoCommandRunnable, which calls it.  While I'm modifying
FifoCommandRunnable, I also change it to take a buffer and size as
parameters rather than using g_pVideoData, which will also be necessary
later.  I also get rid of an unused overload.
2014-09-28 21:25:06 -04:00
comex f0131c2e09 Mechanical changes to move most CP state to a struct rather than separate globals.
The next commit will add a separate copy of the struct and the ability
for LoadCPReg to work on it.
2014-09-28 21:23:29 -04:00
comex 90638c6806 Switch to an unordered_map as a micro-optimization. 2014-09-28 21:23:29 -04:00
comex f8452ff501 Fix threading issue with vertex loader JIT.
VertexLoader::VertexLoader was setting loop_counter, a *static*
variable, to 0.  This was nonsensical, but harmless until I started to
run it on a separate thread, where it had a chance of interfering with a
running vertex translator.

Switch to just using a register for the loop counter.
2014-09-28 21:23:28 -04:00
comex 63c62b277d Some changes to VertexLoaderManager:
- Lazily create the native vertex format (which involves GL calls) from
RunVertices rather than RefreshLoader itself, freeing the latter to be
run from the CPU thread (hopefully).

- In order to avoid useless allocations while doing so, store the native
format inside the VertexLoader rather than using a cache entry.

- Wrap the s_vertex_loader_map in a lock, for similar reasons.
2014-09-28 21:23:28 -04:00
Fiora c102fed36a GekkoDisassembler: show W and I in psq_l/psq_st disassembly 2014-09-28 17:01:35 -07:00
Steven Vascellaro b956be20e3 Replaced generalized instances of GCM with ISO
Renamed various commands to refer to ISO instead of GCM for consistency,
as the commands are used for both Wii and GameCube files.

CompressGCM --> CompressISO
DeleteGCM --> DeleteISO
MultiCompressGCM --> MultiCompressISO
MultiDecompressGCM --> MultiDecompressISO
SetDefaultGCM --> SetDefaultISO

Fixed COMPRESSISO

Fixed missing "COMPRESSISO"

Fixed more COMPRESSISO

Final fix for COMPRESSISO
2014-09-28 19:53:05 -04:00
Lioncash 7e825fdca5 Jit_Integer: Get rid of some cast noise in boolX 2014-09-28 13:28:16 -04:00
shuffle2 431fb4d82a Merge pull request #1172 from shuffle2/qt-build-spaces
Fix QtCompile.props to work if the repo path contains spaces.
2014-09-28 02:50:22 -07:00
Lioncash ab639b41ab DSPJitRegCache: Use std::array to represent the register arrays 2014-09-28 03:02:29 -04:00
Shawn Hoffman 9fe2d45ad4 Fix QtCompile.props to work if the repo path contains spaces. 2014-09-27 23:08:18 -07:00
Lioncash ee076453ce Merge pull request #1171 from lioncash/loop
DSPJitRegCache: Merge two loops in popRegs.
2014-09-28 02:07:44 -04:00
skidau 6bea53ab11 Clean-up the leftover dspARAMAddresses code that was no longer needed. 2014-09-28 15:38:35 +10:00
skidau baeca3e03b Merge pull request #1170 from lioncash/bounds
SI: Fix bounds check in GetDeviceType
2014-09-28 14:57:38 +10:00
skidau 275226c2b6 Merge pull request #1147 from RachelBryk/unicode-tex
Allow custom textures to load from unicode paths.
2014-09-28 14:54:56 +10:00
skidau afccf2276d Merge pull request #1012 from skidau/aram-dma-exceptions
Compile the ARAM DMA exception checks into the JIT block
2014-09-28 14:48:38 +10:00
Fiora 3878187721 Interpreter: remove debug printf in psq_l 2014-09-27 20:44:45 -07:00
skidau 7184019090 Increased the savestate internal version.
Added a small note for instant dma.
2014-09-28 11:51:14 +10:00
Lioncash 8b578c7ba3 DSPJitRegCache: Merge two loops in popRegs. 2014-09-27 18:33:48 -04:00
Lioncash 1c42fd9928 SI: Fix bounds check in GetDeviceType 2014-09-27 16:44:21 -04:00
Lioncash a8d8c9230b CoreParameter: Kill off an snprintf usage 2014-09-27 14:45:03 -04:00
Lioncash 2f4d3961b3 CoreParameter: Use unique_ptr in place of raw pointers 2014-09-27 14:42:59 -04:00
skidau 86b6dfe4b3 Added a instant ARAM DMA mode which is enabled automatically when required.
Detects a situation where the game is writing to the dcache at the address being DMA'd. As we do not have dcache emulation, invalid data is being DMA'd causing audio glitches. The following code detects this and enables the DMA to complete instantly before the invalid data is written.
Added accurate ARAM DMA transfer timing.
Removed the addition of DSP exception checking.
2014-09-27 20:47:29 +10:00
skidau 4b37fdfa45 Added a CompileExceptionCheck function to the JitInterface and re-routed the existing code to utilise the interface. 2014-09-27 20:16:26 +10:00
skidau 945d431171 Added OPTYPE_LOADPS and OPTYPE_STOREPS instruction types to the PPC table.
Updated ARAM DMA and FIFO write exception checking to uses these types.

Conflicts:
	Source/Core/Core/PowerPC/Interpreter/Interpreter_Tables.cpp
	Source/Core/Core/PowerPC/PPCTables.h
2014-09-27 20:16:26 +10:00
skidau 0f256715e0 Re-added the ARAM DMA exception check. This fixes the audio cutting in and out of Resident Evil 2 and 3. Removed the special case for short transfers as it is no longer required. 2014-09-27 20:16:26 +10:00
skidau d09e2abb0d Compile the ARAM DMA exception checks into the JIT block in a similar style to FIFO writes. This ensures that the ARAM DMA is handled soon after the DMA completes. Fixes issue 7122 and issue 7342. 2014-09-27 20:16:25 +10:00
Fiora fbbe9605a9 Debug: fix display of instructions in virtual memory in MMU games 2014-09-27 01:07:37 -07:00
Fiora ac1fc9ad03 JIT+Emitter: support locking flags
This helps us avoid accidentally clobbering flags between two instructions
when the flags are expected to be maintained. Dolphin will of course crash
immediately, but at least it will crash loudly and alert us of the mistake,
instead of forcing hours of bisecting to find the subtle way in which the JIT
has managed to sneak a flag-modifying instruction where there shouldn't be one.
2014-09-26 20:47:06 -07:00
skidau 23e2301223 Merge pull request #1154 from skidau/undeclared-uv0-fix
Fixed the "Undeclared identifier: uv0" OpenGL shader compile error that appears in NBA2K11.
2014-09-27 13:25:16 +10:00
skidau f5bbfa139d Merge pull request #1146 from RachelBryk/netplay-input-display
Make input display work properly with netplay.
2014-09-27 13:25:01 +10:00
Fiora 39d4306a2e JIT: fix carry merging across breakpoints
More precisely, don't do it.
2014-09-26 13:21:01 -07:00
Fiora ba39c35f24 JIT: fix branch merging, take 2
NOT doesn't set flags.
2014-09-25 22:33:40 -07:00
skidau 30d77b38c5 Merge pull request #1127 from Sonicadvance1/QGR-BitField
Change the QGR union over to a BitField union.
2014-09-26 14:53:24 +10:00
skidau 9d746b89a2 Merge pull request #1162 from FioraAeterna/fixmerges
JIT: fix bugs with ComputeRC in branch merging patch
2014-09-26 14:46:53 +10:00
Fiora f9ab25152c JIT: fix bugs with ComputeRC in branch merging patch
We really, really need to be sure the input to ComputeRC is a register.
2014-09-25 21:45:25 -07:00
skidau 146725f64a Merge pull request #1125 from Sintendo/fresjumps
Change fres/frsqrte jumps
2014-09-26 14:45:19 +10:00
Rachel Bryk 4fe1119e52 Cleanup Renderer::CalculateTargetSize(), and allow IRs higher than 4x to be set via ini. 2014-09-25 19:50:25 -04:00
comex fb3d9c9d58 Fix warning in x64CPUDetect.cpp in generic build by not building it. 2014-09-25 18:48:00 -04:00
comex 9cdd842080 Add a fake SContext definition for _M_GENERIC. 2014-09-25 18:47:34 -04:00
Fiora 23fbcecf13 JIT: enable block linking and idle skipping in debug mode
They can still be turned off, just don't force them off.
Also remove some dated comments.
2014-09-25 07:12:10 -07:00
comex 8dccb0c743 Fix fastmem in JitIL after 755bd2c4.
That commit reorganized fastmem a bit; I wrote it before the patch to
support fastmem in JitIL landed, and forgot to edit it to account for
the fact.  Since JitILBase now derives from Jitx86Base, the HandleFault
override can just be removed.
2014-09-25 01:15:58 -04:00
skidau c41f76e774 Merge pull request #1148 from lioncash/typo
ISOProperties: Fix typo in the tooltip for manual config editing.
2014-09-25 13:49:39 +10:00
skidau 6d064b0406 Merge pull request #1126 from lioncash/delete
DolphinWX: Get rid of an explicit delete in OnExportSave
2014-09-25 13:44:21 +10:00
Sintendo 29cca5c84f Change fres/frsqrte jumps 2014-09-24 21:58:01 +02:00
Fiora bfab5f1e91 JIT: generic branch merging
Why merge just cmps and rlwinm when we can merge ALL the branches?
2014-09-24 12:34:18 -07:00
Ryan Houdek 76697922b4 Implement XER optimization on ARMv7 JIT core
Not completely optimized; there's room for improvement here.
2014-09-24 12:27:54 -07:00
Fiora 5fce109ce1 Reorganize carry to store flags separately instead of part of XER
Also correct behavior with regards to which bits in XER are treated as zero
based on a hwtest (probably doesn't affect any real games, but might as well
be correct).
2014-09-24 12:27:47 -07:00
skidau 788a719718 Merge pull request #1153 from skidau/twx-bindtoreg
Replaced KillImmediate with BindToRegister in the tw instruction.
2014-09-24 13:31:44 +10:00
skidau a83792e914 Merge pull request #1074 from FioraAeterna/earlyflush
JIT: flush a register if it won't be used for the rest of the block
2014-09-24 13:30:02 +10:00
skidau 539f270c67 Added a xf.numtexgen != bp.numtextgen error log if there is a mismatch detected. 2014-09-24 10:46:09 +10:00
booto 7f76ad3edb dsp int timing tweak
this fixes a bug in GE9E5D that caused hangs on boot
2014-09-24 00:50:46 +08:00
skidau b4399dbdf3 Fixed the "Undeclared identifier: uv0" OpenGL shader compile error that appears in NBA2K11. 2014-09-24 00:10:45 +10:00
Lioncash bdd1853586 Merge pull request #1149 from rohit-n/android-warnings
Android: Silence some more warnings.
2014-09-23 07:51:14 -04:00
skidau 65eb0ff2fe Replaced KillImmediate with BindToRegister in the tw instruction. Fixes the error "WriteNormalOp - a1 and a2 cannot both be memory" which appeared on starting Monopoly Streets. 2014-09-23 18:00:41 +10:00
skidau cbf102794e Merge pull request #1130 from Sonicadvance1/AArch64-jit-extXx
[AArch64] Implement instructions.
2014-09-23 13:52:30 +10:00
skidau fb18d5376f Merge pull request #1142 from lioncash/linucks
Fix some warnings on Linux
2014-09-23 13:43:18 +10:00
Fiora 88f2fbe1a4 JIT: fix merged bclr with comex's BLR optimizations 2014-09-22 18:22:31 -07:00
Fiora f103234e2b JIT: flush a register if it won't be used for the rest of the block
This should dramatically reduce code size in the case of blocks with
lots of branches, and certainly doesn't hurt elsewhere either.

This can probably be improved a good bit through smarter tracking of register
usage, e.g. discarding registers that are going to be overwritten, but this
is a good start and should help reduce code size and register pressure.
Unlike that sort of change, this is a "safe" patch; it only flushes registers,
which can't affect correctness, unlike actually discarding data.

As part of this, refactor PPCAnalyst to support distinguishing between
float and integer registers (to properly handle instructions that access
both, like floating-point loads and stores).

Also update every instruction in the interpreter flags table I could find
that didn't have all the correct flags.
2014-09-22 16:00:25 -07:00
Fiora de86d2003a JIT: merge lbz + extsb
PPC has no 8-bit sign-extended load, so this instruction pair is very common.
x86 can do it in one op (movsx), so merge them when possible.
2014-09-22 15:41:54 -07:00
Rohit Nirmal 3168361e32 Android: Silence some more warnings. 2014-09-22 17:45:42 -04:00
Ryan Houdek 7f1185b941 Merge pull request #1140 from lioncash/android
Android: Silence a few warnings
2014-09-22 16:20:53 -05:00
Lioncash 874f5eb1ad ISOProperties: Fix typo in the tooltip for manual config editing. 2014-09-22 13:45:28 -04:00
Rachel Bryk e4d71f36b1 Make input display work properly with netplay. 2014-09-22 12:56:35 -04:00
Rachel Bryk 4ed9b561bd Allow custom textures to load from unicode paths. 2014-09-22 12:51:30 -04:00
Rachel Bryk ad460a21d7 Change netplay buffer SpinCtrl to default to 5. 2014-09-22 08:40:13 -04:00
Lioncash dd6ebd2228 Merge pull request #1141 from lioncash/rasterogl
OGL: Get rid of explicit deletes in RasterFont
2014-09-22 03:20:32 -04:00
shuffle2 c617f324b2 Merge pull request #1143 from lioncash/exi
Core: Fix SIGABRT possibility in EXI_DeviceGecko
2014-09-22 00:16:34 -07:00
skidau 8c5e12cf02 Moved the linking of the FIFO CPWritePointer near where CPWritePointer gets updated. The CPWritePointer was getting updated while it was in-flight causing Pac-man Party to flicker. Fixes issue 5223. 2014-09-22 16:49:09 +10:00
skidau 6379d3983a Merge pull request #1137 from lioncash/debugger-crash
DolphinWX: Fix case where the debugger would crash on hiding a pane.
2014-09-22 14:48:29 +10:00
Lioncash 858d18a67e Core: Fix SIGABRT possibility in EXI_DeviceGecko
Fixes issue 7586
2014-09-21 21:50:30 -04:00
Lioncash 836ff6d506 Fix some warnings on Linux 2014-09-21 20:13:22 -04:00
Lioncash 23b82bbacd OGL: Get rid of explicit deletes in RasterFont 2014-09-21 20:06:13 -04:00
Lioncash ea40fdf21c Merge pull request #1132 from lioncash/osx
Fix building Dolphin on OSX without precompiled headers
2014-09-21 20:02:59 -04:00
Lioncash 3351e3f1c3 Merge pull request #1133 from RachelBryk/state
Remove an unused variable.
2014-09-21 19:52:13 -04:00
Lioncash dc79755303 Android: Silence a few warnings 2014-09-21 19:51:27 -04:00
Rachel Bryk d933247c50 Remove an unused variable. 2014-09-21 19:40:18 -04:00
Lioncash 76ad89ebb6 DolphinWX: Fix the video dialog crashing Dolphin on OSX
When a game was running and someone opened the video dialog, it would crash. This is because the preprocessor macro should have been __APPLE__ not _APPLE_

Fixes issue 7644.
2014-09-21 16:08:16 -04:00
Lioncash 770a9a42a5 Merge pull request #1136 from lioncash/memory-view
DolphinWX: Fix the memory view in the debugger
2014-09-21 15:35:26 -04:00
Ryan Houdek 9206dd016e Merge pull request #1135 from FioraAeterna/twidisasmfix
Disassembler: fix disassembly of some twi instructions
2014-09-21 14:19:05 -05:00
Ryan Houdek 1cb07ffc14 [AArch64] Implement twi and tw. 2014-09-21 14:17:04 -05:00
Fiora 505b1bd562 JIT: a small optimization for subfex and friends 2014-09-21 12:16:26 -07:00
Lioncash 95660a5563 DolphinWX: Fix case where the debugger would crash on hiding a pane.
These ID values would clash with the window parent IDs of all the actual debugger panes (they are in the 350 range as well).

For example, attempting to show and then close the memory window would cause an assertion, because it would attempt to destroy the text control for searching through memory, rather than destroying the actual parent window it's attached to.

These IDs are only used locally, so their value doesn't matter.
2014-09-21 14:06:27 -04:00
Lioncash dc65ef33ba DolphinWX: Fix the memory view in the debugger 2014-09-21 11:47:52 -04:00
Fiora 9c4407fb80 Disassembler: fix disassembly of some twi instructions 2014-09-21 08:17:41 -07:00
Ryan Houdek 078147d424 [AArch64] Implement mfmsr 2014-09-21 07:38:21 -05:00
Ryan Houdek 9530800fd0 [AArch64] Implement mtsprin and mfsprin 2014-09-21 07:38:16 -05:00
Ryan Houdek 2bcea19492 [AArch64] Implement mtsr and mfsr 2014-09-21 07:36:14 -05:00
Tony Wasserka 1d23c2ca8b GPU: Only load the relevant color components upon writes to the tev color registers.
The other two components need not be valid upon write, hence loading them results in glitches.

Fixes issue 6783.
2014-09-21 10:38:22 +02:00
Tony Wasserka 6d4fd54683 ChunkFile: Add a DoArray overload which takes an std::array.
This is inconsistent with how other containers are used (i.e. with Do()), but making std::array be used with Do() seems rather confusing when there's also a DoArray available.
2014-09-21 10:38:22 +02:00
skidau 536582b2eb Merge pull request #1129 from lioncash/casing
VideoCommon: Fix function casing in FrameBufferManagerBase
2014-09-21 15:56:17 +10:00
Lioncash a04a99251f Fix building Dolphin on OSX without precompiled headers 2014-09-21 00:37:47 -04:00
Ryan Houdek 0f8c5bda40 [AArch64] Implement mcrf. 2014-09-20 21:19:25 -05:00
Tony Wasserka a5f4e4ad25 Merge pull request #1128 from lioncash/bits
VideoCommon: Make zfreeze in GenMode 1 bit in size
2014-09-21 00:03:36 +02:00
Ryan Houdek e708e8d5a0 [AArch64] Implement negx. 2014-09-20 16:17:16 -05:00
Ryan Houdek 75590a99cb [AArch64] Implement cntlzwx. 2014-09-20 14:52:56 -05:00
Ryan Houdek 76d2f331f0 [AArch64] Implement extshx and extsbx. 2014-09-20 14:46:53 -05:00
Lioncash a6ffa55215 VideoCommon: Fix function casing in FrameBufferManagerBase 2014-09-20 14:54:59 -04:00
Lioncash 91438fa9e7 VideoCommon: Make zfreeze in GenMode 1 bit in size 2014-09-20 14:30:41 -04:00
Ryan Houdek 9d7598266f Change the QGR union over to a BitField union.
Makes it easier to generate a QGR in my unit test, cleaner overall of course.
2014-09-20 13:15:44 -05:00
Ryan Houdek a829e596c7 Merge pull request #1121 from FioraAeterna/fixfsel
JIT: fix fsel/ps_sel implementations for NaN input
2014-09-20 12:40:55 -05:00
Lioncash b92e0660ab DolphinWX: Get rid of an explicit delete in OnExportSave 2014-09-20 13:00:55 -04:00
Fiora 6043c790b6 JIT: fix indexed paired singles
I didn't realize the I and W fields were in a different place for these
variants.

This should fix Paper Mario and probably lots of other things I accidentally
broke.
2014-09-20 00:20:49 -07:00
skidau ae17d91992 Merge pull request #1096 from RachelBryk/save-slots
Add hotkeys to select save state slots
2014-09-20 15:45:02 +10:00
Ryan Houdek 2db7413a19 Merge pull request #1118 from lioncash/lolwinapi
FrameTools: Set focus on Windows via CFrame::SetFocus
2014-09-19 20:48:27 -05:00
Ryan Houdek eb23882398 Merge pull request #1120 from rohit-n/muh-precompiled-headers
Fix build failing when disabling precompiled headers.
2014-09-19 17:43:42 -05:00
Rohit Nirmal 46057db37d Fix build failing when disabling precompiled headers. 2014-09-19 18:17:51 -04:00
Ryan Houdek d7b40fa94c Merge pull request #1119 from FioraAeterna/bytereverse
JIT: support byte-reversed stores/loads
2014-09-19 15:54:27 -05:00
Ryan Houdek 2e1377ab7e Merge pull request #1107 from FioraAeterna/opcodesearch
Debugger: make opcode search a bit better
2014-09-19 15:50:54 -05:00