@ -33,6 +33,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)
// 2024-04-19: Vulkan: Added convenience support for Volk via IMGUI_IMPL_VULKAN_USE_VOLK define (you can also use IMGUI_IMPL_VULKAN_NO_PROTOTYPES + wrap Volk via ImGui_ImplVulkan_LoadFunctions().)
// 2024-02-14: *BREAKING CHANGE*: Moved RenderPass parameter from ImGui_ImplVulkan_Init() function to ImGui_ImplVulkan_InitInfo structure. Not required when using dynamic rendering.
// 2024-02-14: *BREAKING CHANGE*: Moved RenderPass parameter from ImGui_ImplVulkan_Init() function to ImGui_ImplVulkan_InitInfo structure. Not required when using dynamic rendering.
// 2024-02-12: *BREAKING CHANGE*: Dynamic rendering now require filling PipelineRenderingCreateInfo structure.
// 2024-02-12: *BREAKING CHANGE*: Dynamic rendering now require filling PipelineRenderingCreateInfo structure.
// 2024-01-19: Vulkan: Fixed vkAcquireNextImageKHR() validation errors in VulkanSDK 1.3.275 by allocating one extra semaphore than in-flight frames. (#7236)
// 2024-01-19: Vulkan: Fixed vkAcquireNextImageKHR() validation errors in VulkanSDK 1.3.275 by allocating one extra semaphore than in-flight frames. (#7236)
@ -108,12 +109,13 @@ void ImGui_ImplVulkanH_CreateWindowCommandBuffers(VkPhysicalDevice physical_devi
// Vulkan prototypes for use with custom loaders
// Vulkan prototypes for use with custom loaders
// (see description of IMGUI_IMPL_VULKAN_NO_PROTOTYPES in imgui_impl_vulkan.h
// (see description of IMGUI_IMPL_VULKAN_NO_PROTOTYPES in imgui_impl_vulkan.h
# ifdef VK_NO_PROTOTYPES
# if defined(VK_NO_PROTOTYPES) && !defined(VOLK_H_)
# define IMGUI_IMPL_VULKAN_USE_LOADER
static bool g_FunctionsLoaded = false ;
static bool g_FunctionsLoaded = false ;
# else
# else
static bool g_FunctionsLoaded = true ;
static bool g_FunctionsLoaded = true ;
# endif
# endif
# ifdef VK_NO_PROTOTYPES
# ifdef IMGUI_IMPL_VULKAN_USE_LOADER
# define IMGUI_VULKAN_FUNC_MAP(IMGUI_VULKAN_FUNC_MAP_MACRO) \
# define IMGUI_VULKAN_FUNC_MAP(IMGUI_VULKAN_FUNC_MAP_MACRO) \
IMGUI_VULKAN_FUNC_MAP_MACRO ( vkAllocateCommandBuffers ) \
IMGUI_VULKAN_FUNC_MAP_MACRO ( vkAllocateCommandBuffers ) \
IMGUI_VULKAN_FUNC_MAP_MACRO ( vkAllocateDescriptorSets ) \
IMGUI_VULKAN_FUNC_MAP_MACRO ( vkAllocateDescriptorSets ) \
@ -184,7 +186,7 @@ static bool g_FunctionsLoaded = true;
# define IMGUI_VULKAN_FUNC_DEF(func) static PFN_##func func;
# define IMGUI_VULKAN_FUNC_DEF(func) static PFN_##func func;
IMGUI_VULKAN_FUNC_MAP ( IMGUI_VULKAN_FUNC_DEF )
IMGUI_VULKAN_FUNC_MAP ( IMGUI_VULKAN_FUNC_DEF )
# undef IMGUI_VULKAN_FUNC_DEF
# undef IMGUI_VULKAN_FUNC_DEF
# endif // VK_NO_PROTOTYPES
# endif // IMGUI_IMPL_VULKAN_USE_LOADER
# ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING
# ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING
static PFN_vkCmdBeginRenderingKHR ImGuiImplVulkanFuncs_vkCmdBeginRenderingKHR ;
static PFN_vkCmdBeginRenderingKHR ImGuiImplVulkanFuncs_vkCmdBeginRenderingKHR ;
@ -1048,8 +1050,8 @@ bool ImGui_ImplVulkan_LoadFunctions(PFN_vkVoidFunction(*loader_func)(const ch
// Load function pointers
// Load function pointers
// You can use the default Vulkan loader using:
// You can use the default Vulkan loader using:
// ImGui_ImplVulkan_LoadFunctions([](const char* function_name, void*) { return vkGetInstanceProcAddr(your_vk_isntance, function_name); });
// ImGui_ImplVulkan_LoadFunctions([](const char* function_name, void*) { return vkGetInstanceProcAddr(your_vk_isntance, function_name); });
// But this would be equivalent to not setting VK_NO_PROTOTYPES.
// But this would be roughly equivalent to not setting VK_NO_PROTOTYPES.
# ifdef VK_NO_PROTOTYPES
# ifdef IMGUI_IMPL_VULKAN_USE_LOADER
# define IMGUI_VULKAN_FUNC_LOAD(func) \
# define IMGUI_VULKAN_FUNC_LOAD(func) \
func = reinterpret_cast < decltype ( func ) > ( loader_func ( # func , user_data ) ) ; \
func = reinterpret_cast < decltype ( func ) > ( loader_func ( # func , user_data ) ) ; \
if ( func = = nullptr ) \
if ( func = = nullptr ) \
@ -1078,7 +1080,7 @@ bool ImGui_ImplVulkan_Init(ImGui_ImplVulkan_InitInfo* info)
if ( info - > UseDynamicRendering )
if ( info - > UseDynamicRendering )
{
{
# ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING
# ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING
# ifndef VK_NO_PROTOTYPES
# ifndef IMGUI_IMPL_VULKAN_USE_LOADER
ImGuiImplVulkanFuncs_vkCmdBeginRenderingKHR = reinterpret_cast < PFN_vkCmdBeginRenderingKHR > ( vkGetInstanceProcAddr ( info - > Instance , " vkCmdBeginRenderingKHR " ) ) ;
ImGuiImplVulkanFuncs_vkCmdBeginRenderingKHR = reinterpret_cast < PFN_vkCmdBeginRenderingKHR > ( vkGetInstanceProcAddr ( info - > Instance , " vkCmdBeginRenderingKHR " ) ) ;
ImGuiImplVulkanFuncs_vkCmdEndRenderingKHR = reinterpret_cast < PFN_vkCmdEndRenderingKHR > ( vkGetInstanceProcAddr ( info - > Instance , " vkCmdEndRenderingKHR " ) ) ;
ImGuiImplVulkanFuncs_vkCmdEndRenderingKHR = reinterpret_cast < PFN_vkCmdEndRenderingKHR > ( vkGetInstanceProcAddr ( info - > Instance , " vkCmdEndRenderingKHR " ) ) ;
# endif
# endif