Command pool and buffers
This commit is contained in:
@@ -70,6 +70,7 @@ typedef Vertex *VertexArray;
|
|||||||
typedef ShaderDataBuffer *ShaderDataBufferArray;
|
typedef ShaderDataBuffer *ShaderDataBufferArray;
|
||||||
typedef VkFence *VkFenceArray;
|
typedef VkFence *VkFenceArray;
|
||||||
typedef VkSemaphore *VkSemaphoreArray;
|
typedef VkSemaphore *VkSemaphoreArray;
|
||||||
|
typedef VkCommandBuffer *VkCommandBufferArray;
|
||||||
|
|
||||||
wapp_intern inline void check(VkResult result);
|
wapp_intern inline void check(VkResult result);
|
||||||
wapp_intern inline void check_swapchain(VkResult result);
|
wapp_intern inline void check_swapchain(VkResult result);
|
||||||
@@ -109,6 +110,8 @@ wapp_intern ShaderDataBufferArray shader_data_bufs;
|
|||||||
wapp_intern VkFenceArray fences;
|
wapp_intern VkFenceArray fences;
|
||||||
wapp_intern VkSemaphoreArray image_acquired_semaphores;
|
wapp_intern VkSemaphoreArray image_acquired_semaphores;
|
||||||
wapp_intern VkSemaphoreArray render_completed_semaphores = nullptr;
|
wapp_intern VkSemaphoreArray render_completed_semaphores = nullptr;
|
||||||
|
wapp_intern VkCommandPool command_pool = VK_NULL_HANDLE;
|
||||||
|
wapp_intern VkCommandBufferArray command_buffers;
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
// {{{ Initialisation
|
// {{{ Initialisation
|
||||||
@@ -569,8 +572,20 @@ int main() {
|
|||||||
}
|
}
|
||||||
// }}}
|
// }}}
|
||||||
|
|
||||||
// Command Pool {{{
|
// Command Pool & Buffers {{{
|
||||||
|
VkCommandPoolCreateInfo pool_create_info = {};
|
||||||
|
pool_create_info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
|
||||||
|
pool_create_info.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
|
||||||
|
pool_create_info.queueFamilyIndex = queue_family_index;
|
||||||
|
check(vkCreateCommandPool(device, &pool_create_info, NULL, &command_pool));
|
||||||
|
|
||||||
|
command_buffers = wapp_array_with_capacity(VkCommandBuffer, max_frames_in_flight, ARRAY_INIT_FILLED);
|
||||||
|
|
||||||
|
VkCommandBufferAllocateInfo buffer_alloc_info = {};
|
||||||
|
buffer_alloc_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
|
||||||
|
buffer_alloc_info.commandPool = command_pool;
|
||||||
|
buffer_alloc_info.commandBufferCount = max_frames_in_flight;
|
||||||
|
check(vkAllocateCommandBuffers(device, &buffer_alloc_info, command_buffers));
|
||||||
// }}}
|
// }}}
|
||||||
|
|
||||||
// {{{ Render Loop
|
// {{{ Render Loop
|
||||||
@@ -592,6 +607,8 @@ int main() {
|
|||||||
// }}}
|
// }}}
|
||||||
|
|
||||||
// {{{ Cleanup
|
// {{{ Cleanup
|
||||||
|
vkFreeCommandBuffers(device, command_pool, max_frames_in_flight, command_buffers);
|
||||||
|
vkDestroyCommandPool(device, command_pool, NULL);
|
||||||
for (u32 i = 0; i < swapchain_image_count; ++i) {
|
for (u32 i = 0; i < swapchain_image_count; ++i) {
|
||||||
vkDestroySemaphore(device, render_completed_semaphores[i], NULL);
|
vkDestroySemaphore(device, render_completed_semaphores[i], NULL);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user