Commit Graph
100 Commits
Author SHA1 Message Date
magumagu 31bcdb8f2f D3D+OGL: choose blendenable over logicopenable.
No sane game should turn on both logicopenable and blendenable in the same
blend mode, but not every game is sane. Fixes issue 6009.
2014-12-15 20:16:25 -08:00
magumagu e479606b07 JIT: simplify code using MOVTwo. 2014-12-12 22:29:49 -08:00
magumagu 43d56febc4 JIT: use fastmem loads in MMU mode.
Even in games that require MMU mode, loads outside the area specified by
the BAT are rare, so fastmem is a substantial improvement.

All of the interesting changes are in the backpatch handler, to make it
generate DSI exceptions correctly.
2014-12-12 22:08:46 -08:00
magumagu 6b34b1b0d0 JIT: remove unnecessary uses of MMU flag. 2014-12-03 14:06:06 -08:00
magumagu c3b36de51e HLE code replacement: remove unused code. 2014-12-03 14:05:05 -08:00
magumagu a09283cf9f ISOProperties: show all paritions on property page. 2014-11-30 16:38:15 +01:00
magumagu 4bb48d09dd DiskIO: Clean up GetTMD() API. 2014-11-30 16:38:13 +01:00
magumagu b1df4e5986 Make DVDLowOpenPartition actually change partitions. 2014-11-30 16:01:05 +01:00
magumagu c693cf46e9 JIT: remove unused flag. 2014-11-29 12:41:36 -08:00
magumagu 32e5043b29 WIP XFB scaling.
Still an ugly mess.
2014-09-19 12:33:15 -05:00
magumagu f27940478d JitIL: Attempt to constant-fold more aggressively. 2014-07-30 21:41:17 -07:00
magumagu 79ecdf5fd0 JitIL: Misc small optimizations. 2014-07-30 21:41:17 -07:00
magumagu c8dd557dde JITIL: compare instruction folding. 2014-07-30 21:41:17 -07:00
magumagu 5bb428c685 JITIL: optimize branches. 2014-07-30 21:41:17 -07:00
magumagu 79cc000d62 JITIL: Optimize compare instruction. 2014-07-30 21:41:17 -07:00
magumagu 1429fccb97 Initial unoptimized JITIL flag optimization. 2014-07-30 21:41:17 -07:00
magumagu ca0203a1cc AudioCommon: restore support for DTK volume setting. 2014-06-26 16:56:57 -07:00
magumagu 8bf3ffc76f VideoSoftware: remove duplicated CommandProcessor structures. 2014-06-21 11:54:43 -07:00
magumagu eeb7fc25f4 JIT: Make lmw/stmw use safe load/stores. 2014-06-20 12:54:10 -07:00
magumagu 6c9095ebab JITIL: fix some unsafe loads.
I'm planning on making changes to the memory code, so I don't want this
stuff to get in the way.  The slight performance hit to JITIL isn't really
important at the moment.
2014-06-20 12:53:22 -07:00
magumagu 85724dd78a JIT: Remove dead code. 2014-06-20 12:53:21 -07:00
magumagu 06864e9fee JIT: Clean up float loads and stores.
Less code is good, and this should make future changes to memory handling
easier.
2014-06-20 12:52:39 -07:00
magumagu 1f604e87be Try to make DTK rewrite handle events the same way as the old code. 2014-06-18 13:09:55 -07:00
magumagu 9d87818853 VideoCommon: small cleanups. No functional change. 2014-06-16 14:03:29 -07:00
magumagu 31b950325d HLE: Remove ES_LAUNCH HLE.
It isn't necessary anymore now that we emulate ES_LAUNCH correctly in
IPCHLE.  This fixes launching MP2 multiplayer in Metroid Prime Trilogy.
2014-06-15 20:08:15 -07:00
magumagu b423004ab3 IPCHLE: use only one CoreTiming event. 2014-06-15 20:08:14 -07:00
magumagu f9b72d0891 IPCHLE: Fix ES_LAUNCH so it works for disk titles.
Among other things, this makes the Disk Channel fully functional.
2014-06-15 20:08:14 -07:00
magumagu ee0c5bdc20 Try to fix android build. 2014-06-15 15:56:42 -07:00
magumagu a282f181cd Streaming/DTK audio: fix pausing playback. 2014-06-15 15:08:47 -07:00
magumagu affb7c17fc Audio mixer: fix a couple compiler warnings. 2014-06-15 14:51:33 -07:00
magumagu 40e2ce4f27 Audio mixer: remove check for ratio > 1.0.
The code actually handles this case correctly; the algorithm is linear
interpolation between the two closest samples, and the way it is written
should work correctly with any ratio.
2014-06-15 14:51:20 -07:00
magumagu d905cbfd5d Don't set DAZ on x86 in non-IEEE mode.
I have no idea why we were using it in the first place; it doesn't match
the behavior of PPC NI flag.
2014-06-15 03:51:51 -07:00
magumagu d43ecd0bd1 Rewrite handling of DTK (streaming) audio.
The primary motivation here is to make sure we submit samples from the
CPU thread. This makes sure the timing of related interrupts accurate,
and generally keeps the different kinds of audio synchronized.  This will also
allow improvements to audio dumping functionality.

The new code is also more concise because it gets rid of some duplicated
audio mixing code.
2014-06-14 15:55:20 -07:00
magumagu 58e9b65f9b IPCHLE: clean up spelling. 2014-06-14 10:03:49 -07:00
magumagu 063ab30e3d IPCHLE: improve HLE timing.
This change attempts to make calls to WII_IPC_HLE_Interface::Update()
more consistent.  We should be calling it whenever there is something we
can pop from a queue, and this patch does that.

DeviceUpdate() now works independently of Update(): it's now just a periodic
timer for devices which need to regularly update state.

With this change, we need a non-zero default delay for IPC replies because
replies are popped off the queue much more aggressively.

This fixes launching channels from the the System Menu.
2014-06-14 10:02:46 -07:00
magumagu 3da52018dc Interpreter: return single-precision results for ps_rsqrte. 2014-06-11 19:50:33 -07:00
magumagu 0aecd9504e Video backends: remove dead code. 2014-06-01 01:56:09 -07:00
magumagu 87a804fdfc Revert "DSound: use DSound notifications to produce sound."
This reverts commit 4990b8910b.

The commit is causing substantial performance issues for the DSound
backend which I somehow didn't catch during testing.
2014-05-31 13:35:46 -07:00
magumagu 2599cd545e JIT: make backpatch handle sign-extend from 8 bits correctly.
I don't think this is actually possible to trigger at the moment... but
it matches the implementation of SafeLoadToReg.
2014-05-26 01:45:07 -07:00
magumagu e5ebf22161 JIT: unify two branches in SafeLoadToReg.
Should behave the same as it did before.
2014-05-25 21:14:06 -07:00
magumagu 68a327c246 JIT: Simplify redundant if statements for memcheck. 2014-05-25 21:13:39 -07:00
magumagu e239e82ea3 Jit: Remove unused members from JitState. 2014-05-25 18:19:47 -07:00
magumagu ec9dd80b7f Memmap: get rid of unused junk.
This should make it a bit more clear what interfaces we're actually
exposing for memory access at the moment.
2014-05-25 18:07:09 -07:00
magumagu 44f481ec13 PPCCache: Get rid of FAST_ICACHE define.
There's no reason to keep around the ifdefs.
2014-05-25 18:06:52 -07:00
magumagu 98dd99a696 Interpreter: correctly support HLE functions.
m_EndBlock is always false at the beginning of SingleStepInner in the
normal interpreter loop.
2014-05-25 15:39:46 -07:00
magumagu 282e9bd292 JitCache: use a custom bit-set class.
Unfortunately, this appears to be necessary for the sake of performance;
the standard library equivalents don't work well enough on Visual Studio
2013. vector<bool>::insert() is way too slow in debug
builds to be usable, and std::bitset generates inefficient code in release
builds.
2014-05-24 14:17:53 -07:00
magumagu 6bb08de8a0 JIT: get rid of useless code in JitCache.cpp. 2014-05-24 11:04:24 -07:00
magumagu 336b55bbc4 BS2 emulation: set up a reasonable BAT during startup.
It doesn't really matter much at the moment given our current terrible MMU
emulation, but it will start mattering once our MMU emulation gets more
accurate.
2014-05-24 03:46:12 -07:00
magumagu 440246a190 Interpreter: use numeric_limits instead of FLT_MAX.
Minor cleanup, and fixes compilation on some systems.
2014-05-24 10:58:15 +02:00
magumagu 6955fef161 Interpreter: Code style fixes. 2014-05-23 15:06:09 -07:00
magumagu d0ed3b8192 Jit: Use infinity and NaN from numeric_limits.
MSVC's implementation of INFINITY is unusable.
2014-05-23 14:59:03 -07:00
magumagu a9a2d3d98d New frsqrte implementation; verified accurate.
This is similar to the old implementation, but it uses smaller tables, and
handles more edge cases correctly.  (hwtest coming soon.)
2014-05-23 14:59:02 -07:00
magumagu 129e76e60d Interpreter: refactor the rsqrte code, and use it for ps_rsqrte. 2014-05-23 14:59:00 -07:00
magumagu 567724b2f8 Jit: get rid of incorrect implementations of fres and frsqrte.
The existing implementations produce answers which aren't consistent with
the hardware, and games care about correct floating point math.

These can be reimplemented at some point in the future, if someone cares
enough, but the general case is probably too much code to inline.

(I'm leaving the ARM implementations in place by request, even though they
suffer the same issues.)
2014-05-23 14:57:34 -07:00
magumagu 2f8a147eda Interpreter: make fres match hardware.
New table-based implementation written based on actual hardware behavior.
(hwtest coming soon).
2014-05-22 19:48:48 -07:00
magumagu ad4ad7c1ed Use accurate frsqrte in Interpreter.
The implementation of frsqrte exposed by this change isn't completely
correct; that will be fixed in a later commit.
2014-05-22 19:46:27 -07:00
magumagu 5dffa28f0a DVDInterface: make fast disc speed faster.
Fixes workaround for crash in Star Wars Rogue Leader.
2014-05-18 20:03:55 -07:00
magumagu 9b82d72070 Video backends: warn on usage of GL_DRAW_QUADS_2.
It's not normally used, so if it shows up, it could indicate a CPU emulation
bug.
2014-05-17 11:55:32 -07:00
magumagu 6fbf6fad3b VideoCommon: cleanup Renderer::RecordVideoMemory. 2014-05-16 18:58:08 -07:00
magumagu 1357277f40 Video backends: mass-replace "xfregs" with "xfmem". 2014-05-16 18:58:07 -07:00
magumagu 8f5342c442 Video backend: merge global var xfmem into xfregs.
There isn't really any reason to keep them separate.
2014-05-16 18:55:31 -07:00
magumagu 818c89313e Video backends: unify xfregs/xfmem structures.
Removes the duplicate swxfregs global variable/struct from the software
backend in favor of the ones from VideoCommon.
2014-05-16 18:55:30 -07:00
magumagu 8b82cea704 Video backends: fix behavior of "konst" TEV inputs.
Also fixes TEVCOLORARG_HALF.

Values verified to match hardwarere.
2014-05-16 12:19:35 -07:00
magumagu 9e4eeb3b9b Video backends: fix rounding in lighting computation.
For whatever reason, the hardware doesn't do a full divide by 255, but
instead uses an approximation with shifting, similar to the way it is done
in TEV.
2014-05-11 12:53:02 -07:00
magumagu 39d439fc48 Opcode decoding: handle missing opcodes 0x88 etc.
Hardware testing shows that they do the same thing as the 0x80 family of
opcodes: they draw quads.
2014-05-10 20:33:28 -07:00
magumagu 369c0c4ce2 Opcode decoding: 0xC0 isn't a valid command.
Fix our opcode decoders to handle this appropriately.
2014-05-08 15:49:19 -07:00
magumagu 4f5421ffb5 DVDInterface: code cleanup. 2014-05-08 11:47:38 -07:00
magumagu f123e08731 DVDInterface: tweak buffered reads to be a bit faster.
A read finishes when the result is complete in the drive's buffer, not
main memory.
2014-05-05 14:52:15 -07:00
magumagu 8014795d56 DVD emulation: make seek timing more accurate.
Based on real measurements of a Gamecube disk on a Wii.  (If anyone else
is interested in running more tests, I can upload my code; it's a mess at
the moment.)

This isn't a complete model, but it's a step in the right direction:
in Metroid Prime, the loading times are sane, and I think I managed to do it
without breaking anything.
2014-05-05 14:33:00 -07:00
magumagu 727ef4a625 JIT: unify JitAsm for JIT64 and JIT64IL.
Having a bunch of nearly identical code sitting around isn't a good idea,
so fix that. JITIL had a couple of extra entry points into the JIT main
loop, so adjust the code appropriately.

Also fixes Issue 7186.
2014-05-05 11:12:22 -07:00
magumagu c01ac18d4d VideoInterface: clean up naming and bitfields.
Matching the hardware more closely will hopefully make this code easier to
read.
2014-05-05 11:01:15 -07:00
magumagu 716b3fefd4 VideoCommon: recreate XFB texture when the XFB size changes.
We need to do this to correctly deal with games which dynamically change the
XFB width and height.
2014-05-05 11:01:14 -07:00
magumagu 2db2f3dce9 VideoInterface: accurate XFB width and height.
What we call "fbWidth" here is really the stride, but I'll fix that in a
followup.
2014-05-05 11:01:14 -07:00
magumagu bca0b7b543 OpenGL: delete unused function parameter in TextureConverter.
(While I'm here, also mark some functions static.)
2014-05-05 10:56:36 -07:00
magumagu 2e464800bc VideoCommon: correctly compute whether an indirect texture stage is active.
This is consistent with the implementation in PixelShaderGen.
2014-05-04 22:44:10 -07:00
magumagu 52c42a2946 VideoCommon: fix indirect texture coordinate computation in TEV.
Even if an indirect texture stage doesn't actually sample a texture, we
still need to emit the relevant math.

Fixes Issue 7092.
2014-05-04 22:12:57 -07:00
magumagu 78292e5d18 Movie: don't use "hh" scanf modifier.
Attempting to use it with Visual Studio is a good way to corrupt the stack.
2014-04-24 11:05:25 -07:00
magumagu b5f71e901f PatchEngine: Remove no-op function LoadDiscList.
(The function just pushes elements onto an std::vector which is unused
otherwise.)
2014-04-21 21:07:02 -07:00
magumagu 002fb0b563 Interpreter: don't PanicAlert on write to SPR_HID2.
The alert apparently triggers on Midway Arcade Treasures 2; given that the
game otherwise works fine, it's not a high priority to accurately emulate
the bit in question.

Fixes issue 7197.
2014-04-18 20:20:42 -07:00
magumagu 648b9865d8 D3D11 backend: fix rounding in texture encoder.
We need to explicitly round when converting colors from float to uint
because multiplying a normalized float by 255 might not result in a whole
number.  (The exact result here may vary depending on your
drivers/hardware.)

Ideally, we shouldn't be using floating point here, but fixing that is a
much more complicated patch.

Fixes gxtest TEV tests using Intel HD 4000.
2014-04-15 23:36:05 -07:00
magumagu b3a67821e4 VideoCommon: fix rounding in TEV.
The hardware backends pass the TEV tests in gxtest with this change.
2014-04-15 16:47:01 -07:00
magumagu 685d612c8c Software backend: don't skip red component in TEV. 2014-04-15 14:05:12 -07:00
magumagu 5e1c6aba33 Software backend: make TEV rounding match hardware.
Formulas stolen from gxtest.  (Not sure how "==" got turned into "!=", but
I'm pretty confident the patched version is correct.)
2014-04-15 14:04:46 -07:00
magumagu a2150ef1f8 PixelShaderGen: delete extra parenthesis.
Without this patch, we can generate a pixel shader which doesn't compile
in some cases.
2014-04-14 00:41:27 -07:00
magumagu 1a4156a4a0 JitIL: fix carry computation for srawi.
The carry computation needs to be based on the input value, not the output
of the shift.
2014-04-13 20:31:32 -07:00
magumagu 812ff4686b OpenGL backend: remove useless header Globals.h.
The header has no content, so it can can just be deleted.
2014-04-12 19:25:37 -07:00
magumagu f18a3cc650 OpenGL config: clear backend_info.Adapters on init
Fixes a minor UI glitch where if you switch from Direct3D to OpenGL, the
OpenGL config page would appear to have an adapter choice available.
2014-04-12 00:17:36 -07:00
magumagu fd9c1fa746 VideoBackend: remove unused config vars.
No point to keeping around variables which are always "true".
2014-04-11 14:53:12 -07:00
magumagu 76d7c1eb9c D3DBackend: Don't recompute ID3D11Layout.
CreateInputLayout requires a shader as an input, but it only cares about
the signature; we don't need to recompute it for different shaders with
the same inputs.
2014-04-11 13:13:01 -07:00
magumagu 4990b8910b DSound: use DSound notifications to produce sound.
Pretty straightforward; IDirectSoundNotify lets you register for
notifications after a certain amount of sound has played, so use that
instead of depending on Update() notifications from the CPU thread.

Also, while I'm here, reduce the buffer size by a factor of 4; this seems
to reduce the latency, although the difference is sort of subtle.
2014-04-09 13:41:27 -07:00
magumagu d0f89b2b63 SWBackend: Fix code style. 2014-04-05 13:08:00 -07:00
magumagu accd652aa1 Fix trailing whitespace. 2014-04-04 16:25:08 -07:00
magumagu f9d2f7e88c D3D11: Use appropriate shader for PEEK_Z.
Trying to use GetDepthMatrixProgram outside of
TCacheEntry::FromRenderTarget is a bad idea, so don't.  Instead, use a
shader which only copies the input.

Fixes lens flare depth test in Twilight Princess. See
http://code.google.com/p/dolphin-emu/issues/detail?id=5999 .
2014-03-30 19:50:53 -07:00
magumagu bdcd5ba39b SW backend: make shaders work on Intel/Windows.
Apparently the Intel shader compiler doesn't implement "#if" correctly...
so use "#ifdef" instead.
2014-03-29 13:10:43 -07:00
magumagu 0661efea84 Software backend: Delete forked PixelEngine.
Mostly just zapping a bunch of duplicated code; the only interesting thing
going on here is the changes to the performance counter implementation.
2014-03-29 12:07:20 -07:00
magumagu 3afa17f752 Move audio handling out of DSP emulation.
This is good for a couple of reasons: one, it gets rid of duplicated code,
and two, DSP emulation shouldn't need to interact with audio in the first
place.
2014-03-29 11:19:32 -07:00
magumagu 78499e5b7c Delete AudioCommon::UseJIT(). 2014-03-29 11:19:31 -07:00
magumagu 102ea55f20 Move mixer construction to AudioCommon.cpp. 2014-03-29 11:19:30 -07:00
magumagu aac4206664 Move UDSPControl structure into DSP.h . 2014-03-29 11:19:19 -07:00
magumagu 23174d25c6 Minor Ucode cleanup.
Clean out unnecessary references to the audio system from the ucode
implementation.
2014-03-27 14:16:16 -07:00