summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/render.c85
-rw-r--r--src/vksetup.h20
2 files changed, 86 insertions, 19 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);
diff --git a/src/vksetup.h b/src/vksetup.h
index 923083b..505bdec 100644
--- a/src/vksetup.h
+++ b/src/vksetup.h
@@ -46,6 +46,9 @@
#include <shaderc/shaderc.h>
+#define VMA_DEBUG_LOG(...) printf(__VA_ARGS__)
+#define VMA_DEBUG_INITIALIZE_ALLOCATIONS 1
+#define VMA_DEBUG_MARGIN 16
#include "vk_mem_alloc.h"
#include "../lib/cglm/include/cglm/cglm.h"
@@ -119,8 +122,8 @@ const char *const validation_layers[] = {
};
const uint32_t validation_layer_count = VK_ARRAY_LEN(validation_layers);
-const char *const device_extensions[] = {
- VK_KHR_SWAPCHAIN_EXTENSION_NAME,
+const char* const device_extensions[] = {
+ VK_KHR_SWAPCHAIN_EXTENSION_NAME,
};
const uint32_t deviceExtensionCount = VK_ARRAY_LEN(device_extensions);
@@ -709,16 +712,23 @@ _vulkan_create_logical_device(vks_context* vk)
deviceFeatures.robustBufferAccess = VK_FALSE;
#endif
- VkPhysicalDeviceDynamicRenderingFeaturesKHR dynamic_rendering_feature = {
- .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR,
+ /* VkPhysicalDeviceDynamicRenderingFeaturesKHR dynamic_rendering_feature = { */
+ /* .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR, */
+ /* .dynamicRendering = VK_TRUE, */
+ /* }; */
+
+ VkPhysicalDeviceVulkan13Features features13 = {
+ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES,
+ .synchronization2 = VK_TRUE,
.dynamicRendering = VK_TRUE,
+ .pNext = NULL,
};
VkDeviceCreateInfo createInfo = {
.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
.pQueueCreateInfos = &queueCreateInfo,
.queueCreateInfoCount = 1,
- .pNext = &dynamic_rendering_feature,
+ .pNext = &features13,
.pEnabledFeatures = &deviceFeatures,
.enabledExtensionCount = deviceExtensionCount,
.ppEnabledExtensionNames = device_extensions,