summaryrefslogtreecommitdiffstats
path: root/src/video_core/rasterizer_accelerated.cpp (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Fixes and workarounds to make UBSan happier on macOScomex2023-07-151-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* code: dodge PAGE_SIZE #defineKyle Kienapfel2022-08-201-8/+9
| | | | | | | | | | | | | | | | | | | | | 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
* 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.
* rasterizer: Update pages in batchesReinUsesLisp2021-06-111-15/+41
|
* video_core: rasterizer_cache: Use u16 for cached page count.bunnei2021-05-271-3/+3
| | | | - Greatly reduces the risk of overflow, at the cost of doubling the size of this array.
* video_core: rasterizer_accelerated: Fix un/signed mismatch.bunnei2021-03-131-1/+2
|
* video_core: rasterizer_accelerated: Fix delta check ordering.bunnei2021-03-031-3/+3
|
* video_core: rasterizer_accelerated: Improve error handling & fix implicit conversion.bunnei2021-03-031-4/+8
|
* video_core: rasterizer_accelerated: Use a flat array instead of interval_map for cached pages.bunnei2021-03-031-38/+13
| | | | | | - 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-5/+5
| | | | - helpful to disambiguate Kernel::Memory namespace.
* Added missing includeJoel Holdsworth2019-12-111-0/+1
|
* core/memory: Migrate over RasterizerMarkRegionCached() to the Memory classLioncash2019-11-271-2/+2
| | | | | This is only used within the accelerated rasterizer in two places, so this is also a very trivial migration.
* core: Prepare various classes for memory read/write migrationLioncash2019-11-271-1/+2
| | | | | | | | | | 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/+63
Add an intermediary class that implements common functions across GPU accelerated rasterizers. This avoids code repetition on different backends.