writing mesh data to GPU
[demo] / src / vulkan / allocator.cc
index 5228a72..ba1b47b 100644 (file)
@@ -5,7 +5,7 @@
 #include "vk.h"
 #include "vkutil.h"
 
-VkDeviceMemory vk_allocate(int size)
+bool vku_allocate(int size, DevMemBlock *block)
 {
        VkDeviceMemory gpu_mem;
 
@@ -15,9 +15,33 @@ VkDeviceMemory vk_allocate(int size)
        gpu_alloc_inf.allocationSize = size;
 
        if(vkAllocateMemory(vk_device, &gpu_alloc_inf, 0, &gpu_mem) != VK_SUCCESS) {
-               fprintf(stderr, "Failed to allocate device memory, mem size: %d\n");
-               return 0;
+               fprintf(stderr, "Failed to allocate device memory, mem size: %d\n", size);
+               return false;
        }
 
-       return gpu_mem;
+       block->dev_mem = gpu_mem;
+       block->offset = 0;
+       block->size = size;
+
+       return true;
+}
+
+void vku_free(VkDeviceMemory gpu_memory)
+{
+       vkFreeMemory(vk_device, gpu_memory, 0);
+}
+
+bool vku_write_memory(VkDeviceMemory gpu_mem, int size, void *data)
+{
+       uint8_t *pdata;
+       VkResult res = vkMapMemory(vk_device, gpu_mem, 0, size, 0, (void**)&pdata);
+       if(res != VK_SUCCESS) {
+               fprintf(stderr, "Failed to map memory to write data.\n");
+               return false;
+       }
+
+       memcpy(pdata, data, size);
+       vkUnmapMemory(vk_device, gpu_mem);
+
+       return true;
 }