diff options
Diffstat (limited to 'src/render.c')
| -rw-r--r-- | src/render.c | 85 |
1 files changed, 71 insertions, 14 deletions
diff --git a/src/render.c b/src/render.c index 0fd2561..e33ee41 100644 --- a/src/render.c +++ b/src/render.c @@ -670,6 +670,31 @@ recordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex) depthAttachment.storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; depthAttachment.clearValue.depthStencil = (VkClearDepthStencilValue){1.0f, 0u}; + VkImageMemoryBarrier2 barrier = {0}; + barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2; + + barrier.srcStageMask = VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT; + barrier.srcAccessMask = 0; + + barrier.dstStageMask = VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT; + barrier.dstAccessMask = VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; + + barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + barrier.newLayout = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL; + + barrier.image = s.vk.depth_image.handle; + barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT; + barrier.subresourceRange.levelCount = 1; + barrier.subresourceRange.layerCount = 1; + + VkDependencyInfo dependencyInfo = {0}; + dependencyInfo.sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO; + + dependencyInfo.imageMemoryBarrierCount = 1; + dependencyInfo.pImageMemoryBarriers = &barrier; + + vkCmdPipelineBarrier2(commandBuffer, &dependencyInfo); + VkRenderingInfo renderingInfo = {}; renderingInfo.sType = VK_STRUCTURE_TYPE_RENDERING_INFO; renderingInfo.renderArea = @@ -679,7 +704,38 @@ recordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex) renderingInfo.pColorAttachments = &colorAttachment; renderingInfo.pDepthAttachment = &depthAttachment; + VkImageMemoryBarrier2 barrier_2 = {0}; + barrier_2.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2; + + barrier_2.srcStageMask = VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT; + barrier_2.srcAccessMask = 0; + + barrier_2.dstStageMask = VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT; + barrier_2.dstAccessMask = + VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT | + VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT; + + barrier_2.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + barrier_2.newLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + barrier_2.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + barrier_2.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + + barrier_2.image = s.vk.color_image.handle; + + barrier_2.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + barrier_2.subresourceRange.baseMipLevel = 0; + barrier_2.subresourceRange.levelCount = 1; + barrier_2.subresourceRange.baseArrayLayer = 0; + barrier_2.subresourceRange.layerCount = 1; + VkDependencyInfo dependencyInfo_2 = {0}; + dependencyInfo_2.sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO; + dependencyInfo_2.imageMemoryBarrierCount = 1; + dependencyInfo_2.pImageMemoryBarriers = &barrier_2; + + vkCmdPipelineBarrier2(commandBuffer, &dependencyInfo_2); + + vkCmdBeginRendering(commandBuffer, &renderingInfo); vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, @@ -1038,21 +1094,22 @@ handle_input(bool * quit) vkDeviceWaitIdle(s.vk.device); free(s.vertices); free(s.indices); - /* if (!strcmp(s.model_path, "assets/human.obj")) */ - /* strcpy(s.model_path, "assets/viking_room.obj"); */ - /* else if (!strcmp(s.model_path, "assets/viking_room.obj")) */ - /* strcpy(s.model_path, "assets/monkey.obj"); */ - /* else */ - /* strcpy(s.model_path, "assets/human.obj"); */ - - if (toggle) { + if (!strcmp(s.model_path, "assets/human.obj")) strcpy(s.model_path, "assets/viking_room.obj"); - load_model_obj(); - toggle = 0; - } else { - toggle = 1; - load_model_gltf(); - } + else if (!strcmp(s.model_path, "assets/viking_room.obj")) + strcpy(s.model_path, "assets/monkey.obj"); + else + strcpy(s.model_path, "assets/human.obj"); + + load_model_obj(); + /* if (toggle) { */ + /* strcpy(s.model_path, "assets/viking_room.obj"); */ + /* load_model_obj(); */ + /* toggle = 0; */ + /* } else { */ + /* toggle = 1; */ + /* load_model_gltf(); */ + /* } */ vkDestroyBuffer(s.vk.device, s.vertex_buffer.handle, NULL); vkFreeMemory(s.vk.device, s.vertex_buffer.memory, NULL); |
