summaryrefslogtreecommitdiffstats
path: root/src/render.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/render.c')
-rw-r--r--src/render.c85
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);