summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_vulkan/vk_staging_buffer_pool.h
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2022-11-19 23:16:07 +0100
committerFernando Sahmkow <fsahmkow27@gmail.com>2023-01-01 22:43:58 +0100
commit2793304117c19665f089c7bc25cfe060bbbec1ac (patch)
tree8b13933d010efa8126a994782abbd60b04d460f9 /src/video_core/renderer_vulkan/vk_staging_buffer_pool.h
parentMacroHLE: Add OpenGL Support (diff)
downloadyuzu-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.h26
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