Add vkAllocateMemory/vkFreeMemory

This commit is contained in:
twinaphex 2016-02-29 22:36:53 +01:00
parent a53e7a5437
commit a7df7be64b
2 changed files with 33 additions and 18 deletions

View File

@ -362,7 +362,7 @@ struct vk_texture vulkan_create_texture(vk_t *vk,
} }
else else
{ {
vkAllocateMemory(device, &alloc, NULL, &tex.memory); VKFUNC(vkAllocateMemory)(device, &alloc, NULL, &tex.memory);
tex.memory_size = alloc.allocationSize; tex.memory_size = alloc.allocationSize;
tex.memory_type = alloc.memoryTypeIndex; tex.memory_type = alloc.memoryTypeIndex;
} }
@ -370,7 +370,7 @@ struct vk_texture vulkan_create_texture(vk_t *vk,
if (old) if (old)
{ {
if (old->memory != VK_NULL_HANDLE) if (old->memory != VK_NULL_HANDLE)
vkFreeMemory(device, old->memory, NULL); VKFUNC(vkFreeMemory)(device, old->memory, NULL);
memset(old, 0, sizeof(*old)); memset(old, 0, sizeof(*old));
} }
@ -502,7 +502,7 @@ void vulkan_destroy_texture(
{ {
if (tex->mapped) if (tex->mapped)
VKFUNC(vkUnmapMemory)(device, tex->memory); VKFUNC(vkUnmapMemory)(device, tex->memory);
vkFreeMemory(device, tex->memory, NULL); VKFUNC(vkFreeMemory)(device, tex->memory, NULL);
VKFUNC(vkDestroyImageView)(device, tex->view, NULL); VKFUNC(vkDestroyImageView)(device, tex->view, NULL);
VKFUNC(vkDestroyImage)(device, tex->image, NULL); VKFUNC(vkDestroyImage)(device, tex->image, NULL);
#ifdef VULKAN_DEBUG_TEXTURE_ALLOC #ifdef VULKAN_DEBUG_TEXTURE_ALLOC
@ -778,23 +778,23 @@ struct vk_buffer vulkan_create_buffer(
VkMemoryAllocateInfo alloc = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO }; VkMemoryAllocateInfo alloc = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO };
VkBufferCreateInfo info = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; VkBufferCreateInfo info = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
info.size = size; info.size = size;
info.usage = usage; info.usage = usage;
info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; info.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
vkCreateBuffer(context->device, &info, NULL, &buffer.buffer); VKFUNC(vkCreateBuffer)(context->device, &info, NULL, &buffer.buffer);
vkGetBufferMemoryRequirements(context->device, buffer.buffer, &mem_reqs); vkGetBufferMemoryRequirements(context->device, buffer.buffer, &mem_reqs);
alloc.allocationSize = mem_reqs.size; alloc.allocationSize = mem_reqs.size;
alloc.memoryTypeIndex = vulkan_find_memory_type( alloc.memoryTypeIndex = vulkan_find_memory_type(
&context->memory_properties, &context->memory_properties,
mem_reqs.memoryTypeBits, mem_reqs.memoryTypeBits,
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
vkAllocateMemory(context->device, &alloc, NULL, &buffer.memory); VKFUNC(vkAllocateMemory)(context->device, &alloc, NULL, &buffer.memory);
vkBindBufferMemory(context->device, buffer.buffer, buffer.memory, 0); vkBindBufferMemory(context->device, buffer.buffer, buffer.memory, 0);
buffer.size = alloc.allocationSize; buffer.size = alloc.allocationSize;
VKFUNC(vkMapMemory)(context->device, VKFUNC(vkMapMemory)(context->device,
buffer.memory, 0, buffer.size, 0, &buffer.mapped); buffer.memory, 0, buffer.size, 0, &buffer.mapped);
@ -807,8 +807,10 @@ void vulkan_destroy_buffer(
struct vk_buffer *buffer) struct vk_buffer *buffer)
{ {
VKFUNC(vkUnmapMemory)(device, buffer->memory); VKFUNC(vkUnmapMemory)(device, buffer->memory);
vkFreeMemory(device, buffer->memory, NULL); VKFUNC(vkFreeMemory)(device, buffer->memory, NULL);
vkDestroyBuffer(device, buffer->buffer, NULL);
VKFUNC(vkDestroyBuffer)(device, buffer->buffer, NULL);
memset(buffer, 0, sizeof(*buffer)); memset(buffer, 0, sizeof(*buffer));
} }
@ -1089,6 +1091,8 @@ bool vulkan_context_init(gfx_ctx_vulkan_data_t *vk,
VKSYM(vk, CreateInstance); VKSYM(vk, CreateInstance);
VKSYM(vk, DestroyInstance); VKSYM(vk, DestroyInstance);
VKSYM(vk, AllocateMemory);
VKSYM(vk, FreeMemory);
app.pApplicationName = "RetroArch"; app.pApplicationName = "RetroArch";
app.applicationVersion = 0; app.applicationVersion = 0;
@ -1130,6 +1134,10 @@ bool vulkan_context_init(gfx_ctx_vulkan_data_t *vk,
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateSemaphore); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateSemaphore);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroySemaphore); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroySemaphore);
/* Buffers */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateBuffer);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyBuffer);
/* Fences */ /* Fences */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateFence); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateFence);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyFence); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyFence);
@ -1168,9 +1176,6 @@ bool vulkan_context_init(gfx_ctx_vulkan_data_t *vk,
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateRenderPass); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreateRenderPass);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyRenderPass); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyRenderPass);
/* Pipelines */ /* Pipelines */
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreatePipelineLayout); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, CreatePipelineLayout);
VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyPipelineLayout); VK_GET_INSTANCE_PROC_ADDR(vk, vk->context.instance, DestroyPipelineLayout);

View File

@ -137,6 +137,18 @@ typedef struct vulkan_context
PFN_vkCreateInstance vkCreateInstance; PFN_vkCreateInstance vkCreateInstance;
PFN_vkDestroyInstance vkDestroyInstance; PFN_vkDestroyInstance vkDestroyInstance;
/* Device */
PFN_vkCreateDevice vkCreateDevice;
PFN_vkDestroyDevice vkDestroyDevice;
/* Device Memory */
PFN_vkAllocateMemory vkAllocateMemory;
PFN_vkFreeMemory vkFreeMemory;
/* Buffers */
PFN_vkCreateBuffer vkCreateBuffer;
PFN_vkDestroyBuffer vkDestroyBuffer;
/* Fences */ /* Fences */
PFN_vkCreateFence vkCreateFence; PFN_vkCreateFence vkCreateFence;
PFN_vkDestroyFence vkDestroyFence; PFN_vkDestroyFence vkDestroyFence;
@ -235,8 +247,6 @@ typedef struct vulkan_context
PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties;
PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties; PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties;
PFN_vkCreateDevice vkCreateDevice;
PFN_vkDestroyDevice vkDestroyDevice;
PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR; PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR;
PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR; PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR;
PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR; PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR;