dd0d232c97
Signed-off-by: Robear Selwans <robear.selwans@outlook.com>
90 lines
3.1 KiB
C
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);
|
|
}
|