Files
evk/evk/evkMemory.c
T
mo7sen dd0d232c97 Major changes
Signed-off-by: Robear Selwans <robear.selwans@outlook.com>
2025-07-02 12:37:15 +03:00

90 lines
3.1 KiB
C

#include "evkMemory.h"
evkGPUAllocator evkGPUCreateAllocator(evkDevice device)
{
VmaVulkanFunctions vmaFunctions = {
.vkGetPhysicalDeviceProperties = vkGetPhysicalDeviceProperties,
.vkGetPhysicalDeviceMemoryProperties = vkGetPhysicalDeviceMemoryProperties,
.vkGetPhysicalDeviceMemoryProperties2KHR = vkGetPhysicalDeviceMemoryProperties2,
.vkAllocateMemory = vkAllocateMemory,
.vkFreeMemory = vkFreeMemory,
.vkMapMemory = vkMapMemory,
.vkUnmapMemory = vkUnmapMemory,
.vkFlushMappedMemoryRanges = vkFlushMappedMemoryRanges,
.vkInvalidateMappedMemoryRanges = vkInvalidateMappedMemoryRanges,
.vkBindBufferMemory = vkBindBufferMemory,
.vkBindBufferMemory2KHR = vkBindBufferMemory2KHR,
.vkBindImageMemory = vkBindImageMemory,
.vkBindImageMemory2KHR = vkBindImageMemory2KHR,
.vkGetBufferMemoryRequirements = vkGetBufferMemoryRequirements,
.vkGetBufferMemoryRequirements2KHR = vkGetBufferMemoryRequirements2,
.vkGetImageMemoryRequirements = vkGetImageMemoryRequirements,
.vkGetImageMemoryRequirements2KHR = vkGetImageMemoryRequirements2KHR,
.vkCreateBuffer = vkCreateBuffer,
.vkDestroyBuffer = vkDestroyBuffer,
.vkCreateImage = vkCreateImage,
.vkDestroyImage = vkDestroyImage,
.vkCmdCopyBuffer = vkCmdCopyBuffer,
};
VmaAllocatorCreateInfo createInfo = {
.physicalDevice = device._physicalDevice,
.device = device.vk,
.instance = device._instance.vk,
.vulkanApiVersion = device._instance.apiVersion,
.pVulkanFunctions = &vmaFunctions,
.flags = VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT | VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT,
};
evkGPUAllocator alloc;
assert(vmaCreateAllocator(&createInfo, &alloc.vma) == VK_SUCCESS);
return alloc;
}
void evkGPUDestroyAllocator(evkGPUAllocator alloc)
{
vmaDestroyAllocator(alloc.vma);
}
evkImage evkGPUCreateImage(evkGPUAllocationCreateInfo allocationCreateInfo, VkImageCreateInfo* imageCreateInfo)
{
evkImage img;
VmaAllocationCreateInfo vmaAllocCreateInfo = {
.usage = VMA_MEMORY_USAGE_AUTO,
.flags = allocationCreateInfo.allocationFlags,
.pool = allocationCreateInfo.pool.vma,
};
vmaCreateImage(allocationCreateInfo.allocator.vma, imageCreateInfo, &vmaAllocCreateInfo, &img.vk, &img.allocData.allocation.vma, &img.allocData.allocationInfo.vma);
return img;
}
void evkGPUDestroyImage(evkImage img)
{
vmaDestroyImage(img.allocData.allocator.vma, img.vk, img.allocData.allocation.vma);
}
evkBuffer evkGPUCreateBuffer(evkGPUAllocationCreateInfo allocationCreateInfo, VkBufferCreateInfo* bufferCreateInfo)
{
evkBuffer buf;
VmaAllocationCreateInfo vmaAllocCreateInfo = {
.usage = VMA_MEMORY_USAGE_AUTO,
.flags = allocationCreateInfo.allocationFlags,
.pool = allocationCreateInfo.pool.vma,
};
vmaCreateBuffer(allocationCreateInfo.allocator.vma, bufferCreateInfo, &vmaAllocCreateInfo, &buf.vk, &buf.allocData.allocation.vma, &buf.allocData.allocationInfo.vma);
buf.usage = bufferCreateInfo->usage;
return buf;
}
void evkGPUDestroyBuffer(evkBuffer buf)
{
vmaDestroyBuffer(buf.allocData.allocator.vma, buf.vk, buf.allocData.allocation.vma);
}