]> O.S.I.I.S - jp/vkhelpers.git/commitdiff
use vma for buffers, creation struct as param holder
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Wed, 6 Jun 2018 22:11:11 +0000 (00:11 +0200)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Wed, 6 Jun 2018 22:11:11 +0000 (00:11 +0200)
include/vkh.h
src/vkh_buffer.c
src/vkh_buffer.h

index 98836ddcff1ef557e4b3c4e02c3cfe9df4d6723d..24b327a0d86c19e5c1493bc5cd3529ad30a9b450 100644 (file)
@@ -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);
index 6fc63caedaa4fbf6d68a1bdd0bd5fda1831b5ce5..2bd222f8567ef90e2f59f7cc4215dd4f52a48e2f 100644 (file)
 #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;
 }
index 347c973b921253b21480fcdc30e2ae99b5d0dc9d..d42eaa21685d8aae3b4fccf231ff3d6c2dea94d9 100644 (file)
@@ -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