Commit Graph

104 Commits

Author SHA1 Message Date
ba82bb359b Garbage Collection: enable as default, eliminate option. 2021-08-28 17:55:37 +02:00
d540d284b5 VideoCore: Rework Garbage Collection. 2021-08-28 17:54:12 +02:00
ec56a17acd buffer_cache: Remove unused small_vector in CommitAsyncFlushesHigh()
Given this is non-trivial, the constructor is required to execute, so
this removes a bit of redundant codegen.
2021-07-27 06:24:44 -04:00
98b26b6e12 Merge pull request #6585 from ameerj/hades
Shader Decompiler Rewrite
2021-07-25 11:39:04 -07:00
df9b7e18f5 buffer_cache: Fix debugging leftover 2021-07-22 21:51:38 -04:00
838d7e4ca5 buffer_cache: Fix size reductions not having in mind bind sizes
A buffer binding can change between shaders without changing the
shaders. This lead to outdated bindings on OpenGL.
2021-07-22 21:51:38 -04:00
94e751f415 buffer_cache: Invalidate fast buffers on compute 2021-07-22 21:51:35 -04:00
60a96c49e5 buffer_cache: Fix copy based uniform bindings tracking 2021-07-22 21:51:35 -04:00
4a2361a1e2 buffer_cache: Reduce uniform buffer size from shader usage
Increases performance significantly on certain titles.
2021-07-22 21:51:34 -04:00
a7e9756671 buffer_cache: Mark uniform buffers as dirty if any enable bit changes 2021-07-22 21:51:34 -04:00
d621e96d0d shader: Initial OpenGL implementation 2021-07-22 21:51:30 -04:00
416e1b7441 spirv: Implement image buffers 2021-07-22 21:51:27 -04:00
e9a91bc5cc shader: Interact texture buffers with buffer cache 2021-07-22 21:51:26 -04:00
6e2ca7fbee buffer_cache: Simplify clear logic
Use existing helper functions and avoid looping when
only one buffer has to be active.
2021-07-20 18:50:51 -03:00
1ae4b684ff Buffer cache: Fixes, Clang and Feedback. 2021-07-15 02:02:08 +02:00
a0eb3f8a3e Buffer Cache: Fixes to DMA Copy. 2021-07-14 18:25:33 +02:00
8039be8b19 BufferCache: fix clearing on forced download. 2021-07-14 16:44:15 +02:00
b780d5b5c5 DMAEngine: Accelerate BufferClear 2021-07-13 03:49:47 +02:00
bc19d28963 accelerateDMA: Fixes and feedback. 2021-07-12 10:33:35 +02:00
be1a3f7a0f accelerateDMA: Accelerate Buffer Copies. 2021-07-11 01:33:17 +02:00
977904dd84 Buffer Cache: Address Feedback. 2021-07-10 21:34:55 +02:00
5e78ad4378 Buffer Cache: Fix GCC copmpile error 2021-07-09 22:20:36 +02:00
2c8f4ed27f BufferCache: Additional download fixes. 2021-07-09 22:20:36 +02:00
f75544a943 Buffer Cache: Revert unnecessary range reduction. 2021-07-09 22:20:36 +02:00
cf38faee9b Fence Manager: Force ordering on WFI. 2021-07-09 22:20:36 +02:00
73638ca593 Buffer Cache: Eliminate the AC Hack as the base game is fixed in Hades. 2021-07-09 22:20:36 +02:00
63915bf2de Fence Manager: Add fences on Reference Count. 2021-07-09 22:20:36 +02:00
35327dbde3 Videocore: Address Feedback & CLANG Format. 2021-07-09 22:20:36 +02:00
0e4d4b4beb Buffer Cache: Fix High Downloads and don't predownload on Extreme. 2021-07-09 22:20:36 +02:00
9476309d53 buffer_cache: Only flush downloaded size
Fixes a regression unintentionally introduced by the garbage collector.
This makes regular memory downloads only flush the requested sizes.

This negatively affected Koei Tecmo games.
2021-06-26 03:29:34 -03:00
b4894faeae buffer_cache/texture_cache: Make GC functions private 2021-06-26 02:17:36 -03:00
e79d02bf38 buffer_cache: Silence implicit cast warning 2021-06-26 02:17:36 -03:00
4569f39c7c common: Replace common_sizes into user-literals
Removes common_sizes.h in favor of having `_KiB`, `_MiB`, `_GiB`, etc
user-literals within literals.h.

To keep the global namespace clean, users will have to use:

```
using namespace Common::Literals;
```

to access these literals.
2021-06-24 09:27:40 -07:00
ca6f47c686 Reaper: Change memory restrictions on TC depending on host memory on VK. 2021-06-17 00:29:48 +02:00
0dd98842bf Reaper: Address Feedback. 2021-06-16 21:35:03 +02:00
954ad2a61e Reaper: Setup settings and final tuning. 2021-06-16 21:35:03 +02:00
d8ad6aa187 Reaper: Tune it up to be an smart GC. 2021-06-16 21:35:02 +02:00
a11bc4a382 Initial Reaper Setup
WIP
2021-06-16 21:35:02 +02:00
6755025310 Fix GCC undefined behavior sanitizer.
* Wrong alignment in u64 LOG_DEBUG -> memcpy.
* Huge shift exponent in stride calculation for linear buffer, unused result -> skipped.
* Large shift in buffer cache if word = 0, skip checking for set bits.

Non of those were critical, so this should not change any behavior.
At least with the assumption, that the last one used masking behavior, which always yield continuous_bits = 0.
2021-06-10 21:07:27 +02:00
859ba21f6d buffer_cache: Simplify uniform disabling logic 2021-06-01 13:26:58 -04:00
5a8cd1b118 Fix two GCC 11 warnings: Unneeded copies.
std::move created an unneeded copy.
iterating without reference also created copies.
2021-05-29 08:57:44 +02:00
acf22336ec buffer_cache: Ensure null buffers cannot take the fast uniform bind path
Fixes a crash in New Pokemon Snap
2021-05-16 07:43:40 -04:00
a4c6712a4b common: Move settings to common from core.
- Removes a dependency on core and input_common from common.
2021-04-14 16:24:03 -07:00
5ad62e7bfc buffer_cache: Heuristically decide to skip cache on uniform buffers
Some games benefit from skipping caches (Pokémon Sword), and others
don't (Animal Crossing: New Horizons). Add an heuristic to decide this
at runtime.

The cache hit ratio has to be ~98% or better to not skip the cache.
There are 16 frames of buffer.
2021-03-02 02:44:19 -03:00
0b8b961442 buffer_cache: Add extra bytes to guest SSBOs
Bind extra bytes beyond the guest API's bound range.
This is due to some games like Astral Chain operating out of bounds.
Binding the whole map range would be technically correct, but games
have large maps that make this approach unaffordable for now.
2021-02-13 02:18:38 -03:00
3da87d3f12 gl_buffer_cache: Drop interop based parameter buffer workarounds
Sacrify runtime performance to avoid generating kernel exceptions on
Windows due to our abusive aliasing of interop buffer objects.
2021-02-13 02:17:24 -03:00
2b95c137ff buffer_cache: Heuristically detect stream buffers
Detect when a memory region has been joined several times and increase
the size of the created buffer on those instances. The buffer is assumed
to be a "stream buffer", increasing its size should stop us from
constantly recreating it and fragmenting memory.
2021-02-13 02:17:24 -03:00
ec9354d6d9 buffer_cache: Split CreateBuffer in separate functions
Allow adding functionality to each function without making CreateBuffer
more complex.
2021-02-13 02:17:24 -03:00
a02b4e1df6 buffer_cache: Skip cache on small uploads on Vulkan
Ports from OpenGL the optimization to skip small 3D uniform buffer
uploads. This will take advantage of the previously introduced stream
buffer.

Fixes instances where the staging buffer offset was being ignored.
2021-02-13 02:17:24 -03:00
35df1d1864 vk_staging_buffer_pool: Add stream buffer for small uploads
This uses a ring buffer similar to OpenGL's stream buffer for small
uploads. This stops us from allocating several small buffers, reducing
memory fragmentation and cache locality.

It uses dedicated allocations when possible.
2021-02-13 02:17:24 -03:00