Commit Graph

32931 Commits

Author SHA1 Message Date
JosJuice 8b4f16a310 JitArm64: Avoid double rounding in fctiwzx
FCVT doesn't necessarily round to zero, so the result
might be inaccurate if we use it. To ensure correct
rounding, we use FCVTS from double FPR to 32-bit GPR.
Unfortunately, FCVTS can't do double FPR to single FPR.
2020-08-07 22:44:04 +02:00
Jordan Woyak a77977d0aa
Merge pull request #8999 from AdmiralCurtiss/input-expression-math
Add a few input expression functions (trigonometry, sqrt, pow, min, max, clamp)
2020-08-07 14:40:29 -05:00
LC 5ec65a20d6
Merge pull request #9009 from JosJuice/android-settings-recreation
Android: Fix SettingsActivity lifecycle management
2020-08-06 19:46:16 -04:00
LC d8c0344ee8
Merge pull request #9010 from JosJuice/android-settingsadapter-redundant-static
Android: Remove some static variables from SettingsAdapter
2020-08-06 19:45:54 -04:00
LC 7b3056fee0
Merge pull request #9011 from JosJuice/android-settings-viewmodel
Android: Persist Settings using ViewModel
2020-08-06 19:45:17 -04:00
LC de5d0e54be
Merge pull request #9013 from JosJuice/savescreenshot-wait-for-completion
Remove wait_for_completion parameter from Renderer::SaveScreenshot
2020-08-06 19:44:43 -04:00
JosJuice 7385e9129c Remove wait_for_completion parameter from Renderer::SaveScreenshot
This is now unused. Seems like it was an improper fix
(there would be a race if saving the screenshot took longer
than 2 seconds) back when it was used too.
2020-08-06 21:57:12 +02:00
JosJuice 05e49b13ef Android: Fix SettingsActivity back stack behavior after stop+start
Fixes the behavior where the settings activity would go back to
the top-level menu after switching to a different app and back.
2020-08-05 21:21:45 +02:00
JosJuice a427eafa7b Android: Persist Settings using ViewModel
Just for maintainability. This is a shorter and more standard
solution compared to our current one where the Fragment
persists the Settings and passes it to the Activity.
2020-08-05 19:50:11 +02:00
JosJuice e3911736c2 Android: Remove some static variables from SettingsAdapter
All of these have non-static equivalents (mView and mClickedItem).
2020-08-05 18:47:17 +02:00
JosJuice c727f03590 Android: Properly restore state of SettingsActivityPresenter
Fixes https://bugs.dolphin-emu.org/issues/10815
2020-08-05 13:21:07 +02:00
Sintendo 363f3f82bb DSPJitRegCache: Simplify WriteReg
The intent here is to generate a more compact instruction if a 32-bit
immediate can be zero-extended to the desired 64-bit immediate.

Nowadays the emitter is smart enough to do this for us, so this logic is
redundant.
2020-08-05 10:23:28 +02:00
Sintendo 618d261b91 DSPJitMultiplier: addpaxz - AND constant directly
There's no need to load the 64-bit immediate into a temporary register.
x64 will sign-extend 32-bit immediates to 64 bits, giving us the exact
value we need in this case.

48 C7 C0 00 00 FF FF    mov         rax,0FFFFFFFFFFFF0000h
48 21 C2                and         rdx,rax

48 81 E2 00 00 FF FF    and         rdx,0FFFFFFFFFFFF0000h
2020-08-05 10:22:51 +02:00
Sintendo 49a4e09719 DSPJit: Replace/optimize LEAs
- LEA is a bit silly when the source and the destination are the same. A
simple ADD or SHL will do in those cases.

66 8D 04 45 00 00 00 00 lea         ax,[rax*2]
66 03 C0                add         ax,ax

48 8D 04 00             lea         rax,[rax+rax]
48 03 C0                add         rax,rax

66 8D 14 D5 00 00 00 00 lea         dx,[rdx*8]
66 C1 E2 03             shl         dx,3

- When scaling by 2, consider summing the register with itself instead.
The former always needs a 32-bit displacement, so the sum is more
compact.

66 8D 14 45 00 00 00 00 lea dx,[rax*2]
66 8D 14 00             lea dx,[rax+rax]
2020-08-05 10:22:50 +02:00
OatmealDome 5c1693587f DolphinQt: Ignore "-psn" command line option on macOS 2020-08-04 15:55:51 -04:00
OatmealDome fae8f8d68b MainWindow: Attach quit emulation sheet to RenderWidget on macOS 2020-08-03 05:48:57 -04:00
Tilka afd25de85e
Merge pull request #9000 from Ebola16/S
LogManager: Add missing include
2020-08-03 01:18:17 +01:00
Ryan Meredith 6020133f5b LogManager: Add missing include 2020-08-02 19:52:10 -04:00
JosJuice 25ebc3c07c Translation resources sync with Transifex 2020-08-02 22:45:44 +02:00
Admiral H. Curtiss cdf2a29b5e Qt/IOWindow: Add a handful of math functions to the function dropdown. 2020-08-02 22:09:09 +02:00
Admiral H. Curtiss 2281cde28b InputCommon: Add a handful of math functions to the expression parser. 2020-08-02 22:09:09 +02:00
JosJuice 7414020563
Merge pull request #8966 from Ebola16/WP
Android: Clear game profiles and GameSettings
2020-08-02 22:06:16 +02:00
JosJuice e33876fbe2
Merge pull request #8978 from Ebola16/RS
Android: Settings and Emulation activities skip (Tv)MainActivity library rescan
2020-08-02 22:05:38 +02:00
JosJuice 234eaa0ff9
Merge pull request #7252 from Ebola16/Log
Android: Add Log Configuration to UI
2020-08-02 22:00:48 +02:00
JosJuice bf3d1fa2d8
Merge pull request #8858 from Ebola16/PUP
Android: Add Pause / Unpause Emulation Toggle
2020-08-02 21:56:25 +02:00
Sintendo 08bdeefe05 Jit64AsmCommon: Use AVX in ConvertDoubleToSingle
Using AVX we can eliminate another MOVAPS instruction here.

Before:
0F 28 C8                movaps      xmm1,xmm0
66 0F DB 0D CF 2C 00 00 pand        xmm1,xmmword ptr [1F8D283B220h]

After:
C5 F9 DB 0D D2 2C 00 00 vpand       xmm1,xmm0,xmmword ptr [271835FB220h]
2020-08-02 18:07:47 +02:00
LC dc8dd5a0ef
Merge pull request #8997 from Felk/osd_rgba_to_argb
OnScreenDisplay: fix names rgba -> argb
2020-08-01 21:28:50 -04:00
Felk f775e9b99d OnScreenDisplay: fix names rgba -> argb 2020-08-02 01:37:20 +02:00
Tilka dbacffd75d
Merge pull request #8731 from Pokechu22/dsp-lle-cpu-int-crash
Fix crash when using DSP LLE with CPU interpreter (or fastmem off)
2020-08-01 15:26:27 +01:00
Pierre Bourdon 37827ef134
Merge pull request #8994 from JosJuice/nkit-pointer-reference
DolphinQt: Don't capture local pointer by reference
2020-07-31 16:45:40 +02:00
JosJuice 13f20ecd34 DolphinQt: Don't capture local pointer by reference
This may be the cause of a crash that has been reported on the
forums, but I'm not sure since I can't reproduce it myself.
2020-07-31 11:33:48 +02:00
LC 0f4cf4a84d
Merge pull request #8991 from JosJuice/android-rumble-without-touchscreen
Android: Remove touchscreen check for rumble
2020-07-30 21:45:56 -04:00
LC 0aaddf8b19
Merge pull request #8990 from JosJuice/wia-conversion-warning
DiscIO: Fix conversion warning
2020-07-30 21:45:24 -04:00
LC e6450de88f
Merge pull request #8993 from JosJuice/silence-cxx17-codecvt
CMake: Add -D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING
2020-07-30 21:44:25 -04:00
JosJuice 9be5fe5996 CMake: Add -D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING
The CMake Windows build was broken because of me adding a usage
of std::codecvt_utf8_utf16 to StringUtil.cpp. Kinda silly to have
a warning for an API with no standard replacement available...
2020-07-30 20:22:57 +02:00
Markus Wick 9d44df0f0b
Merge pull request #8875 from JosJuice/nkit-warning
DolphinQt: Show a warning when launching an NKit disc image
2020-07-30 12:19:41 +02:00
Pokechu22 9183c0c482 Bump state version 2020-07-29 16:57:37 -07:00
Pokechu22 e5e23c6b27 Mark several DVDInterface functions as static 2020-07-29 16:57:36 -07:00
Pokechu22 4415df463f Remove DVDInterface::Reset
It only resets the registers, which isn't something that needs to be done except for in DVDInterface::Init
2020-07-29 16:57:36 -07:00
Pokechu22 0fa96df818 Remove DriveState::DiscChangeDetected hack
Since both GameCube and Wii resets now work correctly, this hack is not needed anymore.
2020-07-29 16:57:36 -07:00
Pokechu22 a73eaf5712 Fix DVDLowReset spinup flag being read incorrectly 2020-07-29 16:57:35 -07:00
Pokechu22 9a8d426645 Implement PI_RESET_CODE resetting DI 2020-07-29 16:57:35 -07:00
Pokechu22 b8715b42d2 Only reset drive chip state (not DI registers) when changing discs
Resetting the DI registers disables interrupts, which means any errors reported (for instance) are just not sent though.
2020-07-29 16:57:35 -07:00
Pokechu22 537e40afb5 Only update DIMAR and DILENGTH if transfer completed without error
Turns out, Gamecube games actually do check DILENGTH, and if DILENGTH is at 0, they'll think the transfer completed successfully even if DEINT is used, since after all, surely that means everything was sent.  That caused all sorts of issues, from audio looping when a disc is removed since it's re-using the same buffer to just flat-out crashing instead of showing the disc removed screen.
2020-07-29 16:57:35 -07:00
Pokechu22 fba51b2956 Split drive state and drive error into 2 fields, and fix some inaccuracies
In particular:
- Trying to play audio in a non-ready state returns the state-specific error, not an audio buf error
- Audio status cannot be requested in non-ready states
- The audio buffer cannot be configured in states other than ReadyNoReadsMade
- Using the stop motor command while the motor is already stopped doesn't change states

Additionally, the internal state IDs are used (which distinguish ReadyNoReadsMade and Ready), instead of the state IDs exposed in request error.  This makes some of the weird behavior a bit more obvious.

State and error behavior of the seek command was not implemented in this commit.
2020-07-29 16:57:34 -07:00
JosJuice 2e8c5b4521 DolphinQt: Show a warning when launching an NKit disc image
It is my opinion that nobody should use NKit disc images without
being aware of the drawbacks of them. Since it seems like almost
nobody who is using NKit disc images knows what NKit is (hmm, now
how could that have happened...?), I am adding a warning to Dolphin
so that you can't run NKit disc images without finding out about the
drawbacks. In case someone really does want to use NKit disc images,
the warning has a "Don't show this again" option. Unfortunately, I
can't retroactively add the warning where it's most needed:
in Dolphin 5.0, which does not support Wii NKit disc images.
2020-07-29 21:05:57 +02:00
Ryan Meredith 12d277b4a0 Android: Add Pause / Unpause Emulation Toggle 2020-07-29 13:03:52 -04:00
JosJuice 709031bb1d Android: Remove touchscreen check for rumble
That a device doesn't have a touchscreen doesn't necessarily mean
that it doesn't support rumble (though it is usually the case).
setPhoneVibrator already contains a check for whether the device
supports rumble, so we can simply remove the touchscreen check.
2020-07-29 17:48:56 +02:00
Sintendo 31755bc13a Jit64: fselx - Optimize SSE4.1 packed
Pretty much the same optimization we did for AVX, although slightly more
constrained because we're stuck with the two-operand instruction where
destination and source have to match.

We could also specialize the case where registers b, c, and d are all
distinct, but I decided against it since I couldn't find any game that
does this.

Before:
66 0F 57 C0          xorpd       xmm0,xmm0
66 41 0F C2 C1 06    cmpnlepd    xmm0,xmm9
41 0F 28 CE          movaps      xmm1,xmm14
66 41 0F 38 15 CC    blendvpd    xmm1,xmm12,xmm0
44 0F 28 F1          movaps      xmm14,xmm1

After:
66 0F 57 C0          xorpd       xmm0,xmm0
66 41 0F C2 C1 06    cmpnlepd    xmm0,xmm9
66 45 0F 38 15 F4    blendvpd    xmm14,xmm12,xmm0
2020-07-29 17:28:48 +02:00
Sintendo afb86a12ab Jit64: fselx - Optimize AVX packed
For the packed variant, we can skip the final MOVAPS and write the
result directly into the destination register.

Before:
66 0F 57 C0          xorpd       xmm0,xmm0
66 41 0F C2 C1 06    cmpnlepd    xmm0,xmm9
C4 C3 09 4B CC 00    vblendvpd   xmm1,xmm14,xmm12,xmm0
44 0F 28 F1          movaps      xmm14,xmm1

After:
66 0F 57 C0          xorpd       xmm0,xmm0
66 41 0F C2 C1 06    cmpnlepd    xmm0,xmm9
C4 43 09 4B F4 00    vblendvpd   xmm14,xmm14,xmm12,xmm0
2020-07-29 17:06:52 +02:00