From 461a41b569b7f58f709e2588a5787231cfb87926 Mon Sep 17 00:00:00 2001 From: Tobias Frisch <tfrisch@uni-koblenz.de> Date: Fri, 9 Jul 2021 19:00:18 +0200 Subject: [PATCH] [#59] Added VMA C++ bindings Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de> --- .gitmodules | 3 ++ config/lib/GLFW.cmake | 2 +- config/lib/SPIRV_Cross.cmake | 2 +- config/lib/VulkanMemoryAllocator.cmake | 5 ++-- include/vkcv/Context.hpp | 8 ++--- lib/VulkanMemoryAllocator-Hpp | 1 + src/vkcv/Context.cpp | 41 ++++++++++++++++---------- 7 files changed, 38 insertions(+), 24 deletions(-) create mode 160000 lib/VulkanMemoryAllocator-Hpp diff --git a/.gitmodules b/.gitmodules index 789927dd..cfa32fb4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -25,3 +25,6 @@ [submodule "lib/VulkanMemoryAllocator"] path = lib/VulkanMemoryAllocator url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git +[submodule "lib/VulkanMemoryAllocator-Hpp"] + path = lib/VulkanMemoryAllocator-Hpp + url = https://github.com/malte-v/VulkanMemoryAllocator-Hpp.git diff --git a/config/lib/GLFW.cmake b/config/lib/GLFW.cmake index c423f960..9668694d 100644 --- a/config/lib/GLFW.cmake +++ b/config/lib/GLFW.cmake @@ -10,7 +10,7 @@ else() add_subdirectory(${vkcv_lib}/glfw) list(APPEND vkcv_libraries glfw) - list(APPEND vkcv_includes ${vkcv_lib}/glfw/include) + list(APPEND vkcv_includes ${vkcv_lib_path}/glfw/include) message(${vkcv_config_msg} " GLFW - " ${glfw3_VERSION}) else() diff --git a/config/lib/SPIRV_Cross.cmake b/config/lib/SPIRV_Cross.cmake index cf1e6fe0..00ae4552 100644 --- a/config/lib/SPIRV_Cross.cmake +++ b/config/lib/SPIRV_Cross.cmake @@ -25,7 +25,7 @@ else() add_subdirectory(${vkcv_lib}/SPIRV-Cross) list(APPEND vkcv_libraries spirv-cross-cpp) - list(APPEND vkcv_includes ${vkcv_lib}/SPIV-Cross/include) + list(APPEND vkcv_includes ${vkcv_lib_path}/SPIV-Cross/include) message(${vkcv_config_msg} " SPIRV Cross - " ${SPIRV_CROSS_VERSION}) else() diff --git a/config/lib/VulkanMemoryAllocator.cmake b/config/lib/VulkanMemoryAllocator.cmake index 1ec40d1b..aeca2ad1 100644 --- a/config/lib/VulkanMemoryAllocator.cmake +++ b/config/lib/VulkanMemoryAllocator.cmake @@ -1,9 +1,10 @@ -if (EXISTS "${vkcv_lib_path}/VulkanMemoryAllocator") +if ((EXISTS "${vkcv_lib_path}/VulkanMemoryAllocator") AND + (EXISTS "${vkcv_lib_path}/VulkanMemoryAllocator-Hpp")) add_subdirectory(${vkcv_lib}/VulkanMemoryAllocator) list(APPEND vkcv_libraries VulkanMemoryAllocator) - list(APPEND vkcv_includes ${vkcv_lib}/VulkanMemoryAllocator/include) + list(APPEND vkcv_includes ${vkcv_lib_path}/VulkanMemoryAllocator-Hpp) message(${vkcv_config_msg} " VMA - ") else() diff --git a/include/vkcv/Context.hpp b/include/vkcv/Context.hpp index ab744f66..2ecd9203 100644 --- a/include/vkcv/Context.hpp +++ b/include/vkcv/Context.hpp @@ -1,7 +1,7 @@ #pragma once #include <vulkan/vulkan.hpp> -#include <vk_mem_alloc.h> +#include <vk_mem_alloc.hpp> #include "QueueManager.hpp" @@ -35,7 +35,7 @@ namespace vkcv const QueueManager& getQueueManager() const; [[nodiscard]] - const VmaAllocator& getAllocator() const; + const vma::Allocator& getAllocator() const; static Context create(const char *applicationName, uint32_t applicationVersion, @@ -52,13 +52,13 @@ namespace vkcv * @param device Vulkan-Device */ Context(vk::Instance instance, vk::PhysicalDevice physicalDevice, vk::Device device, - QueueManager&& queueManager, VmaAllocator& allocator) noexcept; + QueueManager&& queueManager, vma::Allocator&& allocator) noexcept; vk::Instance m_Instance; vk::PhysicalDevice m_PhysicalDevice; vk::Device m_Device; QueueManager m_QueueManager; - VmaAllocator m_Allocator; + vma::Allocator m_Allocator; }; } diff --git a/lib/VulkanMemoryAllocator-Hpp b/lib/VulkanMemoryAllocator-Hpp new file mode 160000 index 00000000..eae6e8d3 --- /dev/null +++ b/lib/VulkanMemoryAllocator-Hpp @@ -0,0 +1 @@ +Subproject commit eae6e8d3bd4593e0d7071c85fba2a8f33fbe5dab diff --git a/src/vkcv/Context.cpp b/src/vkcv/Context.cpp index b5315db4..431d53b7 100644 --- a/src/vkcv/Context.cpp +++ b/src/vkcv/Context.cpp @@ -38,7 +38,7 @@ namespace vkcv vk::PhysicalDevice physicalDevice, vk::Device device, QueueManager&& queueManager, - VmaAllocator& allocator) noexcept : + vma::Allocator&& allocator) noexcept : m_Instance(instance), m_PhysicalDevice(physicalDevice), m_Device(device), @@ -48,10 +48,7 @@ namespace vkcv Context::~Context() noexcept { - if (m_Allocator) { - vmaDestroyAllocator(m_Allocator); - } - + m_Allocator.destroy(); m_Device.destroy(); m_Instance.destroy(); } @@ -75,7 +72,7 @@ namespace vkcv return m_QueueManager; } - const VmaAllocator& Context::getAllocator() const { + const vma::Allocator& Context::getAllocator() const { return m_Allocator; } @@ -311,18 +308,30 @@ namespace vkcv queuePairsTransfer ); - VmaAllocatorCreateInfo allocatorCreateInfo = {}; - allocatorCreateInfo.physicalDevice = physicalDevice; - allocatorCreateInfo.instance = instance; - allocatorCreateInfo.device = device; - allocatorCreateInfo.vulkanApiVersion = VK_HEADER_VERSION_COMPLETE; + const vma::AllocatorCreateInfo allocatorCreateInfo ( + vma::AllocatorCreateFlags(), + physicalDevice, + device, + 0, + nullptr, + nullptr, + 0, + nullptr, + nullptr, + nullptr, + instance, + VK_HEADER_VERSION_COMPLETE + ); - VmaAllocator allocator; - if (VK_SUCCESS != vmaCreateAllocator(&allocatorCreateInfo, &allocator)) { - allocator = nullptr; - } + vma::Allocator allocator = vma::createAllocator(allocatorCreateInfo); - return Context(instance, physicalDevice, device, std::move(queueManager), allocator); + return Context( + instance, + physicalDevice, + device, + std::move(queueManager), + std::move(allocator) + ); } } -- GitLab