diff options
author | bunnei <bunneidev@gmail.com> | 2020-09-24 03:24:27 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-24 03:24:27 +0200 |
commit | d66b897a6d7a2a0bc0a3910fbdb7c1c6028c21d0 (patch) | |
tree | 7417466362259dae2d1a690d6aef8dcbc14a0b12 /src/video_core/renderer_vulkan/vk_command_pool.cpp | |
parent | Merge pull request #4618 from german77/GcAdapterAutoMap (diff) | |
parent | vk_query_cache: Hack counter destructor to avoid reserving queries (diff) | |
download | yuzu-d66b897a6d7a2a0bc0a3910fbdb7c1c6028c21d0.tar yuzu-d66b897a6d7a2a0bc0a3910fbdb7c1c6028c21d0.tar.gz yuzu-d66b897a6d7a2a0bc0a3910fbdb7c1c6028c21d0.tar.bz2 yuzu-d66b897a6d7a2a0bc0a3910fbdb7c1c6028c21d0.tar.lz yuzu-d66b897a6d7a2a0bc0a3910fbdb7c1c6028c21d0.tar.xz yuzu-d66b897a6d7a2a0bc0a3910fbdb7c1c6028c21d0.tar.zst yuzu-d66b897a6d7a2a0bc0a3910fbdb7c1c6028c21d0.zip |
Diffstat (limited to 'src/video_core/renderer_vulkan/vk_command_pool.cpp')
-rw-r--r-- | src/video_core/renderer_vulkan/vk_command_pool.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/vk_command_pool.cpp b/src/video_core/renderer_vulkan/vk_command_pool.cpp new file mode 100644 index 000000000..f1abd4b1a --- /dev/null +++ b/src/video_core/renderer_vulkan/vk_command_pool.cpp @@ -0,0 +1,41 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include <cstddef> + +#include "video_core/renderer_vulkan/vk_command_pool.h" +#include "video_core/renderer_vulkan/vk_device.h" +#include "video_core/renderer_vulkan/wrapper.h" + +namespace Vulkan { + +constexpr size_t COMMAND_BUFFER_POOL_SIZE = 0x1000; + +CommandPool::CommandPool(MasterSemaphore& master_semaphore, const VKDevice& device) + : ResourcePool(master_semaphore, COMMAND_BUFFER_POOL_SIZE), device{device} {} + +CommandPool::~CommandPool() = default; + +void CommandPool::Allocate(size_t begin, size_t end) { + // Command buffers are going to be commited, recorded, executed every single usage cycle. + // They are also going to be reseted when commited. + Pool& pool = pools.emplace_back(); + pool.handle = device.GetLogical().CreateCommandPool({ + .sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, + .pNext = nullptr, + .flags = + VK_COMMAND_POOL_CREATE_TRANSIENT_BIT | VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, + .queueFamilyIndex = device.GetGraphicsFamily(), + }); + pool.cmdbufs = pool.handle.Allocate(COMMAND_BUFFER_POOL_SIZE); +} + +VkCommandBuffer CommandPool::Commit() { + const size_t index = CommitResource(); + const auto pool_index = index / COMMAND_BUFFER_POOL_SIZE; + const auto sub_index = index % COMMAND_BUFFER_POOL_SIZE; + return pools[pool_index].cmdbufs[sub_index]; +} + +} // namespace Vulkan |