32fc2aae3c
video_core: memory_manager: Updates for Common::PageTable changes.
2020-04-17 00:59:34 -04:00
1c18dc6577
Memory: Correct GCC errors.
2020-04-08 18:09:16 -04:00
e00d992848
GPUMemoryManager: Improve safety of memory reads.
2020-04-08 12:08:06 -04:00
9c0f40a1f5
GPU: Setup Flush/Invalidate to use VAddr instead of CacheAddr
2020-04-06 09:21:46 -04:00
d65fa7d65c
video_core: memory_manager: Flush/invalidate asynchronously on Unmap.
...
- Minor perf improvement.
2020-02-19 20:03:52 -05:00
0f70f68fb3
Revert "video_core: memory_manager: Use GPU interface for cache functions."
2020-02-15 17:47:15 -05:00
7cacb08cdf
video_core: memory_manager: Use GPU interface for cache functions.
2020-02-07 22:59:35 -05:00
3f08e8d8d4
core/memory: Migrate over GetPointer()
...
With all of the interfaces ready for migration, it's trivial to migrate
over GetPointer().
2019-11-26 21:55:38 -05:00
a1845d1dd3
prefer system reference over global accessor
2019-07-09 08:11:35 -07:00
697206092e
Prevent merging of device mapped memory blocks.
...
This sets the DeviceMapped attribute for GPU-mapped memory blocks,
and prevents merging device mapped blocks. This prevents memory
mapped from the gpu from having its backing address changed by
block coalesce.
2019-07-08 22:52:05 -07:00
bdf9faab33
texture_cache: Handle uncontinuous surfaces.
2019-06-20 21:38:33 -03:00
d86f9cd709
Change texture_cache chaching from GPUAddr to CacheAddr
...
This also reverses the changes to make invalidation and flushing through
the GPU address.
2019-06-20 21:36:12 -03:00
6b0695b3cd
Deglobalize Memory Manager on texture cahe and Implement Invalidation and Flushing using GPUVAddr
2019-06-20 21:36:11 -03:00
716fbaef74
video_core/memory_manager: Mark IsBlockContinuous() as a const member function
...
Corrects the typo in its name and marks the function as a const member
function, given it doesn't actually modify memory manager state.
2019-05-09 19:14:36 -04:00
fd12788967
video_core/memory_manager: Default the destructor within the cpp file
...
Makes the class less surprising when it comes to forward declaring the
type, and also prevents inlining the destruction code of the class,
given it contains non-trivial types.
2019-05-09 19:10:13 -04:00
db4b2bc798
make ReadBlockunsafe and WriteBlockunsafe, ignore invalid pages.
2019-04-19 20:35:54 -04:00
d0082de82a
Implement IsBlockContinous
...
This detects when a GPU Memory Block is not continous within host cpu
memory.
2019-04-16 18:49:35 -04:00
06d1c5a991
Document unsafe versions and add BlockCopyUnsafe
2019-04-16 10:11:35 -04:00
ef381e6924
Use ReadBlockUnsafe on TIC and TSC reading
...
Use ReadBlockUnsafe on TIC and TSC reading as memory is never flushed
from host GPU there.
2019-04-15 23:10:24 -04:00
367704aa82
GPU MemoryManager: Implement ReadBlockUnsafe and WriteBlockUnsafe
2019-04-15 23:01:35 -04:00
20be92d5e6
memory_manager: Improved implementation of read/write/copy block.
...
- Fixes graphical issues with Chocobo's Mystery Dungeon EVERY BUDDY!
- Fixes a crash with Mario Tennis Aces
2019-04-05 23:43:34 -04:00
c13fbe6a41
video_core/memory_manager: Make Read() a const qualified member function
...
Given this doesn't actually alter internal state, this can be made a
const member function.
2019-04-05 20:30:48 -04:00
76ef6e5c2b
video_core/memory_manager: Make ReadBlock() a const qualifier member function
...
Now, since we have a const qualified variant of GetPointer(), we can put
it to use in ReadBlock() to retrieve the source pointer that is passed
into memcpy.
Now block reading may be done from a const context.
2019-04-05 20:28:44 -04:00
34510bcda8
video_core/memory_manager: Add a const qualified variant of GetPointer()
...
Allows retrieving read-only pointers from a const context externally.
2019-04-05 20:25:28 -04:00
085b388a7a
video_core/memory_manager: Make FindFreeRegion() a const member function
...
This doesn't modify internal state, so it can be made a const member
function.
2019-04-05 20:22:55 -04:00
9dec087fca
video_core/memory_manager: Make GpuToCpuAddress() a const member function
...
This doesn't modify any internal state, so it can be made a const member
function to allow its use in const contexts.
2019-04-05 20:18:29 -04:00
2117edd0f8
memory_manager: Cleanup FindFreeRegion.
2019-03-20 23:12:28 -04:00
5a5fccaa23
memory_manager: Use Common::AlignUp in public interface as needed.
2019-03-20 22:58:49 -04:00
72837e4b3d
memory_manager: Bug fixes and further cleanup.
2019-03-20 22:36:03 -04:00
197dcf0b5e
memory_manager: Add protections for invalid GPU addresses.
...
- Avoid a crash in Xenoblade Chronicles 2.
2019-03-20 22:36:03 -04:00
22d3dfbcd4
gpu: Rewrite virtual memory manager using PageTable.
2019-03-20 22:36:02 -04:00
574e89d924
video_core: Refactor to use MemoryManager interface for all memory access.
...
# Conflicts:
# src/video_core/engines/kepler_memory.cpp
# src/video_core/engines/maxwell_3d.cpp
# src/video_core/morton.cpp
# src/video_core/morton.h
# src/video_core/renderer_opengl/gl_global_cache.cpp
# src/video_core/renderer_opengl/gl_global_cache.h
# src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
2019-03-16 00:38:48 -04:00
e01a9de35f
memory_manager: Check for reserved page status
2019-02-03 04:58:24 -03:00
0b1842294f
memory_manager: Do not allow 0 to be a valid GPUVAddr.
...
- Fixes a bug with Undertale using 0 for a render target.
2018-11-23 12:58:55 -05:00
4aa9779ae1
memory_manager: Do not MapBufferEx over already in use memory.
...
- This fixes rendering when changing areas in Super Mario Odyssey.
2018-11-01 18:57:59 -04:00
7a5eda5914
global: Use std::optional instead of boost::optional ( #1578 )
...
* get rid of boost::optional
* Remove optional references
* Use std::reference_wrapper for optional references
* Fix clang format
* Fix clang format part 2
* Adressed feedback
* Fix clang format and MacOS build
2018-10-30 00:03:25 -04:00
37575eae65
memory_manager: Add a method for querying the end of a mapped GPU region.
2018-10-16 11:31:00 -04:00
bf608f125e
video_core/memory_manager: Replace a loop with std::array's fill() function in PageSlot()
...
We already have a function that does what this code was doing, so let's
use that instead.
2018-07-24 11:56:30 -04:00
d71e19fd75
video_core/memory_manager: Avoid repeated unnecessary page slot lookups
...
We don't need to keep calling the same function over and over again in a
loop, especially when the behavior is slightly non-trivial. We can just
keep a reference to the looked up location and do all the checking and
assignments based off it instead.
2018-07-24 11:19:54 -04:00
e9d147349b
GPU: Allow GpuToCpuAddress to return boost::none for unmapped addresses.
2018-07-02 09:42:48 -05:00
72b5c448cf
GPU: Implemented nvhost-as-gpu's UnmapBuffer ioctl.
...
It removes a mapping previously created with the MapBufferEx ioctl.
2018-05-20 14:25:56 -05:00
10c6d89119
memory_manager: Add implement CpuToGpuAddress.
2018-04-24 17:49:20 -04:00
239ac8abe2
memory_manager: Make GpuToCpuAddress return an optional.
2018-04-24 17:49:19 -04:00
9e11a76e92
memory_manager: Use GPUVAdddr, not PAddr, for GPU addresses.
2018-04-24 17:40:43 -04:00
f823c1d599
GPU: Make the GPU virtual memory manager use 16 page bits and 10 page table bits.
...
Also removed some dead code and added memory map consistency asserts.
2018-04-23 10:57:12 -05:00
6cddf9d88e
Make a GPU class in VideoCore to contain the GPU state.
...
Also moved the GPU MemoryManager class to video_core since it makes more sense for it to be there.
2018-02-11 23:44:12 -05:00