Added VMA

This commit is contained in:
antopilo
2024-12-03 00:54:07 -05:00
parent e5c252629b
commit fb677f8fe6
6 changed files with 121 additions and 8 deletions

3
.gitmodules vendored
View File

@@ -31,3 +31,6 @@
[submodule "Nuake/dependencies/glfw"]
path = Nuake/dependencies/glfw
url = https://github.com/antopilo/glfw.git
[submodule "Nuake/dependencies/vma"]
path = Nuake/dependencies/vma
url = https://github.com/antopilo/VulkanMemoryAllocatorPremake5.git

View File

@@ -0,0 +1,27 @@
group "Dependencies"
project "vma"
location "vma"
kind "StaticLib"
language "C++"
cppdialect "C++20"
staticruntime "on"
-- Include the headers
includedirs {
"vma/include",
"../src/Vendors/vulkan",
}
files {
"vma/include/**.h",
"vma/include/**.cpp"
}
filter "configurations:Debug"
runtime "Debug"
symbols "on"
filter "configurations:Release"
runtime "Release"
optimize "on"
group ""

View File

@@ -1,9 +1,12 @@
#include "VulkanRenderer.h"
#include "src/Core/Logger.h"
#include <src/Rendering/RenderCommand.h>
#include "src/Window.h"
#include <GLFW/glfw3.h>
#include <src/Rendering/RenderCommand.h>
using namespace Nuake;
@@ -47,6 +50,71 @@ void VkRenderer::Initialize()
InitSync();
VmaVulkanFunctions vulkanFunctions = {};
vulkanFunctions.vkGetInstanceProcAddr = vkGetInstanceProcAddr;
vulkanFunctions.vkGetDeviceProcAddr = vkGetDeviceProcAddr;
vulkanFunctions.vkAllocateMemory = vkAllocateMemory;
vulkanFunctions.vkFreeMemory = vkFreeMemory;
vulkanFunctions.vkMapMemory = vkMapMemory;
vulkanFunctions.vkUnmapMemory = vkUnmapMemory;
vulkanFunctions.vkFlushMappedMemoryRanges = vkFlushMappedMemoryRanges;
vulkanFunctions.vkInvalidateMappedMemoryRanges = vkInvalidateMappedMemoryRanges;
vulkanFunctions.vkBindBufferMemory = vkBindBufferMemory;
vulkanFunctions.vkBindImageMemory = vkBindImageMemory;
vulkanFunctions.vkGetBufferMemoryRequirements = vkGetBufferMemoryRequirements;
vulkanFunctions.vkGetImageMemoryRequirements = vkGetImageMemoryRequirements;
vulkanFunctions.vkCreateBuffer = vkCreateBuffer;
vulkanFunctions.vkDestroyBuffer = vkDestroyBuffer;
vulkanFunctions.vkCreateImage = vkCreateImage;
vulkanFunctions.vkDestroyImage = vkDestroyImage;
vulkanFunctions.vkCmdCopyBuffer = vkCmdCopyBuffer;
// Optional: Include extension functions if needed
vulkanFunctions.vkGetBufferMemoryRequirements2KHR = vkGetBufferMemoryRequirements2KHR;
vulkanFunctions.vkGetImageMemoryRequirements2KHR = vkGetImageMemoryRequirements2KHR;
vulkanFunctions.vkBindBufferMemory2KHR = vkBindBufferMemory2KHR;
vulkanFunctions.vkBindImageMemory2KHR = vkBindImageMemory2KHR;
// Pass the vulkanFunctions struct to the VMA allocator
VmaAllocatorCreateInfo allocatorInfo = {};
allocatorInfo.physicalDevice = GPU;
allocatorInfo.device = Device;
allocatorInfo.instance = Instance;
allocatorInfo.flags = VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT;
allocatorInfo.pVulkanFunctions = {
allocatorInfo.pVulkanFunctions = new VmaVulkanFunctions{
.vkGetInstanceProcAddr = vkGetInstanceProcAddr,
.vkGetDeviceProcAddr = vkGetDeviceProcAddr,
.vkGetPhysicalDeviceProperties = vkGetPhysicalDeviceProperties,
.vkGetPhysicalDeviceMemoryProperties = vkGetPhysicalDeviceMemoryProperties,
.vkAllocateMemory = vkAllocateMemory,
.vkFreeMemory = vkFreeMemory,
.vkMapMemory = vkMapMemory,
.vkUnmapMemory = vkUnmapMemory,
.vkFlushMappedMemoryRanges = vkFlushMappedMemoryRanges,
.vkInvalidateMappedMemoryRanges = vkInvalidateMappedMemoryRanges,
.vkBindBufferMemory = vkBindBufferMemory,
.vkBindImageMemory = vkBindImageMemory,
.vkGetBufferMemoryRequirements = vkGetBufferMemoryRequirements,
.vkGetImageMemoryRequirements = vkGetImageMemoryRequirements,
.vkCreateBuffer = vkCreateBuffer,
.vkDestroyBuffer = vkDestroyBuffer,
.vkCreateImage = vkCreateImage,
.vkDestroyImage = vkDestroyImage,
.vkCmdCopyBuffer = vkCmdCopyBuffer,
.vkGetBufferMemoryRequirements2KHR = vkGetBufferMemoryRequirements2KHR,
.vkGetImageMemoryRequirements2KHR = vkGetImageMemoryRequirements2KHR,
.vkBindBufferMemory2KHR = vkBindBufferMemory2KHR,
.vkBindImageMemory2KHR = vkBindImageMemory2KHR,
}
};
vmaCreateAllocator(&allocatorInfo, &Allocator);
MainDeletionQueue.push_function([&]() {
vmaDestroyAllocator(Allocator);
});
IsInitialized = true;
}

View File

@@ -5,12 +5,15 @@
#include <volk/volk.h>
#include "vkb/VkBootstrap.h"
#include "vk_mem_alloc.h"
#include <functional>
namespace Nuake
{
// Since we need to delete things in order, and manually doing it in the cleanup is
// too tedious to maintain. We will use a queue of destructor to execute in inverse order
// of insertion
// too tedious to maintain. We will use a queue of destructor to execute in inverse order
// of insertion
struct DeletionQueue
{
std::deque<std::function<void()>> Deletors;
@@ -101,6 +104,8 @@ namespace Nuake
DeletionQueue MainDeletionQueue;
VmaAllocator Allocator;
public:
static VkRenderer& Get()
{

View File

@@ -45,7 +45,8 @@ workspace "Nuake"
outputdir = "%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}"
local globalDefines = {
"TRACY_ENABLE",
"TRACY_ON_DEMAND"
"TRACY_ON_DEMAND",
"NK_VK"
}
group "Dependencies"
@@ -60,6 +61,7 @@ group "Dependencies"
include "Nuake/dependencies/yoga_p5.lua"
include "Nuake/dependencies/msdf-atlas-gen_p5.lua"
include "Nuake/dependencies/freetype_p5.lua"
include "Nuake/dependencies/vma_p5.lua"
group ""
include "NuakeNet/premake5.lua"
@@ -91,6 +93,7 @@ project "Nuake"
"_MBCS",
"IMGUI_DEFINE_MATH_OPERATORS",
"NK_VK"
}
targetdir ("bin/" .. outputdir .. "/%{prj.name}")
@@ -142,7 +145,10 @@ project "Nuake"
"%{prj.name}/src/Vendors/incbin/*.c",
"%{prj.name}/src/Vendors/incbin/*.h",
"%{prj.name}/src/Vendors/nanosvg/*.h",
"%{prj.name}/src/Vendors/volk/*.c",
"%{prj.name}/src/Vendors/volk/*.h",
"%{prj.name}/src/Vendors/vkb/*.cpp",
"%{prj.name}/src/Vendors/vkb/*.h",
-- Modules System
"%{prj.name}/src/Modules/Modules.h",
"%{prj.name}/src/Modules/Modules.cpp",
@@ -160,11 +166,13 @@ project "Nuake"
"%{prj.name}/src/Vendors/wren/src/include",
"%{prj.name}/src/Vendors/incbin",
"%{prj.name}/src/Vendors/nanosvg",
"%{prj.name}/src/Vendors/vulkan",
"%{prj.name}/src/Vendors/vkb",
"%{prj.name}/dependencies/build",
"%{prj.name}/dependencies/soloud/include",
"%{prj.name}/dependencies/Coral/Coral.Native/Include",
"%{prj.name}/dependencies/recastnavigation/DebugUtils/Include",
"%{prj.name}/dependencies/recastnavigation/Detour/Include",
"%{prj.name}/dependencies/recastnavigation/Detour/Include",
"%{prj.name}/dependencies/recastnavigation/DetourCrowd/Include",
"%{prj.name}/dependencies/recastnavigation/DetourTileCache/Include",
"%{prj.name}/dependencies/recastnavigation/Recast/Include",
@@ -175,14 +183,15 @@ project "Nuake"
"%{prj.name}/dependencies/freetype/include",
"%{prj.name}/dependencies/tracy/public/tracy",
"%{prj.name}/dependencies/entt/src",
"%{prj.name}/dependencies/vma/include"
}
links
{
"soloud",
"tracy",
"yoga"
"yoga",
"vma"
}
filter "system:linux"