From d7fdab1113623478fecf509c3fd81268d9459b84 Mon Sep 17 00:00:00 2001 From: ladevieq Date: Sat, 30 Jan 2021 21:46:39 +0100 Subject: Add record commands and image barrier functions to api --- src/vk-renderer.cpp | 83 +++++++++-------------------------------------------- 1 file changed, 13 insertions(+), 70 deletions(-) (limited to 'src/vk-renderer.cpp') diff --git a/src/vk-renderer.cpp b/src/vk-renderer.cpp index 63694f2..cc1df8b 100644 --- a/src/vk-renderer.cpp +++ b/src/vk-renderer.cpp @@ -80,7 +80,7 @@ void vkrenderer::compute(uint32_t width, uint32_t height) { auto acquire_result = vkAcquireNextImageKHR(api.context.device, swapchain.handle, UINT64_MAX, acquire_semaphores[frame_index], VK_NULL_HANDLE, ¤t_image_index); handle_swapchain_result(acquire_result); - // API + // API frame skeleton // api.start_record(cmd_buffer); // api.command_barrier(); // bind pipeline @@ -91,77 +91,20 @@ void vkrenderer::compute(uint32_t width, uint32_t height) { // api.execute(cmd_buffer, wait_semaphore, signal_semaphore); // api.present(swapchain, img_index, wait_semaphore); - VkCommandBufferBeginInfo cmd_buf_begin_info = {}; - cmd_buf_begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; - cmd_buf_begin_info.pNext = nullptr; - cmd_buf_begin_info.flags = 0; - cmd_buf_begin_info.pInheritanceInfo = nullptr; - - vkBeginCommandBuffer(command_buffers[frame_index], &cmd_buf_begin_info); - VkImageSubresourceRange image_subresource_range = {}; - image_subresource_range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; - image_subresource_range.baseMipLevel = 0; - image_subresource_range.levelCount = 1; - image_subresource_range.baseArrayLayer = 0; - image_subresource_range.layerCount = 1; - - VkImageMemoryBarrier undefined_to_general_barrier = {}; - undefined_to_general_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; - undefined_to_general_barrier.pNext = nullptr; - undefined_to_general_barrier.srcAccessMask = 0; - undefined_to_general_barrier.dstAccessMask = VK_ACCESS_SHADER_WRITE_BIT; - undefined_to_general_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; - undefined_to_general_barrier.newLayout = VK_IMAGE_LAYOUT_GENERAL; - undefined_to_general_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - undefined_to_general_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - undefined_to_general_barrier.image = swapchain.images[current_image_index].handle; - undefined_to_general_barrier.subresourceRange = image_subresource_range; - - vkCmdPipelineBarrier( - command_buffers[frame_index], - VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, - VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, - 0, - 0, - nullptr, - 0, - nullptr, - 1, - &undefined_to_general_barrier - ); + auto cmd_buf = command_buffers[frame_index]; + api.start_record(cmd_buf); + api.image_barrier(cmd_buf, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, VK_ACCESS_SHADER_WRITE_BIT, swapchain.images[current_image_index]); + + + vkCmdBindDescriptorSets(cmd_buf, VK_PIPELINE_BIND_POINT_COMPUTE, compute_pipeline.layout, 0, 1, &compute_shader_sets[current_image_index], 0, nullptr); + + vkCmdBindPipeline(cmd_buf, VK_PIPELINE_BIND_POINT_COMPUTE, compute_pipeline.handle); + + vkCmdDispatch(cmd_buf, width / 8, height / 8, 1); - vkCmdBindDescriptorSets(command_buffers[frame_index], VK_PIPELINE_BIND_POINT_COMPUTE, compute_pipeline.layout, 0, 1, &compute_shader_sets[current_image_index], 0, nullptr); - - vkCmdBindPipeline(command_buffers[frame_index], VK_PIPELINE_BIND_POINT_COMPUTE, compute_pipeline.handle); - - vkCmdDispatch(command_buffers[frame_index], width / 8, height / 8, 1); - - VkImageMemoryBarrier general_to_present_barrier = {}; - general_to_present_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; - general_to_present_barrier.pNext = nullptr; - general_to_present_barrier.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT; - general_to_present_barrier.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT; - general_to_present_barrier.oldLayout = VK_IMAGE_LAYOUT_GENERAL; - general_to_present_barrier.newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; - general_to_present_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - general_to_present_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - general_to_present_barrier.image = swapchain.images[current_image_index].handle; - general_to_present_barrier.subresourceRange = image_subresource_range; - - vkCmdPipelineBarrier( - command_buffers[frame_index], - VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, - VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, - 0, - 0, - nullptr, - 0, - nullptr, - 1, - &general_to_present_barrier - ); - VKRESULT(vkEndCommandBuffer(command_buffers[frame_index])) + api.image_barrier(cmd_buf, VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_COLOR_ATTACHMENT_READ_BIT, swapchain.images[current_image_index]); + api.end_record(cmd_buf); VkPipelineStageFlags wait_stage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; -- cgit v1.3