ba1b47be1909122a194565ed497a94a8e395d421
[demo] / src / vulkan / allocator.cc
1 #include <stdio.h>
2 #include <string.h>
3
4 #include "allocator.h"
5 #include "vk.h"
6 #include "vkutil.h"
7
8 bool vku_allocate(int size, DevMemBlock *block)
9 {
10         VkDeviceMemory gpu_mem;
11
12         VkMemoryAllocateInfo gpu_alloc_inf;
13         memset(&gpu_alloc_inf, 0, sizeof gpu_alloc_inf);
14         gpu_alloc_inf.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
15         gpu_alloc_inf.allocationSize = size;
16
17         if(vkAllocateMemory(vk_device, &gpu_alloc_inf, 0, &gpu_mem) != VK_SUCCESS) {
18                 fprintf(stderr, "Failed to allocate device memory, mem size: %d\n", size);
19                 return false;
20         }
21
22         block->dev_mem = gpu_mem;
23         block->offset = 0;
24         block->size = size;
25
26         return true;
27 }
28
29 void vku_free(VkDeviceMemory gpu_memory)
30 {
31         vkFreeMemory(vk_device, gpu_memory, 0);
32 }
33
34 bool vku_write_memory(VkDeviceMemory gpu_mem, int size, void *data)
35 {
36         uint8_t *pdata;
37         VkResult res = vkMapMemory(vk_device, gpu_mem, 0, size, 0, (void**)&pdata);
38         if(res != VK_SUCCESS) {
39                 fprintf(stderr, "Failed to map memory to write data.\n");
40                 return false;
41         }
42
43         memcpy(pdata, data, size);
44         vkUnmapMemory(vk_device, gpu_mem);
45
46         return true;
47 }