memory_manager: Do not allow 0 to be a valid GPUVAddr.

- Fixes a bug with Undertale using 0 for a render target.
This commit is contained in:
bunnei
2018-11-23 12:58:55 -05:00
parent c267aea29b
commit 0b1842294f
2 changed files with 9 additions and 1 deletions

View File

@ -9,6 +9,13 @@
namespace Tegra {
MemoryManager::MemoryManager() {
// Mark the first page as reserved, so that 0 is not a valid GPUVAddr. Otherwise, games might
// try to use 0 as a valid address, which is also used to mean nullptr. This fixes a bug with
// Undertale using 0 for a render target.
PageSlot(0) = static_cast<u64>(PageStatus::Reserved);
}
GPUVAddr MemoryManager::AllocateSpace(u64 size, u64 align) {
const std::optional<GPUVAddr> gpu_addr{FindFreeBlock(0, size, align, PageStatus::Unmapped)};