Skip to content

Commit 91d76f7

Browse files
committed
CreateSwapChain using Window size dimensions & VulkanDevice.cpp Cleanup
- Rewrote the Swapchain logic to use the size of the window and to use these dimensions to clamp against the device capabilities. - Also used the push method to add image views - Did some housekeeping in the VulkanDevice.cpp source file to fix warnings that we're being generated
1 parent f7a203d commit 91d76f7

File tree

2 files changed

+24
-27
lines changed

2 files changed

+24
-27
lines changed

ZEngine/ZEngine/Hardwares/VulkanDevice.cpp

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -596,17 +596,17 @@ namespace ZEngine::Hardwares
596596
ZENGINE_CORE_ERROR("{}", pCallbackData->pMessage)
597597
}
598598

599-
if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) == VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT)
599+
if ((messageSeverity & static_cast<decltype(messageSeverity)>(VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT)) == VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT)
600600
{
601601
ZENGINE_CORE_WARN("{}", pCallbackData->pMessage)
602602
}
603603

604-
if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT) == VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT)
604+
if ((messageSeverity & static_cast<decltype(messageSeverity)>(VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT)) == VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT)
605605
{
606606
ZENGINE_CORE_WARN("{}", pCallbackData->pMessage)
607607
}
608608

609-
if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT) == VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT)
609+
if ((messageSeverity & static_cast<decltype(messageSeverity)>(VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT)) == VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT)
610610
{
611611
ZENGINE_CORE_WARN("{}", pCallbackData->pMessage)
612612
}
@@ -831,6 +831,8 @@ namespace ZEngine::Hardwares
831831
dst_access_mask = VK_ACCESS_INDIRECT_COMMAND_READ_BIT;
832832
dst_pipeline_stage = VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT;
833833
break;
834+
case UNKNOWN:
835+
break;
834836
}
835837

836838
VkBufferMemoryBarrier bufMemBarrier2 = {VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER};
@@ -1058,26 +1060,23 @@ namespace ZEngine::Hardwares
10581060
{
10591061
VkSurfaceCapabilitiesKHR capabilities{};
10601062
vkGetPhysicalDeviceSurfaceCapabilitiesKHR(PhysicalDevice, Surface, &capabilities);
1061-
if (capabilities.currentExtent.width != std::numeric_limits<uint32_t>::max())
1062-
{
1063-
SwapchainImageWidth = capabilities.currentExtent.width;
1064-
SwapchainImageHeight = capabilities.currentExtent.height;
1065-
}
1063+
SwapchainImageWidth = std::clamp(CurrentWindow->GetWidth(), capabilities.minImageExtent.width, capabilities.maxImageExtent.width);
1064+
SwapchainImageHeight = std::clamp(CurrentWindow->GetHeight(), capabilities.minImageExtent.height, capabilities.maxImageExtent.height);
10661065

1067-
auto min_image_count = std::clamp(capabilities.minImageCount, capabilities.minImageCount + 1, capabilities.maxImageCount);
1066+
auto min_image_count = SwapchainImageCount < capabilities.minImageCount ? capabilities.minImageCount : SwapchainImageCount;
10681067
VkSwapchainCreateInfoKHR swapchain_create_info = {
10691068
.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR, .pNext = nullptr, .surface = Surface, .minImageCount = min_image_count, .imageFormat = SurfaceFormat.format, .imageColorSpace = SurfaceFormat.colorSpace, .imageExtent = VkExtent2D{.width = SwapchainImageWidth, .height = SwapchainImageHeight},
10701069
.imageArrayLayers = 1, .imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT, .preTransform = capabilities.currentTransform, .compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR, .presentMode = PresentMode, .clipped = VK_TRUE
10711070
};
10721071

10731072
if (SwapchainImageViews.capacity() <= 0)
10741073
{
1075-
SwapchainImageViews.init(Arena, SwapchainImageCount, SwapchainImageCount);
1074+
SwapchainImageViews.init(Arena, SwapchainImageCount);
10761075
}
10771076

10781077
if (SwapchainFramebuffers.capacity() <= 0)
10791078
{
1080-
SwapchainFramebuffers.init(Arena, SwapchainImageCount, SwapchainImageCount);
1079+
SwapchainFramebuffers.init(Arena, SwapchainImageCount);
10811080
}
10821081

10831082
auto scratch = ZGetScratch(Arena);
@@ -1096,18 +1095,12 @@ namespace ZEngine::Hardwares
10961095

10971096
ZENGINE_VALIDATE_ASSERT(vkCreateSwapchainKHR(LogicalDevice, &swapchain_create_info, nullptr, &SwapchainHandle) == VK_SUCCESS, "Failed to create Swapchain")
10981097

1099-
uint32_t image_count = 0;
1100-
ZENGINE_VALIDATE_ASSERT(vkGetSwapchainImagesKHR(LogicalDevice, SwapchainHandle, &image_count, nullptr) == VK_SUCCESS, "Failed to get Images count from Swapchain")
1101-
1102-
if (image_count < SwapchainImageCount)
1103-
{
1104-
ZENGINE_CORE_WARN("Max Swapchain image count supported is {}, but requested {}", image_count, SwapchainImageCount);
1105-
SwapchainImageCount = image_count;
1106-
ZENGINE_CORE_WARN("Swapchain image count has changed from {} to {}", SwapchainImageCount, image_count);
1107-
}
1098+
ZENGINE_VALIDATE_ASSERT(vkGetSwapchainImagesKHR(LogicalDevice, SwapchainHandle, &SwapchainImageCount, nullptr) == VK_SUCCESS, "Failed to get Images count from Swapchain")
11081099

11091100
Array<VkImage> SwapchainImages = {};
1101+
11101102
SwapchainImages.init(scratch.Arena, SwapchainImageCount, SwapchainImageCount);
1103+
11111104
ZENGINE_VALIDATE_ASSERT(vkGetSwapchainImagesKHR(LogicalDevice, SwapchainHandle, &SwapchainImageCount, SwapchainImages.data()) == VK_SUCCESS, "Failed to get VkImages from Swapchain")
11121105

11131106
/*Transition Image from Undefined to Present_src*/
@@ -1134,12 +1127,12 @@ namespace ZEngine::Hardwares
11341127

11351128
for (int i = 0; i < SwapchainImageCount; ++i)
11361129
{
1137-
SwapchainImageViews[i] = CreateImageView(SwapchainImages[i], SurfaceFormat.format, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT);
1130+
SwapchainImageViews.push(CreateImageView(SwapchainImages[i], SurfaceFormat.format, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT));
11381131

11391132
Array<VkImageView> fb_images_views;
11401133
fb_images_views.init(scratch.Arena, 1);
11411134
fb_images_views.push(SwapchainImageViews[i]);
1142-
SwapchainFramebuffers[i] = CreateFramebuffer(ArrayView{fb_images_views}, SwapchainAttachment->GetHandle(), SwapchainImageWidth, SwapchainImageHeight);
1135+
SwapchainFramebuffers.push(CreateFramebuffer(ArrayView{fb_images_views}, SwapchainAttachment->GetHandle(), SwapchainImageWidth, SwapchainImageHeight));
11431136
}
11441137

11451138
ZReleaseScratch(scratch);
@@ -1418,6 +1411,8 @@ namespace ZEngine::Hardwares
14181411
vkFreeDescriptorSets(LogicalDevice, reinterpret_cast<VkDescriptorPool>(res_handle.Data1), 1, &ds);
14191412
break;
14201413
}
1414+
case DeviceResourceType::RESOURCE_COUNT:
1415+
break;
14211416
}
14221417

14231418
DirtyResources.Remove(handle);
@@ -2095,7 +2090,7 @@ namespace ZEngine::Hardwares
20952090

20962091
void Image2DBuffer::Dispose()
20972092
{
2098-
if (this && m_buffer_image)
2093+
if (m_buffer_image)
20992094
{
21002095
Device->EnqueueBufferImageForDeletion(m_buffer_image);
21012096
m_buffer_image = {};
@@ -2233,6 +2228,8 @@ namespace ZEngine::Hardwares
22332228
dst_access_mask = VK_ACCESS_INDIRECT_COMMAND_READ_BIT;
22342229
dst_pipeline_stage = VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT;
22352230
break;
2231+
case UNKNOWN:
2232+
break;
22362233
}
22372234

22382235
auto command_buffer = m_device->GetInstantCommandBuffer(Rendering::QueueType::GRAPHIC_QUEUE);

repoConfiguration.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
"ShaderC": {
77
"MinimumVersion": "11.1.0",
88
"Windows": {
9-
"Url": "https://storage.googleapis.com/shaderc/artifacts/prod/graphics_shader_compiler/shaderc/windows/continuous_release_2019/26/20230810-123915/install.zip"
9+
"Url": "https://storage.googleapis.com/shaderc/artifacts/prod/graphics_shader_compiler/shaderc/windows/vs2022_amd64_release_continuous/29/20260112-140346/install.zip"
1010
},
1111
"macOS": {
12-
"Url": "https://storage.googleapis.com/shaderc/artifacts/prod/graphics_shader_compiler/shaderc/macos/continuous_clang_release/472/20240708-061139/install.tgz"
12+
"Url": "https://storage.googleapis.com/shaderc/artifacts/prod/graphics_shader_compiler/shaderc/macos/continuous_clang_release/519/20260112-140351/install.tgz"
1313
},
1414
"Linux": {
15-
"Url": "https://storage.googleapis.com/shaderc/artifacts/prod/graphics_shader_compiler/shaderc/linux/continuous_gcc_release/500/20250807-100822/install.tgz"
15+
"Url": "https://storage.googleapis.com/shaderc/artifacts/prod/graphics_shader_compiler/shaderc/linux/continuous_clang_release/510/20260112-140346/install.tgz"
1616
}
1717
},
1818
"GlslangValidator": {
@@ -24,7 +24,7 @@
2424
},
2525
"LLVM": {
2626
"Version": "20.1.7",
27-
"MaximumVersion": "20.2.0"
27+
"MaximumVersion": "22.0.0"
2828
}
2929
}
3030
}

0 commit comments

Comments
 (0)