use_fast_gpu_time{linkage,
- true,
+ false,
"use_fast_gpu_time",
Category::RendererAdvanced,
Specialization::Paired,
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h
index 0ce2abc627..97b6ba9e36 100644
--- a/src/video_core/buffer_cache/buffer_cache.h
+++ b/src/video_core/buffer_cache/buffer_cache.h
@@ -27,6 +27,10 @@ BufferCache::BufferCache(Tegra::MaxwellDeviceMemoryManager& device_memory_, R
gpu_modified_ranges.Clear();
inline_buffer_id = NULL_BUFFER_ID;
+#ifdef ANDROID
+ immediately_free = (Settings::values.vram_usage_mode.GetValue() == Settings::VramUsageMode::Aggressive);
+#endif
+
if (!runtime.CanReportMemoryUsage()) {
minimum_memory = DEFAULT_EXPECTED_MEMORY;
critical_memory = DEFAULT_CRITICAL_MEMORY;
@@ -1383,6 +1387,9 @@ void BufferCache
::JoinOverlap(BufferId new_buffer_id, BufferId overlap_id,
});
new_buffer.MarkUsage(copies[0].dst_offset, copies[0].size);
runtime.CopyBuffer(new_buffer, overlap, copies, true);
+ if (immediately_free) {
+ runtime.Finish();
+ }
DeleteBuffer(overlap_id, true);
}
diff --git a/src/video_core/buffer_cache/buffer_cache_base.h b/src/video_core/buffer_cache/buffer_cache_base.h
index d45f595ea8..8c94c0cf72 100644
--- a/src/video_core/buffer_cache/buffer_cache_base.h
+++ b/src/video_core/buffer_cache/buffer_cache_base.h
@@ -483,6 +483,7 @@ private:
u64 minimum_memory = 0;
u64 critical_memory = 0;
BufferId inline_buffer_id;
+ bool immediately_free = false;
std::array> CACHING_PAGEBITS)> page_table;
Common::ScratchBuffer tmp_buffer;
diff --git a/src/video_core/vulkan_common/vulkan_memory_allocator.cpp b/src/video_core/vulkan_common/vulkan_memory_allocator.cpp
index e80808621b..3ab09b57c8 100644
--- a/src/video_core/vulkan_common/vulkan_memory_allocator.cpp
+++ b/src/video_core/vulkan_common/vulkan_memory_allocator.cpp
@@ -271,7 +271,11 @@ vk::Buffer MemoryAllocator::CreateBuffer(const VkBufferCreateInfo& ci, MemoryUsa
VmaAllocation allocation{};
VkMemoryPropertyFlags property_flags{};
- vk::Check(vmaCreateBuffer(allocator, &ci, &alloc_ci, &handle, &allocation, &alloc_info));
+ VkResult result = vmaCreateBuffer(allocator, &ci, &alloc_ci, &handle, &allocation, &alloc_info);
+ if (result == VK_ERROR_OUT_OF_DEVICE_MEMORY) {
+ LOG_ERROR(Render_Vulkan, "Out of memory creating buffer (size: {})", ci.size);
+ }
+
vmaGetAllocationMemoryProperties(allocator, allocation, &property_flags);
u8* data = reinterpret_cast(alloc_info.pMappedData);