Commit Graph
100 Commits
Author SHA1 Message Date
Ryan Houdek d354034498 Merge pull request #3443 from sigmabeta/android-overclock-ui
[Android] Add UI support for the so-called "Overclock" feature
2016-01-04 05:21:52 -05:00
Ryan Houdek 465ef93beb Merge pull request #3441 from Sonicadvance1/opensles_audio_delay
[OpenSLES] Fix a delay in audio processing.
2016-01-03 18:34:20 -05:00
Ryan Houdek a898aa1585 Merge pull request #3436 from endrift/fix-libusb
HW: Fix libusb support for older libusb APIs
2016-01-03 12:35:08 -05:00
Ryan Houdek 1db01a8c56 [OpenSLES] Fix a delay in audio processing.
A failure on my part. I was updating the two buffers in the wrong order, so we were always a buffer behind in sending audio out to OpenSLES.
2016-01-03 11:33:38 -06:00
Ryan Houdek 497a93d45f Merge pull request #3425 from Sonicadvance1/Android_add_am_launch
[Android] Add support for launching a game through activity monitor.
2016-01-02 13:24:16 -05:00
Ryan Houdek b4e9bbb551 Merge pull request #3336 from Sonicadvance1/improve_glextensions
[GLExtensions] Improve the extension loader.
2016-01-01 13:01:51 -05:00
Ryan Houdek e77d454b8b [Android] Add support for launching a game through activity monitor.
This also allows setting the user directory.
This is mainly for FifoCI in the future.
2016-01-01 08:57:19 -06:00
Ryan Houdek f836e5937f Merge pull request #3422 from Sonicadvance1/Linux_bba_bridge
Support multiple bridge interfaces in Linux.
2016-01-01 04:23:06 -05:00
Ryan Houdek 75eda242e4 Merge pull request #3423 from Sonicadvance1/better_llvm_check
Improve our LLVM check
2016-01-01 04:22:58 -05:00
Ryan Houdek 454ebb7150 Merge pull request #3417 from aserna3/remove_salt_button
[Netplay] Disabled loading savestates
2016-01-01 04:02:43 -05:00
Ryan Houdek ff907ce0d1 Improve our LLVM check
Adds a link check in to the LLVM find script to make sure it can actually link against the library it finds.
Noticed this issue since I have a non-standard LLVM version built and installed.
2016-01-01 02:52:51 -06:00
Ryan Houdek 4e22bab71d Support multiple bridge interfaces in Linux.
This allows you to run multiple instances of Dolphin that touch the BBA (Up to a 32 interface limit)
2016-01-01 02:51:31 -06:00
Ryan Houdek 721d319c7b Add a comment to DriverDetails about Qualcomm failing our alpha tests. 2015-12-31 10:14:14 -06:00
Ryan Houdek eb2d4935cd Including missing headers required for non-pch builds and other architectures 2015-12-22 18:20:48 -06:00
Ryan Houdek eaf21b3c80 Work around Google's trash NDK 2015-12-22 18:20:17 -06:00
Ryan Houdek c683b54921 Merge pull request #3358 from degasus/test
VideoSW: Clear normal vertex data.
2015-12-19 05:16:16 -05:00
Ryan Houdek d9999bf30c Fix minor memory leak in WGL interface.
Would have a memory leak on game end
2015-12-13 11:42:18 -06:00
Ryan Houdek 78dda1cf79 [OGL] Update extension checks in Render.
This was relying on behaviour that GLExtensions was adding fake extensions to the supported list with ES.
This no longer happens so it needed to be changed.
2015-12-13 11:39:45 -06:00
Ryan Houdek b620b26f8f [GLExtensions] Improve the extension loader.
This removes some nonsense in the extension loader where under an ES context we would still pull all function pointers and just continue onward if we
fail to pull one.
Now function pointers are only pulled if the version of GL or ES actually supports that function.
2015-12-13 11:37:07 -06:00
Ryan Houdek 6d2fd8ae37 [GLExtensions] Support ORing of extensions when checking for support.
Makes my life easier.
2015-12-13 11:35:55 -06:00
Ryan Houdek cb5be45f72 Merge pull request #3200 from degasus/master
Throttler + Mixer: Configureable variance
2015-12-11 07:04:56 -05:00
Ryan Houdek 21b708106c Make sure not to use a GL texture buffer past the max size.
The spec says that vendors can set the max texture size to be 65KB and we want 1MB.
Check the maximum supported and drop to the max if it is less than 1MB
2015-11-30 01:18:03 -06:00
Ryan Houdek d27dcdba48 We shouldn't be trying to enable the SSBO extension in ES. 2015-11-23 14:47:43 -06:00
Ryan Houdek ed5e3c054e Enable Anisotropic filtering in ES.
This adds a check to make sure the vendor supports anisotropic filtering.
Pretty much all vendors support this, even the mobile ones.
2015-11-19 02:00:43 -06:00
Ryan Houdek 1a638175d2 Enable the page fault test on targets that aren't x86_64 2015-11-19 00:51:29 -06:00
Ryan Houdek 5f1fcf4c8d Use __builtin_trap for our crash define instead of int3/exit 2015-11-19 00:49:42 -06:00
Ryan Houdek d3fee2b9bd Merge pull request #3229 from Tilka/broken_info_log
DriverDetails: remove BUG_BROKENINFOLOG leftovers
2015-11-03 12:57:55 -05:00
Ryan Houdek c04358fbe2 Merge pull request #3222 from Tilka/vertexmanagerbase
VideoCommon: rename VertexManager to VertexManagerBase
2015-11-03 08:34:30 -05:00
Ryan Houdek 0764971feb Merge pull request #3109 from OrdinaryMagician/miniupnpc14
Update to support miniupnpc 1.9 API version 14
2015-09-30 11:08:58 -04:00
Ryan Houdek ebf2420c6b Merge pull request #3057 from booto/finicky-vert-beam-position
VI: Fix vert beam position inaccuracy
2015-09-30 08:26:31 -04:00
Ryan Houdek be667e7de8 Merge pull request #3035 from aserna3/SSAAImprovements
Improved OGL and D3D's AA options in UI
2015-09-26 09:27:39 -04:00
Ryan Houdek 6dd212d384 Merge pull request #3044 from degasus/arm
JitArm64: Fix lmw + stmw
2015-09-16 06:26:39 -04:00
Ryan Houdek f121d7a8cd Merge pull request #3026 from lioncash/constexpr
MathUtil: Make Clamp and IsPow2 constexpr functions.
2015-09-12 02:28:38 -04:00
Ryan Houdek 4d5baa4772 Merge pull request #3024 from LAGonauta/x-fi-audio-fix
Added X-Fi check and convert surround FLOAT to SHORT when it is detected
2015-09-12 02:27:16 -04:00
Ryan Houdek 5556781946 Merge pull request #3018 from Armada651/ogl-tab
OGL: Invert Top-and-Bottom mode.
2015-09-12 02:21:19 -04:00
Ryan Houdek 2e6db7dc27 Merge pull request #2991 from lioncash/pcast
EXI_DeviceIPL: Get rid of a pointer cast
2015-09-12 02:15:59 -04:00
Ryan Houdek 17ff069d4a Merge pull request #3002 from degasus/master
OGL: reimplement SSAA based on ARB_gpu_shader5
2015-09-12 02:14:45 -04:00
Ryan Houdek 6d9b4d7d35 Merge pull request #3025 from Tilka/fixfix
VertexLoaderX64: fix 2GB warnings
2015-09-12 01:38:14 -04:00
Ryan Houdek c319fbb98d Merge pull request #3013 from aserna3/Security101
Removed fastmem from Android UI
2015-09-11 09:14:50 -04:00
Ryan Houdek 3014feedc8 Merge pull request #3012 from degasus/destAlpha
VideoCommon: Drop "Disable destAlpha" hack
2015-09-10 13:56:43 -04:00
Ryan Houdek 631fe4ffc2 Merge pull request #2966 from Sonicadvance1/profile_add_runcount
Add run count to the JIT profile information
2015-09-08 11:18:36 -05:00
Ryan Houdek 5d7f834cde Add run count to the JIT profile information 2015-09-08 11:09:52 -05:00
Ryan Houdek 2e02de6587 Merge pull request #2998 from Sonicadvance1/GLES_BBox
[GLES] Enable bounding box support.
2015-09-08 02:38:54 -05:00
Ryan Houdek 5520155e14 Merge pull request #2999 from Sonicadvance1/AArch64_test_fix
[AArch64] Fix Test&Branch to relative location instructions.
2015-09-07 13:47:48 -05:00
Ryan Houdek 2ad26ab3e9 [AArch64] Fix Test&Branch to relative location instructions.
Wasn't masking by the size of the offset encoding so negative values were killing the instruction
Missed commiting this in my integer gatherpipe PR.
Fixes crashing on AArch64.
2015-09-07 13:38:58 -05:00
Ryan Houdek bfb544e1fb [GLES] Enable bounding box support. 2015-09-07 12:07:27 -05:00
Ryan Houdek a9a339a00c Merge pull request #2962 from Sonicadvance1/aarch64_integer_gatherpipe
[AArch64] Implement integer gatherpipe writes.
2015-09-07 06:20:01 -05:00
Ryan Houdek 99a7dfaf5e Merge pull request #2965 from Sonicadvance1/Android_config_changes
[Android] Fix multi-gamecube controller input, config changes
2015-09-06 20:07:32 -05:00
Ryan Houdek d2ac382a14 Merge pull request #2986 from degasus/master
VideoBackends: Reimplement SSAA, now for D3D + OGL
2015-09-06 13:31:49 -05:00
Ryan Houdek de80b9e988 Merge pull request #2971 from degasus/arm
JitArm64: fix smaller issues
2015-09-05 08:43:44 -05:00
Ryan Houdek a47bbee02a Merge pull request #2970 from Tilka/unused
Delete some unused stuff
2015-09-05 06:09:54 -05:00
Ryan Houdek 1773f6a2df Merge pull request #2934 from Sonicadvance1/GLES_proper_SSAA
Properly support MSAA and SSAA as separate features(+GLES)
2015-09-05 05:31:04 -05:00
Ryan Houdek 7650117c26 Properly support MSAA and SSAA as separate features(+GLES)
SSAA relies on MSAA being active to work. We only supports 4x SSAA while in fact you can enable SSAA at any MSAA level.
I even managed to run 64xMSAA + SSAA on my Quadro which made some pretty sleek looking games. They were very cinematic though.

With this, it properly fixes up SSAA and MSAA support in GLES as well. Before they were broken when stereo rendering was enabled.
Now in GLES they can properly support MSAA and also stereo rendering with MSAA enabled(with proper extensions).
2015-09-05 05:23:29 -05:00
Ryan Houdek 9618738278 Remove all of our workarounds for Qualcomm devices we don't support anymore. 2015-09-04 23:45:35 -05:00
Ryan Houdek 5fa4c8d930 Support EXT_blend_func_extended in GLES.
This lets us get dual source blending on GLES targets.
2015-09-04 20:25:59 -05:00
Ryan Houdek 9bb63bf2eb [Android] Fix multi-gamecube controller input, config changes 2015-09-04 20:06:01 -05:00
Ryan Houdek 6cf7048423 Implement ClearCurrent on the EGL GLInterface
This fixes an error on GLInterface shutdown when using EGL.
2015-09-04 19:58:58 -05:00
Ryan Houdek c458c9d049 [AArch64] Minor improves to the vertex loader JIT
Just some minor improvements noticed by dumping the vertex loader blocks.
2015-09-04 19:57:08 -05:00
Ryan Houdek de051dac71 [AArch64] Implement integer gatherpipe writes. 2015-09-04 19:52:25 -05:00
Ryan Houdek 3a04c77180 Merge pull request #2940 from Sonicadvance1/AArch64_paired_loadstore_fun
[AArch64] Implement F iora's preemptive paired loadstore optimization.
2015-09-04 19:49:44 -05:00
Ryan Houdek 791c7d5a84 [AArch64] Clean up bogus vector FCVT{N,L} instruction usage.
Replace the instruction with the scalar variant FCVT instruction.
FCVT{N,L} 8 cycles latency on the Cortex A57
FCVT has five cycle latency and slightly higher throughput

On the A72 all three of these instructions will have three cycle latency,
While FCVT{N,L} will have half the throughput.
2015-09-04 19:41:54 -05:00
Ryan Houdek 2c68f6bfc5 [AArch64] Implement Fiora's preemptive paired loadstore optimization.
This provides a decent speed up in pretty much everything that touches pair loadstores because in most cases they are just regular non-quantizing
float loadstores that happen.
2015-09-04 19:20:33 -05:00
Ryan Houdek 3b65c4070c Merge pull request #2935 from Sonicadvance1/GLES_palette_conversion
[GLES] Support texture_buffer for palette texture conversion.
2015-09-02 10:11:41 -05:00
Ryan Houdek 7a35f9285b [GLES] Support texture_buffer for palette texture conversion.
OpenGL ES 3.2 adds this feature to core
It was available to GLES 3.1 as GL_{EXT, OES}_texture_buffer as well.
For the non-Nvidia vendors that implemented this is:
      - Qualcomm's Adreno 4xx
      - IMGTec's PowerVR Rogue
2015-09-01 05:41:03 -05:00
Ryan Houdek 14589a3eca Merge pull request #2930 from Sonicadvance1/aarch64_dcbz
[AArch64] Implement dcbz instruction
2015-08-31 17:32:27 -05:00
Ryan Houdek ae0a06a018 [AArch64] Implement dcbz instruction 2015-08-31 15:39:47 -05:00
Ryan Houdek d495ad5104 [AArch64] Make TST reg, reg emitter alias 2015-08-31 14:03:32 -05:00
Ryan Houdek 0f54aa48b4 Merge pull request #2928 from Sonicadvance1/aarch64_improved_singles
[AArch64] Improve floating point single instructions.
2015-08-31 12:00:08 -05:00
Ryan Houdek bcde1aa8ff [AArch64] Improve floating point single instructions.
Instead of having an "INS" instruction after every single instruction to duplicate the bottom 64bits in to the top 64bits of the register,
create a new FPR register cache type to track when a register's lower 64bits is supposed to be duplicated in to the high 64bits.
Not necessarily actually having the lower bits duplicated in the host side register. This removes inefficient INS instructions from sequential single
float instructions.
In particular a very heavy single heavy block in Animal Crossing went from 712 instructions down to 520 instructions(~37% less instructions!)
2015-08-31 11:09:17 -05:00
Ryan Houdek d003934b8a Merge pull request #2929 from Sonicadvance1/aarch64_optimize_gpr_flush
Aarch64 optimize gpr flush
2015-08-31 10:55:45 -05:00
Ryan Houdek 8bf332cf08 [AArch64] Optimize GPR cache flushing.
If we are flushing multiple sequential guest GPRs then we can store two in a single STP instruction.
Ikaruga does this quite a bit in their blocks where they do an lmw at the very end and then we have to flush them all.
Typically cuts 16 STR instructions down to 8 STP instructions there.
2015-08-30 23:07:12 -05:00
Ryan Houdek f2c17436ab [AArch64] Fix issue in emitter.
Loadstore pairs support only signed offsets, not unsigned.
2015-08-30 23:05:59 -05:00
Ryan Houdek fe1c6cba36 Merge pull request #2809 from Sonicadvance1/aarch64_cycle_counter_profiling
[AArch64] Support profiling by cycle counters if they are available to EL0
2015-08-30 10:31:34 -05:00
Ryan Houdek b907576510 [AArch64] Support profiling by cycle counters if they are available to EL0 2015-08-30 10:25:16 -05:00
Ryan Houdek 5110574c1f Merge pull request #2921 from Sonicadvance1/aarch64_optimize_lmw
[AArch64] Optimize lmw.
2015-08-30 10:23:57 -05:00
Ryan Houdek 8d61706440 [AArch64] Optimize lmw.
This instruction is fairly heavily used by Ikaruga to load a bunch of registers from the stack.
In particular at the start of the second stage is a block that takes up ~20% CPU time that includes a usage of lmw to load half of the guest
registers.

Basic thing optimized here is changing from a single 32bit LDR to potentially a single 128bit LDR.
a single 32bit LDR is fairly slow, so we can optimize a few ways.
If we have four or more registers to load, do a 64bit LDP in to two host registers, byteswap, and then move the high 32bits of the host registers in
to the correct mapped guest register locations.
If we have two registers to load then do a 32bit LDP which will load two guest registers in a single instruction.
and then if we have only one register left to load, load it as before.

This saves quite a bit of cycles since the Cortex-A57 and A72's LDR instruction takes a few cycles.

Each 32bit LDR takes 4 cycles latency, plus 1 cycle for post-index(which typically happens in parallel.
Both the 32bit and 64bit LDP take the same amount of latency.

So we are improving latencies and reducing code bloat here.
2015-08-28 14:40:30 -05:00
Ryan Houdek 2c3fa8da28 [AArch64] Fix a bug in the register caches.
This is a bug that crops if BindToRegister() is called multiple times in a row without a R() function call between them.
How to reproduce the bug:
1) Have a completely filled cache with no host register remaining
2) Call BindToRegister() with different guest registers
3) Don't call R() between the BindToRegister() calls.

This issue typically wouldn't be seen for a couple of reasons. Typically we have /plenty/ of registers in the cache, and in most cases we only call
BindToRegister() once per instruction. In the off chance that it is called multiple times, it wouldn't update the last used counts and would flush the
same register as the previous call to it.
2015-08-28 14:36:14 -05:00
Ryan Houdek 01db003779 [Android] Workaround Mali driver issue on the Samsung Galaxy S6.
Samsung updated the video drivers on the SGS6 which introduced a bug when disabling vsync.
Both the driver versions are r5p0, but the md5sums of the blob differ.
To work around the issue, make sure to never disable vsync by calling eglSwapInterval.

We can't actually determine the driver version on Android yet.
So until the driver version lands that displays the driver version string in the GL_VERSION string
we will need to keep this workaround enabled at all times, which is a bit annoying.

Current mali drivers return the video driver version in one of the EGL strings you can query.
The issue with that is that Android eats all of those strings, so we can't query it.
2015-08-28 09:02:46 -05:00
Ryan Houdek d9b18862f3 Merge pull request #2908 from Sonicadvance1/gles_3_2
Support OpenGL ES 3.2.
2015-08-26 18:19:17 -05:00
Ryan Houdek 447b1b09e3 Support OpenGL ES 3.2.
OpenGL ES 3.2 adds a few things we care about supporting in core. In particular:
- GL_{ARB,EXT,OES}_draw_elements_base_vertex
- KHR_Debug
- Sample Shading
- GL_{ARB,EXT,OES,NV}_copy_image
- Geometry shaders
- Geometry shader instancing (If they support GL_{EXT,OES}_geometry_point_size)

Nvidia was the first to release an OpenGL ES 3.2 driver which I uesd to test this on.
This also enables GS Instancing on GLES 3.1 hardware if it supports all of the required extensions.
2015-08-26 17:57:51 -05:00
Ryan Houdek 6d25c469cf Merge pull request #2915 from degasus/arm
JitArm64: Implement rlwnmx
2015-08-26 15:52:37 -05:00
Ryan Houdek ca51f1a4f6 [AArch64] Optimize paired registers being used in double operations.
In particular this optimizes the case where a 32bit float is loaded via lfs, and then used in double operations.
This happens very often in Gekko based code because the best way to load a 32bit value as a double is lfs since it automatically turns in to a double value.

There are a few other implications of this in practice as well. Like if both of the paired registers are loaded via psq_l and then used in double
operations it would be improved.
Also if we implement a double register we've got to be careful to make sure we understand if it is in "lower" register or the full 128bit register.
2015-08-26 05:50:04 -05:00
Ryan Houdek 4f5f29a0fb [AArch64] Fix a bug in the register cache.
If the register was only a lower pair and it needed the full register, then we need to load the high 64bits.
Which we weren't doing before.
2015-08-26 01:21:43 -05:00
Ryan Houdek 6729a36d8d [AArch64] Set BindToRegister's to_load correctly for double FP ops. 2015-08-25 21:29:27 -05:00
Ryan Houdek 0666c0750b [AArch64] Implement fdivx/fdivsx/mfcr/mtcrf.
Gets the povray bench to better times than the Wii.
2015-08-24 15:32:19 -05:00
Ryan Houdek d96be9250c Merge pull request #2899 from Sonicadvance1/aarch64_fctiwzx
[AArch64] Implement fctiwzx
2015-08-24 13:22:27 -05:00
Ryan Houdek cd03b8baf6 Merge pull request #2895 from Sonicadvance1/qualcomm_workaround_gles31
Disable OpenGL ES 3.1 on all Qualcomm Adreno devices.
2015-08-24 13:22:12 -05:00
Ryan Houdek d3176fe22a [AArch64] Implement stfiwx
Improves povray performance by ~4%
2015-08-24 01:10:55 -05:00
Ryan Houdek 80fa9af9b1 Merge pull request #2898 from degasus/linking
JitArm64: Faster linking of continuous blocks
2015-08-23 18:09:02 -05:00
Ryan Houdek 561744819e [AArch64] Implement fctiwzx
Improves the povray benchmark time by 5.6%
2015-08-23 15:35:18 -05:00
Ryan Houdek 4fa23abbe1 [AArch64] Implement MOVI and ORR(imm) in the NEON emitter. 2015-08-23 15:34:53 -05:00
Ryan Houdek cc3fb7e7b4 Merge pull request #2883 from degasus/master
Profiler: Sort output by total time
2015-08-22 17:52:54 -05:00
Ryan Houdek b4e4a4cef4 Disable OpenGL ES 3.1 on all Qualcomm Adreno devices.
Their new driver that supports GLES3.1 + AEP has issues with it.
At the very least they don't implement all of the geometry shader features fully which causes shader linker issues when we attempt to use them.
I don't have a device so I can't fully test, so until I do I'm going to blanket disable the whole thing.
2015-08-22 09:12:19 -05:00
Ryan Houdek dba579c52f [AArch64] Use a register as a constant for the memory base.
Removes a /lot/ of redundant movk operations in fastmem loadstores.
Improves performance of the povray bench by ~5%
2015-08-22 08:36:34 -05:00
Ryan Houdek 3242e1a617 Fix the shader overrunning our max shader size.
The Star Wars games really push the hardware to its limits, which can cause the shaders that are produced to be 18kb or more.
Double our maximum shader size to compensate.
Fixes issue #8860
2015-08-22 01:01:03 -05:00
Ryan Houdek ce32b76be3 [AArch64] Implement frspx
Improves performance in povray bench by 2%
2015-08-22 00:35:30 -05:00
Ryan Houdek d74eb0ea58 [AArch64] Fix the bugs in the cr instructions
Makes it a bit more efficient in the process.
2015-08-21 23:24:29 -05:00
Ryan Houdek 5f628749ff Merge pull request #2886 from Sonicadvance1/aarch64_faster_lfd
[AArch64] Optimize lfd instructions if possible.
2015-08-21 05:38:53 -05:00
Ryan Houdek df53b37253 [AArch64] Optimize lfd instructions if possible.
If we are going to be using lfd, then chances are it is going to be used in double heavy areas of code.
If we only need to load the lower register, then we should also not worry about having to insert in to the low 64bits of the guest register.
So add a new flag to the backpatching to handle lfd to directly to the destination register.
This gives ~3% performance improvement to Povray.
2015-08-21 04:31:54 -05:00
Ryan Houdek 7ce4c3138e [AArch64] Optimize cases when an FPR is only used for non-paired ops. 2015-08-20 23:36:29 -05:00