|
@@ -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.
|
|
|
|
-#ifdef VK_NO_PROTOTYPES
|
|
|
|
|
|
+ // But this would be roughly equivalent to not setting 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
|