|
@@ -30,6 +30,7 @@
|
|
|
|
|
|
// CHANGELOG
|
|
// CHANGELOG
|
|
// (minor and older changes stripped away, please see git history for details)
|
|
// (minor and older changes stripped away, please see git history for details)
|
|
|
|
+// 2023-07-04: Vulkan: Added optional support for VK_KHR_dynamic_rendering. User needs to set init_info->UseDynamicRendering = true and init_info->ColorAttachmentFormat.
|
|
// 2023-01-02: Vulkan: Fixed sampler passed to ImGui_ImplVulkan_AddTexture() not being honored + removed a bunch of duplicate code.
|
|
// 2023-01-02: Vulkan: Fixed sampler passed to ImGui_ImplVulkan_AddTexture() not being honored + removed a bunch of duplicate code.
|
|
// 2022-10-11: Using 'nullptr' instead of 'NULL' as per our switch to C++11.
|
|
// 2022-10-11: Using 'nullptr' instead of 'NULL' as per our switch to C++11.
|
|
// 2022-10-04: Vulkan: Added experimental ImGui_ImplVulkan_RemoveTexture() for api symetry. (#914, #5738).
|
|
// 2022-10-04: Vulkan: Added experimental ImGui_ImplVulkan_RemoveTexture() for api symetry. (#914, #5738).
|
|
@@ -213,8 +214,9 @@ IMGUI_VULKAN_FUNC_MAP(IMGUI_VULKAN_FUNC_DEF)
|
|
#endif // VK_NO_PROTOTYPES
|
|
#endif // VK_NO_PROTOTYPES
|
|
|
|
|
|
#if defined(VK_VERSION_1_3) || defined(VK_KHR_dynamic_rendering)
|
|
#if defined(VK_VERSION_1_3) || defined(VK_KHR_dynamic_rendering)
|
|
-static PFN_vkCmdBeginRenderingKHR imgui_vkCmdBeginRenderingKHR;
|
|
|
|
-static PFN_vkCmdEndRenderingKHR imgui_vkCmdEndRenderingKHR;
|
|
|
|
|
|
+#define IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING
|
|
|
|
+static PFN_vkCmdBeginRenderingKHR ImGuiImplVulkanFuncs_vkCmdBeginRenderingKHR;
|
|
|
|
+static PFN_vkCmdEndRenderingKHR ImGuiImplVulkanFuncs_vkCmdEndRenderingKHR;
|
|
#endif
|
|
#endif
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
@@ -846,13 +848,13 @@ static void ImGui_ImplVulkan_CreatePipeline(VkDevice device, const VkAllocationC
|
|
info.renderPass = renderPass;
|
|
info.renderPass = renderPass;
|
|
info.subpass = subpass;
|
|
info.subpass = subpass;
|
|
|
|
|
|
-#if defined(VK_VERSION_1_3) || defined(VK_KHR_dynamic_rendering)
|
|
|
|
|
|
+#ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING
|
|
VkPipelineRenderingCreateInfoKHR pipelineRenderingCreateInfo = {};
|
|
VkPipelineRenderingCreateInfoKHR pipelineRenderingCreateInfo = {};
|
|
pipelineRenderingCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR;
|
|
pipelineRenderingCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR;
|
|
pipelineRenderingCreateInfo.colorAttachmentCount = 1;
|
|
pipelineRenderingCreateInfo.colorAttachmentCount = 1;
|
|
pipelineRenderingCreateInfo.pColorAttachmentFormats = &bd->VulkanInitInfo.ColorAttachmentFormat;
|
|
pipelineRenderingCreateInfo.pColorAttachmentFormats = &bd->VulkanInitInfo.ColorAttachmentFormat;
|
|
-
|
|
|
|
- if (bd->VulkanInitInfo.UseDynamicRendering) {
|
|
|
|
|
|
+ if (bd->VulkanInitInfo.UseDynamicRendering)
|
|
|
|
+ {
|
|
info.pNext = &pipelineRenderingCreateInfo;
|
|
info.pNext = &pipelineRenderingCreateInfo;
|
|
info.renderPass = VK_NULL_HANDLE; // Just make sure it's actually nullptr.
|
|
info.renderPass = VK_NULL_HANDLE; // Just make sure it's actually nullptr.
|
|
}
|
|
}
|
|
@@ -971,9 +973,10 @@ bool ImGui_ImplVulkan_LoadFunctions(PFN_vkVoidFunction(*loader_func)(const ch
|
|
IMGUI_VULKAN_FUNC_MAP(IMGUI_VULKAN_FUNC_LOAD)
|
|
IMGUI_VULKAN_FUNC_MAP(IMGUI_VULKAN_FUNC_LOAD)
|
|
#undef IMGUI_VULKAN_FUNC_LOAD
|
|
#undef IMGUI_VULKAN_FUNC_LOAD
|
|
|
|
|
|
-#if defined(VK_VERSION_1_3) || defined(VK_KHR_dynamic_rendering)
|
|
|
|
- imgui_vkCmdBeginRenderingKHR = reinterpret_cast<PFN_vkCmdBeginRenderingKHR>(loader_func("vkCmdBeginRenderingKHR", user_data));
|
|
|
|
- imgui_vkCmdEndRenderingKHR = reinterpret_cast<PFN_vkCmdEndRenderingKHR>(loader_func("vkCmdEndRenderingKHR", user_data));
|
|
|
|
|
|
+#ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING
|
|
|
|
+ // Manually load those two (see #5446)
|
|
|
|
+ ImGuiImplVulkanFuncs_vkCmdBeginRenderingKHR = reinterpret_cast<PFN_vkCmdBeginRenderingKHR>(loader_func("vkCmdBeginRenderingKHR", user_data));
|
|
|
|
+ ImGuiImplVulkanFuncs_vkCmdEndRenderingKHR = reinterpret_cast<PFN_vkCmdEndRenderingKHR>(loader_func("vkCmdEndRenderingKHR", user_data));
|
|
#endif
|
|
#endif
|
|
#else
|
|
#else
|
|
IM_UNUSED(loader_func);
|
|
IM_UNUSED(loader_func);
|
|
@@ -988,17 +991,17 @@ bool ImGui_ImplVulkan_Init(ImGui_ImplVulkan_InitInfo* info, VkRenderPass rend
|
|
{
|
|
{
|
|
IM_ASSERT(g_FunctionsLoaded && "Need to call ImGui_ImplVulkan_LoadFunctions() if IMGUI_IMPL_VULKAN_NO_PROTOTYPES or VK_NO_PROTOTYPES are set!");
|
|
IM_ASSERT(g_FunctionsLoaded && "Need to call ImGui_ImplVulkan_LoadFunctions() if IMGUI_IMPL_VULKAN_NO_PROTOTYPES or VK_NO_PROTOTYPES are set!");
|
|
|
|
|
|
- if (info->UseDynamicRendering) {
|
|
|
|
-#if defined(VK_VERSION_1_3) || defined(VK_KHR_dynamic_rendering)
|
|
|
|
|
|
+ if (info->UseDynamicRendering)
|
|
|
|
+ {
|
|
|
|
+#ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING
|
|
#ifndef VK_NO_PROTOTYPES
|
|
#ifndef VK_NO_PROTOTYPES
|
|
- imgui_vkCmdBeginRenderingKHR = reinterpret_cast<PFN_vkCmdBeginRenderingKHR>(vkGetInstanceProcAddr(info->Instance, "vkCmdBeginRenderingKHR"));
|
|
|
|
- imgui_vkCmdEndRenderingKHR = reinterpret_cast<PFN_vkCmdEndRenderingKHR>(vkGetInstanceProcAddr(info->Instance, "vkCmdEndRenderingKHR"));
|
|
|
|
|
|
+ ImGuiImplVulkanFuncs_vkCmdBeginRenderingKHR = reinterpret_cast<PFN_vkCmdBeginRenderingKHR>(vkGetInstanceProcAddr(info->Instance, "vkCmdBeginRenderingKHR"));
|
|
|
|
+ ImGuiImplVulkanFuncs_vkCmdEndRenderingKHR = reinterpret_cast<PFN_vkCmdEndRenderingKHR>(vkGetInstanceProcAddr(info->Instance, "vkCmdEndRenderingKHR"));
|
|
#endif
|
|
#endif
|
|
-
|
|
|
|
- IM_ASSERT(imgui_vkCmdBeginRenderingKHR != nullptr);
|
|
|
|
- IM_ASSERT(imgui_vkCmdEndRenderingKHR != nullptr);
|
|
|
|
|
|
+ IM_ASSERT(ImGuiImplVulkanFuncs_vkCmdBeginRenderingKHR != nullptr);
|
|
|
|
+ IM_ASSERT(ImGuiImplVulkanFuncs_vkCmdEndRenderingKHR != nullptr);
|
|
#else
|
|
#else
|
|
- IM_ASSERT(!"Can't use dynamic rendering when neither VK_VERSION_1_3 or VK_KHR_dynamic_rendering is defined.");
|
|
|
|
|
|
+ IM_ASSERT(0 && "Can't use dynamic rendering when neither VK_VERSION_1_3 or VK_KHR_dynamic_rendering is defined.");
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1018,7 +1021,7 @@ bool ImGui_ImplVulkan_Init(ImGui_ImplVulkan_InitInfo* info, VkRenderPass rend
|
|
IM_ASSERT(info->DescriptorPool != VK_NULL_HANDLE);
|
|
IM_ASSERT(info->DescriptorPool != VK_NULL_HANDLE);
|
|
IM_ASSERT(info->MinImageCount >= 2);
|
|
IM_ASSERT(info->MinImageCount >= 2);
|
|
IM_ASSERT(info->ImageCount >= info->MinImageCount);
|
|
IM_ASSERT(info->ImageCount >= info->MinImageCount);
|
|
- if (!info->UseDynamicRendering)
|
|
|
|
|
|
+ if (info->UseDynamicRendering == false)
|
|
IM_ASSERT(render_pass != VK_NULL_HANDLE);
|
|
IM_ASSERT(render_pass != VK_NULL_HANDLE);
|
|
|
|
|
|
bd->VulkanInitInfo = *info;
|
|
bd->VulkanInitInfo = *info;
|
|
@@ -1336,7 +1339,8 @@ void ImGui_ImplVulkanH_CreateWindowSwapChain(VkPhysicalDevice physical_device, V
|
|
vkDestroySwapchainKHR(device, old_swapchain, allocator);
|
|
vkDestroySwapchainKHR(device, old_swapchain, allocator);
|
|
|
|
|
|
// Create the Render Pass
|
|
// Create the Render Pass
|
|
- if (!wd->UseDynamicRendering) {
|
|
|
|
|
|
+ if (wd->UseDynamicRendering == false)
|
|
|
|
+ {
|
|
VkAttachmentDescription attachment = {};
|
|
VkAttachmentDescription attachment = {};
|
|
attachment.format = wd->SurfaceFormat.format;
|
|
attachment.format = wd->SurfaceFormat.format;
|
|
attachment.samples = VK_SAMPLE_COUNT_1_BIT;
|
|
attachment.samples = VK_SAMPLE_COUNT_1_BIT;
|
|
@@ -1398,7 +1402,8 @@ void ImGui_ImplVulkanH_CreateWindowSwapChain(VkPhysicalDevice physical_device, V
|
|
}
|
|
}
|
|
|
|
|
|
// Create Framebuffer
|
|
// Create Framebuffer
|
|
- if (!wd->UseDynamicRendering) {
|
|
|
|
|
|
+ if (wd->UseDynamicRendering == false)
|
|
|
|
+ {
|
|
VkImageView attachment[1];
|
|
VkImageView attachment[1];
|
|
VkFramebufferCreateInfo info = {};
|
|
VkFramebufferCreateInfo info = {};
|
|
info.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
|
|
info.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
|