From 26aa81a8b1546ab5805602dde49a29c06699c6d5 Mon Sep 17 00:00:00 2001 From: ocornut Date: Thu, 4 Sep 2025 16:39:16 +0200 Subject: [PATCH] Backends: Vulkan: misc amends (makes ImGui_ImplVulkan_MainPipelineCreateInfo::PipelineRenderingCreateInfo consistent with InitInfo). (#8110, #8111, #8053) --- backends/imgui_impl_vulkan.cpp | 15 +++++++-------- backends/imgui_impl_vulkan.h | 6 +++--- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/backends/imgui_impl_vulkan.cpp b/backends/imgui_impl_vulkan.cpp index 23bf7b8ce..db23aad49 100644 --- a/backends/imgui_impl_vulkan.cpp +++ b/backends/imgui_impl_vulkan.cpp @@ -1102,19 +1102,18 @@ bool ImGui_ImplVulkan_CreateDeviceObjects() } // Create pipeline - const VkPipelineRenderingCreateInfoKHR* p_dynamic_rendering_create_info = nullptr; + if (v->RenderPass #ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING - if (v->UseDynamicRendering && v->PipelineRenderingCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR) - p_dynamic_rendering_create_info = &v->PipelineRenderingCreateInfo; + || (v->UseDynamicRendering && v->PipelineRenderingCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR) #endif - if (v->RenderPass || p_dynamic_rendering_create_info != nullptr) + ) { ImGui_ImplVulkan_MainPipelineCreateInfo mp_info = {}; mp_info.RenderPass = v->RenderPass; mp_info.Subpass = v->Subpass; mp_info.MSAASamples = v->MSAASamples; #ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING - mp_info.pDynamicRendering = p_dynamic_rendering_create_info; + mp_info.PipelineRenderingCreateInfo = v->PipelineRenderingCreateInfo; #endif ImGui_ImplVulkan_CreateMainPipeline(mp_info); } @@ -1155,11 +1154,11 @@ void ImGui_ImplVulkan_CreateMainPipeline(const ImGui_ImplVulkan_MainPipelineCrea v->MSAASamples = info.MSAASamples; v->Subpass = info.Subpass; - VkPipelineRenderingCreateInfoKHR* pipeline_rendering_create_info = nullptr; + const VkPipelineRenderingCreateInfoKHR* pipeline_rendering_create_info = nullptr; #ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING - if (info.pDynamicRendering) + if (v->UseDynamicRendering) { - v->PipelineRenderingCreateInfo = *info.pDynamicRendering; + v->PipelineRenderingCreateInfo = info.PipelineRenderingCreateInfo; pipeline_rendering_create_info = &v->PipelineRenderingCreateInfo; } #endif diff --git a/backends/imgui_impl_vulkan.h b/backends/imgui_impl_vulkan.h index e4503261e..fbbd9e2bd 100644 --- a/backends/imgui_impl_vulkan.h +++ b/backends/imgui_impl_vulkan.h @@ -98,13 +98,13 @@ struct ImGui_ImplVulkan_InitInfo // Need to explicitly enable VK_KHR_dynamic_rendering extension to use this, even for Vulkan 1.3. bool UseDynamicRendering; #ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING - VkPipelineRenderingCreateInfoKHR PipelineRenderingCreateInfo; // Optional, valid if .sType == VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR + VkPipelineRenderingCreateInfoKHR PipelineRenderingCreateInfo; // Optional, valid if .sType == VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR #endif // (Optional) Allocation, Debugging const VkAllocationCallbacks* Allocator; void (*CheckVkResultFn)(VkResult err); - VkDeviceSize MinAllocationSize; // Minimum allocation size. Set to 1024*1024 to satisfy zealous best practices validation layer and waste a little memory. + VkDeviceSize MinAllocationSize; // Minimum allocation size. Set to 1024*1024 to satisfy zealous best practices validation layer and waste a little memory. }; // Follow "Getting Started" link and check examples/ folder to learn about using backends! @@ -123,7 +123,7 @@ struct ImGui_ImplVulkan_MainPipelineCreateInfo uint32_t Subpass = 0; VkSampleCountFlagBits MSAASamples = {}; #ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING - const VkPipelineRenderingCreateInfoKHR* pDynamicRendering = nullptr; + VkPipelineRenderingCreateInfoKHR PipelineRenderingCreateInfo; // Optional, valid if .sType == VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR #endif }; IMGUI_IMPL_API void ImGui_ImplVulkan_CreateMainPipeline(const ImGui_ImplVulkan_MainPipelineCreateInfo& info); // (render_pass xor (p_dynamic_rendering && p_dynamic_rendering is correct (sType and pNext))