summaryrefslogtreecommitdiffstats
path: root/src/video_core/rasterizer_accelerated.h (follow)
Commit message (Collapse)AuthorAgeFilesLines
* SMMU: Initial adaptation to video_core.Fernando Sahmkow2024-01-191-49/+0
|
* Revert "video_core: use interval map for page count tracking"liamwhite2023-12-181-9/+20
|
* video_core: lock interval map updateLiam2023-12-151-0/+2
|
* video_core: use interval map for page count trackingLiam2023-12-151-20/+7
|
* Fixes and workarounds to make UBSan happier on macOScomex2023-07-151-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There are still some other issues not addressed here, but it's a start. Workarounds for false-positive reports: - `RasterizerAccelerated`: Put a gigantic array behind a `unique_ptr`, because UBSan has a [hardcoded limit](https://stackoverflow.com/questions/64531383/c-runtime-error-using-fsanitize-undefined-object-has-a-possibly-invalid-vp) of how big it thinks objects can be, specifically when dealing with offset-to-top values used with multiple inheritance. Hopefully this doesn't have a performance impact. - `QueryCacheBase::QueryCacheBase`: Avoid an operation that UBSan thinks is UB even though it at least arguably isn't. See the link in the comment for more information. Fixes for correct reports: - `PageTable`, `Memory`: Use `uintptr_t` values instead of pointers to avoid UB from pointer overflow (when pointer arithmetic wraps around the address space). - `KScheduler::Reload`: `thread->GetOwnerProcess()` can be `nullptr`; avoid calling methods on it in this case. (The existing code returns a garbage reference to a field, which is then passed into `LoadWatchpointArray`, and apparently it's never used, so it's harmless in practice but still triggers UBSan.) - `KAutoObject::Close`: This function calls `this->Destroy()`, which overwrites the beginning of the object with junk (specifically a free list pointer). Then it calls `this->UnregisterWithKernel()`. UBSan complains about a type mismatch because the vtable has been overwritten, and I believe this is indeed UB. `UnregisterWithKernel` also loads `m_kernel` from the 'freed' object, which seems to be technically safe (the overwriting doesn't extend as far as that field), but seems dubious. Switch to a `static` method and load `m_kernel` in advance.
* general: Convert source file copyright comments over to SPDXMorph2022-04-231-3/+2
| | | | | This formats all copyright comments according to SPDX formatting guidelines. Additionally, this resolves the remaining GPLv2 only licensed files by relicensing them to GPLv2.0-or-later.
* RasterizerInterface: Correct size of CPU addresses to cache.FernandoS272021-10-041-1/+1
|
* video_core: rasterizer_cache: Use u16 for cached page count.bunnei2021-05-271-6/+6
| | | | - Greatly reduces the risk of overflow, at the cost of doubling the size of this array.
* video_core: rasterizer_accelerated: Use a flat array instead of interval_map for cached pages.bunnei2021-03-031-6/+19
| | | | | | - Uses a fixed 64MB for the cache instead of an ever growing map. - Slightly faster by using atomics instead of a single mutex for access. - Thanks for Rodrigo for the idea.
* core: memory: Move to Core::Memory namespace.bunnei2020-04-171-3/+3
| | | | - helpful to disambiguate Kernel::Memory namespace.
* core: Prepare various classes for memory read/write migrationLioncash2019-11-271-2/+7
| | | | | | | | | | Amends a few interfaces to be able to handle the migration over to the new Memory class by passing the class by reference as a function parameter where necessary. Notably, within the filesystem services, this eliminates two ReadBlock() calls by using the helper functions of HLERequestContext to do that for us.
* rasterizer_accelerated: Add intermediary for GPU rasterizersReinUsesLisp2019-10-271-0/+31
Add an intermediary class that implements common functions across GPU accelerated rasterizers. This avoids code repetition on different backends.