diff options
author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2022-11-19 23:16:07 +0100 |
---|---|---|
committer | Fernando Sahmkow <fsahmkow27@gmail.com> | 2023-01-01 22:43:58 +0100 |
commit | 2793304117c19665f089c7bc25cfe060bbbec1ac (patch) | |
tree | 8b13933d010efa8126a994782abbd60b04d460f9 /src/video_core/renderer_vulkan/vk_staging_buffer_pool.h | |
parent | MacroHLE: Add OpenGL Support (diff) | |
download | yuzu-2793304117c19665f089c7bc25cfe060bbbec1ac.tar yuzu-2793304117c19665f089c7bc25cfe060bbbec1ac.tar.gz yuzu-2793304117c19665f089c7bc25cfe060bbbec1ac.tar.bz2 yuzu-2793304117c19665f089c7bc25cfe060bbbec1ac.tar.lz yuzu-2793304117c19665f089c7bc25cfe060bbbec1ac.tar.xz yuzu-2793304117c19665f089c7bc25cfe060bbbec1ac.tar.zst yuzu-2793304117c19665f089c7bc25cfe060bbbec1ac.zip |
Diffstat (limited to '')
-rw-r--r-- | src/video_core/renderer_vulkan/vk_staging_buffer_pool.h | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/src/video_core/renderer_vulkan/vk_staging_buffer_pool.h b/src/video_core/renderer_vulkan/vk_staging_buffer_pool.h index 91dc84da8..2906d92a4 100644 --- a/src/video_core/renderer_vulkan/vk_staging_buffer_pool.h +++ b/src/video_core/renderer_vulkan/vk_staging_buffer_pool.h @@ -1,5 +1,6 @@ -// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later +// Copyright 2019 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. #pragma once @@ -20,6 +21,9 @@ struct StagingBufferRef { VkBuffer buffer; VkDeviceSize offset; std::span<u8> mapped_span; + MemoryUsage usage; + u32 log2_level; + u64 index; }; class StagingBufferPool { @@ -30,7 +34,8 @@ public: Scheduler& scheduler); ~StagingBufferPool(); - StagingBufferRef Request(size_t size, MemoryUsage usage); + StagingBufferRef Request(size_t size, MemoryUsage usage, bool deferred = false); + void FreeDeferred(StagingBufferRef& ref); void TickFrame(); @@ -44,13 +49,20 @@ private: vk::Buffer buffer; MemoryCommit commit; std::span<u8> mapped_span; + MemoryUsage usage; + u32 log2_level; + u64 index; u64 tick = 0; + bool deferred{}; StagingBufferRef Ref() const noexcept { return { .buffer = *buffer, .offset = 0, .mapped_span = mapped_span, + .usage = usage, + .log2_level = log2_level, + .index = index, }; } }; @@ -68,11 +80,12 @@ private: bool AreRegionsActive(size_t region_begin, size_t region_end) const; - StagingBufferRef GetStagingBuffer(size_t size, MemoryUsage usage); + StagingBufferRef GetStagingBuffer(size_t size, MemoryUsage usage, bool deferred = false); - std::optional<StagingBufferRef> TryGetReservedBuffer(size_t size, MemoryUsage usage); + std::optional<StagingBufferRef> TryGetReservedBuffer(size_t size, MemoryUsage usage, + bool deferred); - StagingBufferRef CreateStagingBuffer(size_t size, MemoryUsage usage); + StagingBufferRef CreateStagingBuffer(size_t size, MemoryUsage usage, bool deferred); StagingBuffersCache& GetCache(MemoryUsage usage); @@ -99,6 +112,7 @@ private: size_t current_delete_level = 0; u64 buffer_index = 0; + u64 unique_ids{}; }; } // namespace Vulkan |