diff --git a/src/common/host_memory.cpp b/src/common/host_memory.cpp index 5c8da107c7..01446d3fac 100644 --- a/src/common/host_memory.cpp +++ b/src/common/host_memory.cpp @@ -668,11 +668,8 @@ public: size_t ComputeAhbBudget(size_t window_size) const { const u64 total_physical = Common::GetMemInfo().TotalPhysicalMemory; - if (total_physical == 0) { - return 0; - } - constexpr u64 MinimumTotalPhysical = 7ULL << 30; - if (total_physical < MinimumTotalPhysical) { + constexpr u64 BaselineFootprint = 6ULL << 30; + if (total_physical <= BaselineFootprint) { return 0; } const u64 max_map_count = Common::GetMaxMapCount(); @@ -680,12 +677,13 @@ public: if (max_map_count == 0 || max_map_count <= ReservedMaps) { return 0; } - u64 budget = total_physical / 6; - budget = (std::min)(budget, (max_map_count - ReservedMaps) * PageAlignment); + u64 budget = (total_physical - BaselineFootprint) / 2; + constexpr u64 MapSlotsPerWindow = 4096; + const u64 affordable_windows = (max_map_count - ReservedMaps) / MapSlotsPerWindow; + budget = (std::min)(budget, affordable_windows * window_size); const u64 available = Common::GetAvailablePhysicalMemory(); if (available != 0) { - constexpr u64 Headroom = 2ULL << 30; - budget = (std::min)(budget, available > Headroom ? available - Headroom : 0); + budget = (std::min)(budget, available / 2); } budget = (std::min)(budget, static_cast(backing_size)); budget = Common::AlignDown(budget, window_size); @@ -706,14 +704,14 @@ public: return false; } constexpr size_t window_size = 256ULL << 20; - const AHardwareBuffer_Desc window_desc = MakeBlobDesc(window_size); - if (AHardwareBuffer_isSupported(&window_desc) == 0) { - return false; - } const size_t budget = ComputeAhbBudget(window_size); if (budget == 0) { return false; } + const AHardwareBuffer_Desc window_desc = MakeBlobDesc(window_size); + if (AHardwareBuffer_isSupported(&window_desc) == 0) { + return false; + } if (!ProbeAhbBacking(get_native_handle)) { return false; } diff --git a/src/common/memory_detect.cpp b/src/common/memory_detect.cpp index d0f9518bf5..457168a6ca 100644 --- a/src/common/memory_detect.cpp +++ b/src/common/memory_detect.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later diff --git a/src/common/memory_detect.h b/src/common/memory_detect.h index 3bf013b79a..ce5d03788f 100644 --- a/src/common/memory_detect.h +++ b/src/common/memory_detect.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later diff --git a/src/core/device_memory.cpp b/src/core/device_memory.cpp index e36ed42e31..afb590c9a6 100644 --- a/src/core/device_memory.cpp +++ b/src/core/device_memory.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later diff --git a/src/video_core/vulkan_common/vulkan_memory_allocator.h b/src/video_core/vulkan_common/vulkan_memory_allocator.h index 9ece2bbfe4..13d11e6d0d 100644 --- a/src/video_core/vulkan_common/vulkan_memory_allocator.h +++ b/src/video_core/vulkan_common/vulkan_memory_allocator.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project