From: Jean-Philippe Bruyère Date: Wed, 6 Jun 2018 22:11:11 +0000 (+0200) Subject: use vma for buffers, creation struct as param holder X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=5de4a9210f64615bd0b23a0d7c88f5564d0c1e5f;p=jp%2Fvkhelpers.git use vma for buffers, creation struct as param holder --- diff --git a/include/vkh.h b/include/vkh.h index 98836dd..24b327a 100644 --- a/include/vkh.h +++ b/include/vkh.h @@ -123,11 +123,10 @@ VkDescriptorImageInfo vkh_image_get_descriptor(VkhImage img, VkImageLayout ima * VkhBuffer * *************/ VkhBuffer vkh_buffer_create (VkhDevice pDev, VkBufferUsageFlags usage, - VkMemoryPropertyFlags memoryPropertyFlags, VkDeviceSize size); + VmaMemoryUsage memprops, VkDeviceSize size); void vkh_buffer_destroy (VkhBuffer buff); VkResult vkh_buffer_map (VkhBuffer buff); void vkh_buffer_unmap (VkhBuffer buff); -VkResult vkh_buffer_bind (VkhBuffer buff); VkBuffer vkh_buffer_get_vkbuffer (VkhBuffer buff); void* vkh_buffer_get_mapped_pointer (VkhBuffer buff); diff --git a/src/vkh_buffer.c b/src/vkh_buffer.c index 6fc63ca..2bd222f 100644 --- a/src/vkh_buffer.c +++ b/src/vkh_buffer.c @@ -22,55 +22,47 @@ #include "vkh_buffer.h" #include "vkh_device.h" -VkhBuffer vkh_buffer_create(VkhDevice pDev, VkBufferUsageFlags usage, VkMemoryPropertyFlags memoryPropertyFlags, VkDeviceSize size){ +VkhBuffer vkh_buffer_create(VkhDevice pDev, VkBufferUsageFlags usage, VmaMemoryUsage memprops, VkDeviceSize size){ VkhBuffer buff = (VkhBuffer)malloc(sizeof(vkh_buffer_t)); buff->pDev = pDev; - VkBufferCreateInfo bufCreateInfo = { - .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, - .usage = usage, .size = size, .sharingMode = VK_SHARING_MODE_EXCLUSIVE}; - VK_CHECK_RESULT(vkCreateBuffer(pDev->dev, &bufCreateInfo, NULL, &buff->buffer)); + VkBufferCreateInfo* pInfo = &buff->infos; + pInfo->sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; + pInfo->usage = usage; + pInfo->size = size; + pInfo->sharingMode = VK_SHARING_MODE_EXCLUSIVE; - VkMemoryRequirements memReq; - vkGetBufferMemoryRequirements(pDev->dev, buff->buffer, &memReq); - VkMemoryAllocateInfo memAllocInfo = { .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, - .allocationSize = memReq.size }; - assert(vkh_memory_type_from_properties(&pDev->phyMemProps, memReq.memoryTypeBits,memoryPropertyFlags, &memAllocInfo.memoryTypeIndex)); - VK_CHECK_RESULT(vkAllocateMemory(pDev->dev, &memAllocInfo, NULL, &buff->memory)); + buff->memprops = memprops; - buff->alignment = memReq.alignment; - buff->size = memAllocInfo.allocationSize; - buff->usageFlags = usage; - buff->memoryPropertyFlags = memoryPropertyFlags; - - VK_CHECK_RESULT(vkh_buffer_bind(buff)); + VmaAllocationCreateInfo allocInfo = { .usage = memprops }; + VK_CHECK_RESULT(vmaCreateBuffer(pDev->allocator, pInfo, &allocInfo, &buff->buffer, &buff->alloc, &buff->allocInfo)); return buff; } void vkh_buffer_destroy(VkhBuffer buff){ if (buff->buffer) - vkDestroyBuffer(buff->pDev->dev, buff->buffer, NULL); - if (buff->memory) - vkFreeMemory(buff->pDev->dev, buff->memory, NULL); + vmaDestroyBuffer(buff->pDev->allocator, buff->buffer, buff->alloc); free(buff); buff = NULL; } +VkDescriptorBufferInfo vkh_buffer_get_descriptor (VkhBuffer buff){ + VkDescriptorBufferInfo desc = { + .buffer = buff->buffer, + .offset = 0, + .range = VK_WHOLE_SIZE}; + return desc; +} + VkResult vkh_buffer_map(VkhBuffer buff){ - return vkMapMemory(buff->pDev->dev, buff->memory, 0, VK_WHOLE_SIZE, 0, &buff->mapped); + return vmaMapMemory(buff->pDev->allocator, buff->alloc, &buff->mapped); } void vkh_buffer_unmap(VkhBuffer buff){ if (!buff->mapped) return; - vkUnmapMemory(buff->pDev->dev, buff->memory); + vmaUnmapMemory(buff->pDev->allocator, buff->alloc); buff->mapped = NULL; } - -VkResult vkh_buffer_bind(VkhBuffer buff) -{ - return vkBindBufferMemory(buff->pDev->dev, buff->buffer, buff->memory, 0); -} - VkBuffer vkh_buffer_get_vkbuffer (VkhBuffer buff){ return buff->buffer; } diff --git a/src/vkh_buffer.h b/src/vkh_buffer.h index 347c973..d42eaa2 100644 --- a/src/vkh_buffer.h +++ b/src/vkh_buffer.h @@ -30,16 +30,13 @@ extern "C" { typedef struct _vkh_buffer_t { VkhDevice pDev; + VkBufferCreateInfo infos; + VmaMemoryUsage memprops; VkBuffer buffer; - - VkDeviceMemory memory; + VmaAllocation alloc; + VmaAllocationInfo allocInfo; VkDescriptorBufferInfo descriptor; - VkDeviceSize size; VkDeviceSize alignment; - - VkBufferUsageFlags usageFlags; - VkMemoryPropertyFlags memoryPropertyFlags; - void* mapped; }vkh_buffer_t; #ifdef __cplusplus