diff options
| author | 2022-03-24 20:16:11 -0700 | |
|---|---|---|
| committer | 2022-03-24 20:16:11 -0700 | |
| commit | ab6a5784fa991016b5d8c097471fbda88853ba5d (patch) | |
| tree | 407ed36099630b4e52bcd727e799d8f22bb43c24 /src/video_core/renderer_vulkan | |
| parent | Merge pull request #8050 from bunnei/nvflinger-rewrite (diff) | |
| parent | GC: Address Feedback. (diff) | |
| download | yuzu-ab6a5784fa991016b5d8c097471fbda88853ba5d.tar.gz yuzu-ab6a5784fa991016b5d8c097471fbda88853ba5d.tar.xz yuzu-ab6a5784fa991016b5d8c097471fbda88853ba5d.zip | |
Merge pull request #7720 from FernandoS27/yfc-gc
First Nugget: Reworked Garbage Collection to be smarter [originally from Project YFC]
Diffstat (limited to 'src/video_core/renderer_vulkan')
5 files changed, 32 insertions, 1 deletions
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp index 5ffd93499..def838c34 100644 --- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp | |||
| @@ -141,6 +141,18 @@ StagingBufferRef BufferCacheRuntime::DownloadStagingBuffer(size_t size) { | |||
| 141 | return staging_pool.Request(size, MemoryUsage::Download); | 141 | return staging_pool.Request(size, MemoryUsage::Download); |
| 142 | } | 142 | } |
| 143 | 143 | ||
| 144 | u64 BufferCacheRuntime::GetDeviceLocalMemory() const { | ||
| 145 | return device.GetDeviceLocalMemory(); | ||
| 146 | } | ||
| 147 | |||
| 148 | u64 BufferCacheRuntime::GetDeviceMemoryUsage() const { | ||
| 149 | return device.GetDeviceMemoryUsage(); | ||
| 150 | } | ||
| 151 | |||
| 152 | bool BufferCacheRuntime::CanReportMemoryUsage() const { | ||
| 153 | return device.CanReportMemoryUsage(); | ||
| 154 | } | ||
| 155 | |||
| 144 | void BufferCacheRuntime::Finish() { | 156 | void BufferCacheRuntime::Finish() { |
| 145 | scheduler.Finish(); | 157 | scheduler.Finish(); |
| 146 | } | 158 | } |
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.h b/src/video_core/renderer_vulkan/vk_buffer_cache.h index 1ee0d8420..d7fdd18ff 100644 --- a/src/video_core/renderer_vulkan/vk_buffer_cache.h +++ b/src/video_core/renderer_vulkan/vk_buffer_cache.h | |||
| @@ -65,6 +65,12 @@ public: | |||
| 65 | 65 | ||
| 66 | void Finish(); | 66 | void Finish(); |
| 67 | 67 | ||
| 68 | u64 GetDeviceLocalMemory() const; | ||
| 69 | |||
| 70 | u64 GetDeviceMemoryUsage() const; | ||
| 71 | |||
| 72 | bool CanReportMemoryUsage() const; | ||
| 73 | |||
| 68 | [[nodiscard]] StagingBufferRef UploadStagingBuffer(size_t size); | 74 | [[nodiscard]] StagingBufferRef UploadStagingBuffer(size_t size); |
| 69 | 75 | ||
| 70 | [[nodiscard]] StagingBufferRef DownloadStagingBuffer(size_t size); | 76 | [[nodiscard]] StagingBufferRef DownloadStagingBuffer(size_t size); |
diff --git a/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp b/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp index 5d5329abf..64a58304b 100644 --- a/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp +++ b/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp | |||
| @@ -118,7 +118,7 @@ StagingBufferPool::StagingBufferPool(const Device& device_, MemoryAllocator& mem | |||
| 118 | .image = nullptr, | 118 | .image = nullptr, |
| 119 | .buffer = *stream_buffer, | 119 | .buffer = *stream_buffer, |
| 120 | }; | 120 | }; |
| 121 | const auto memory_properties = device.GetPhysical().GetMemoryProperties(); | 121 | const auto memory_properties = device.GetPhysical().GetMemoryProperties().memoryProperties; |
| 122 | VkMemoryAllocateInfo stream_memory_info{ | 122 | VkMemoryAllocateInfo stream_memory_info{ |
| 123 | .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, | 123 | .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, |
| 124 | .pNext = make_dedicated ? &dedicated_info : nullptr, | 124 | .pNext = make_dedicated ? &dedicated_info : nullptr, |
diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index 83a23b66a..f2890d263 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp | |||
| @@ -1189,6 +1189,14 @@ u64 TextureCacheRuntime::GetDeviceLocalMemory() const { | |||
| 1189 | return device.GetDeviceLocalMemory(); | 1189 | return device.GetDeviceLocalMemory(); |
| 1190 | } | 1190 | } |
| 1191 | 1191 | ||
| 1192 | u64 TextureCacheRuntime::GetDeviceMemoryUsage() const { | ||
| 1193 | return device.GetDeviceMemoryUsage(); | ||
| 1194 | } | ||
| 1195 | |||
| 1196 | bool TextureCacheRuntime::CanReportMemoryUsage() const { | ||
| 1197 | return device.CanReportMemoryUsage(); | ||
| 1198 | } | ||
| 1199 | |||
| 1192 | void TextureCacheRuntime::TickFrame() {} | 1200 | void TextureCacheRuntime::TickFrame() {} |
| 1193 | 1201 | ||
| 1194 | Image::Image(TextureCacheRuntime& runtime_, const ImageInfo& info_, GPUVAddr gpu_addr_, | 1202 | Image::Image(TextureCacheRuntime& runtime_, const ImageInfo& info_, GPUVAddr gpu_addr_, |
| @@ -1203,6 +1211,7 @@ Image::Image(TextureCacheRuntime& runtime_, const ImageInfo& info_, GPUVAddr gpu | |||
| 1203 | } else { | 1211 | } else { |
| 1204 | flags |= VideoCommon::ImageFlagBits::Converted; | 1212 | flags |= VideoCommon::ImageFlagBits::Converted; |
| 1205 | } | 1213 | } |
| 1214 | flags |= VideoCommon::ImageFlagBits::CostlyLoad; | ||
| 1206 | } | 1215 | } |
| 1207 | if (runtime->device.HasDebuggingToolAttached()) { | 1216 | if (runtime->device.HasDebuggingToolAttached()) { |
| 1208 | original_image.SetObjectNameEXT(VideoCommon::Name(*this).c_str()); | 1217 | original_image.SetObjectNameEXT(VideoCommon::Name(*this).c_str()); |
diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.h b/src/video_core/renderer_vulkan/vk_texture_cache.h index c81130dd2..cb15b4a1c 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.h +++ b/src/video_core/renderer_vulkan/vk_texture_cache.h | |||
| @@ -55,6 +55,10 @@ public: | |||
| 55 | 55 | ||
| 56 | u64 GetDeviceLocalMemory() const; | 56 | u64 GetDeviceLocalMemory() const; |
| 57 | 57 | ||
| 58 | u64 GetDeviceMemoryUsage() const; | ||
| 59 | |||
| 60 | bool CanReportMemoryUsage() const; | ||
| 61 | |||
| 58 | void BlitImage(Framebuffer* dst_framebuffer, ImageView& dst, ImageView& src, | 62 | void BlitImage(Framebuffer* dst_framebuffer, ImageView& dst, ImageView& src, |
| 59 | const Region2D& dst_region, const Region2D& src_region, | 63 | const Region2D& dst_region, const Region2D& src_region, |
| 60 | Tegra::Engines::Fermi2D::Filter filter, | 64 | Tegra::Engines::Fermi2D::Filter filter, |