aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/rasterizer_accelerated.cpp
AgeCommit message (Collapse)Author
2024-01-18SMMU: Initial adaptation to video_core.Fernando Sahmkow
2023-12-17Revert "video_core: use interval map for page count tracking"liamwhite
2023-12-14video_core: lock interval map updateLiam
2023-12-14video_core: use interval map for page count trackingLiam
2023-07-15Fixes and workarounds to make UBSan happier on macOScomex
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.
2022-08-19code: dodge PAGE_SIZE #defineKyle Kienapfel
Some header files, specifically for OSX and Musl libc define PAGE_SIZE to be a number This is great except in yuzu we're using PAGE_SIZE as a variable Specific example `static constexpr u64 PAGE_SIZE = u64(1) << PAGE_BITS;` PAGE_SIZE PAGE_BITS PAGE_MASK are all similar variables. Simply deleted the underscores, and then added YUZU_ prefix Might be worth noting that there are multiple uses in different classes/namespaces This list may not be exhaustive Core::Memory 12 bits (4096) QueryCacheBase 12 bits ShaderCache 14 bits (16384) TextureCache 20 bits (1048576, or 1MB) Fixes #8779
2022-04-23general: Convert source file copyright comments over to SPDXMorph
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.
2021-06-11rasterizer: Update pages in batchesReinUsesLisp
2021-05-27video_core: rasterizer_cache: Use u16 for cached page count.bunnei
- Greatly reduces the risk of overflow, at the cost of doubling the size of this array.
2021-03-12video_core: rasterizer_accelerated: Fix un/signed mismatch.bunnei
2021-03-02video_core: rasterizer_accelerated: Fix delta check ordering.bunnei
2021-03-02video_core: rasterizer_accelerated: Improve error handling & fix implicit ↵bunnei
conversion.
2021-03-02video_core: rasterizer_accelerated: Use a flat array instead of interval_map ↵bunnei
for cached pages. - 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.
2020-04-17core: memory: Move to Core::Memory namespace.bunnei
- helpful to disambiguate Kernel::Memory namespace.
2019-12-11Added missing includeJoel Holdsworth
2019-11-26core/memory: Migrate over RasterizerMarkRegionCached() to the Memory classLioncash
This is only used within the accelerated rasterizer in two places, so this is also a very trivial migration.
2019-11-26core: Prepare various classes for memory read/write migrationLioncash
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.
2019-10-27rasterizer_accelerated: Add intermediary for GPU rasterizersReinUsesLisp
Add an intermediary class that implements common functions across GPU accelerated rasterizers. This avoids code repetition on different backends.