diff --git a/build.zig b/build.zig index 44bf395e..d5b52fcd 100644 --- a/build.zig +++ b/build.zig @@ -618,7 +618,6 @@ pub fn addFreetypeAndHarfbuzz(b: *std.Build, c_lib: *std.Build.Step.Compile, tar c_lib.installHeadersDirectory(harfbuzz.path("src"), "", .{}); c_lib.root_module.addCMacro("HAVE_FREETYPE", "1"); c_lib.root_module.addCSourceFile(.{.file = harfbuzz.path("src/harfbuzz.cc"), .flags = flags}); - c_lib.root_module.link_libcpp = true; } pub inline fn addGLFWSources(b: *std.Build, c_lib: *std.Build.Step.Compile, target: std.Build.ResolvedTarget, flags: []const []const u8) !void { @@ -747,14 +746,18 @@ pub fn addFileDialog(b: *std.Build, c_lib: *std.Build.Step.Compile, flags: []con pub inline fn addHeaderOnlyLibs(b: *std.Build, c_lib: *std.Build.Step.Compile, flags: []const []const u8) void { const cgltf = b.dependency("cgltf", .{}); const stb = b.dependency("stb", .{}); + const vma = b.dependency("VulkanMemoryAllocator", .{}); c_lib.root_module.addIncludePath(cgltf.path("")); c_lib.root_module.addIncludePath(stb.path("")); + c_lib.root_module.addIncludePath(vma.path("include")); c_lib.installHeader(cgltf.path("cgltf.h"), "cgltf.h"); c_lib.installHeader(stb.path("stb_image_write.h"), "stb/stb_image_write.h"); c_lib.installHeader(stb.path("stb_image.h"), "stb/stb_image.h"); + c_lib.installHeader(vma.path("include/vk_mem_alloc.h"), "vk_mem_alloc.h"); + c_lib.installHeader(b.path("include/vk_mem_alloc_extended.h"), "vk_mem_alloc_extended.h"); - c_lib.root_module.addCSourceFiles(.{.files = &[_][]const u8{"lib/cgltf.c", "lib/stb.c"}, .flags = flags}); + c_lib.root_module.addCSourceFiles(.{.files = &[_][]const u8{"lib/cgltf.c", "lib/stb.c", "lib/vma.cpp"}, .flags = flags}); } pub inline fn makeCubyzLibs(b: *std.Build, step: *std.Build.Step, name: []const u8, target: std.Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, flags: []const []const u8, replace_tool: *std.Build.Step.Compile) !*std.Build.Step.Compile { @@ -764,6 +767,8 @@ pub inline fn makeCubyzLibs(b: *std.Build, step: *std.Build.Step, name: []const .target = target, .optimize = optimize, .pic = true, // Needed for thread sanitizer + .link_libc = true, + .link_libcpp = true, }), }); diff --git a/build.zig.zon b/build.zig.zon index 967a604d..b3920db8 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -68,5 +68,9 @@ .url = "git+https://git.code.sf.net/p/tinyfiledialogs/code#eaea99294f266149104e67e3f4e29db6ea03a1eb", .hash = "N-V-__8AADsZFAC9Ut0V_OXjd_w2LO5zM1W1N5FP9W1bJ_m4", }, + .VulkanMemoryAllocator = .{ + .url = "https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator/archive/refs/tags/v3.4.0.tar.gz", + .hash = "N-V-__8AAG7MQQCXcvOh0VkmSXF9qW5CTbgporOoN7XDgeov", + }, }, } diff --git a/include/vk_mem_alloc_extended.h b/include/vk_mem_alloc_extended.h new file mode 100644 index 00000000..56cda5fa --- /dev/null +++ b/include/vk_mem_alloc_extended.h @@ -0,0 +1,37 @@ +// VMA tries to fetch these through their (outdated) extension name, see upstream issue https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator/issues/541 +#define PFN_vkGetBufferMemoryRequirements2KHR PFN_vkGetBufferMemoryRequirements2 +#define PFN_vkGetImageMemoryRequirements2KHR PFN_vkGetImageMemoryRequirements2 +#define PFN_vkBindBufferMemory2KHR PFN_vkBindBufferMemory2 +#define PFN_vkBindImageMemory2KHR PFN_vkBindImageMemory2 +#define PFN_vkGetPhysicalDeviceMemoryProperties2KHR PFN_vkGetPhysicalDeviceMemoryProperties2 +#define PFN_vkGetDeviceBufferMemoryRequirementsKHR PFN_vkGetDeviceBufferMemoryRequirements +#define PFN_vkGetDeviceImageMemoryRequirementsKHR PFN_vkGetDeviceImageMemoryRequirements +#define PFN_vkGetPhysicalDeviceProperties2KHR PFN_vkGetPhysicalDeviceProperties2 +#define VkMemoryAllocateFlagsInfoKHR VkMemoryAllocateFlagsInfo +#define VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO +#define VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT +#define VkPhysicalDeviceProperties2KHR VkPhysicalDeviceProperties2 +#define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 +#define VkPhysicalDeviceMemoryProperties2KHR VkPhysicalDeviceMemoryProperties2 +#define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 +#define VkMemoryDedicatedAllocateInfoKHR VkMemoryDedicatedAllocateInfo +#define VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO +#define VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT +#define VkBufferMemoryRequirementsInfo2KHR VkBufferMemoryRequirementsInfo2 +#define VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2 +#define VkMemoryDedicatedRequirementsKHR VkMemoryDedicatedRequirements +#define VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS +#define VkMemoryRequirements2KHR VkMemoryRequirements2 +#define VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 +#define VkImageMemoryRequirementsInfo2KHR VkImageMemoryRequirementsInfo2 +#define VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2 +#define VkBindBufferMemoryInfoKHR VkBindBufferMemoryInfo +#define VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO +#define VkBindImageMemoryInfoKHR VkBindImageMemoryInfo +#define VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO +#define VkDeviceBufferMemoryRequirementsKHR VkDeviceBufferMemoryRequirements +#define VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS +#define VkDeviceImageMemoryRequirementsKHR VkDeviceImageMemoryRequirements +#define VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS + +#include diff --git a/lib/vma.cpp b/lib/vma.cpp new file mode 100644 index 00000000..57cf0b8d --- /dev/null +++ b/lib/vma.cpp @@ -0,0 +1,6 @@ +#include + +#define VMA_VULKAN_HEADERS_ALREADY_INCLUDED +#define VMA_IMPLEMENTATION + +#include