diff options
| author | grm <grm@eyesin.space> | 2026-03-13 22:53:00 +0200 |
|---|---|---|
| committer | grm <grm@eyesin.space> | 2026-03-13 22:53:00 +0200 |
| commit | 8e468a336afc22c5b6dc247719f950a0ad41bbd0 (patch) | |
| tree | c7ff426f04ce362f1c78ea638b78182d513df1fd /src | |
| parent | 21edd2596ff657fc2de61e8848e74cf3c5c9ef01 (diff) | |
| download | cgame-8e468a336afc22c5b6dc247719f950a0ad41bbd0.tar.gz cgame-8e468a336afc22c5b6dc247719f950a0ad41bbd0.tar.bz2 cgame-8e468a336afc22c5b6dc247719f950a0ad41bbd0.zip | |
Fix validation errors
Diffstat (limited to 'src')
| -rw-r--r-- | src/render.c | 85 | ||||
| -rw-r--r-- | src/vksetup.h | 20 |
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, |
