mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-11-04 09:44:29 +00:00 
			
		
		
		
	Backends: Vulkan: use PipelineRenderingCreateInfo for dynamic rendering (#7166, #6855, #5446, #5037)
This commit is contained in:
		@@ -33,10 +33,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// 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-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)
 | 
				
			||||||
//  2024-01-11: Vulkan: Fixed vkMapMemory() calls unnecessarily using full buffer size (#3957). Fixed MinAllocationSize handing (#7189).
 | 
					//  2024-01-11: Vulkan: Fixed vkMapMemory() calls unnecessarily using full buffer size (#3957). Fixed MinAllocationSize handing (#7189).
 | 
				
			||||||
//  2024-01-03: Vulkan: Added MinAllocationSize field in ImGui_ImplVulkan_InitInfo to workaround zealous "best practice" validation layer. (#7189, #4238)
 | 
					//  2024-01-03: Vulkan: Added MinAllocationSize field in ImGui_ImplVulkan_InitInfo to workaround zealous "best practice" validation layer. (#7189, #4238)
 | 
				
			||||||
//  2024-01-03: Vulkan: Stoped creating command pools with VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT as we don't reset them.
 | 
					//  2024-01-03: Vulkan: Stopped creating command pools with VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT as we don't reset them.
 | 
				
			||||||
//  2023-11-29: Vulkan: Fixed mismatching allocator passed to vkCreateCommandPool() vs vkDestroyCommandPool(). (#7075)
 | 
					//  2023-11-29: Vulkan: Fixed mismatching allocator passed to vkCreateCommandPool() vs vkDestroyCommandPool(). (#7075)
 | 
				
			||||||
//  2023-11-10: *BREAKING CHANGE*: Removed parameter from ImGui_ImplVulkan_CreateFontsTexture(): backend now creates its own command-buffer to upload fonts.
 | 
					//  2023-11-10: *BREAKING CHANGE*: Removed parameter from ImGui_ImplVulkan_CreateFontsTexture(): backend now creates its own command-buffer to upload fonts.
 | 
				
			||||||
//              *BREAKING CHANGE*: Removed ImGui_ImplVulkan_DestroyFontUploadObjects() which is now unecessary as we create and destroy those objects in the backend.
 | 
					//              *BREAKING CHANGE*: Removed ImGui_ImplVulkan_DestroyFontUploadObjects() which is now unecessary as we create and destroy those objects in the backend.
 | 
				
			||||||
@@ -953,13 +954,11 @@ static void ImGui_ImplVulkan_CreatePipeline(VkDevice device, const VkAllocationC
 | 
				
			|||||||
    info.subpass = subpass;
 | 
					    info.subpass = subpass;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING
 | 
					#ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING
 | 
				
			||||||
    VkPipelineRenderingCreateInfoKHR pipelineRenderingCreateInfo = {};
 | 
					    IM_ASSERT(bd->VulkanInitInfo.PipelineRenderingCreateInfo.sType == VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR && "PipelineRenderingCreateInfo sType must be VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR");
 | 
				
			||||||
    pipelineRenderingCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR;
 | 
					    IM_ASSERT(bd->VulkanInitInfo.PipelineRenderingCreateInfo.pNext == nullptr && "PipelineRenderingCreateInfo pNext must be NULL");
 | 
				
			||||||
    pipelineRenderingCreateInfo.colorAttachmentCount = 1;
 | 
					 | 
				
			||||||
    pipelineRenderingCreateInfo.pColorAttachmentFormats = &bd->VulkanInitInfo.ColorAttachmentFormat;
 | 
					 | 
				
			||||||
    if (bd->VulkanInitInfo.UseDynamicRendering)
 | 
					    if (bd->VulkanInitInfo.UseDynamicRendering)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        info.pNext = &pipelineRenderingCreateInfo;
 | 
					        info.pNext = &bd->VulkanInitInfo.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.
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,6 +54,9 @@
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Initialization data, for ImGui_ImplVulkan_Init()
 | 
					// Initialization data, for ImGui_ImplVulkan_Init()
 | 
				
			||||||
 | 
					// - VkDescriptorPool should be created with VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT,
 | 
				
			||||||
 | 
					//   and must contain a pool size large enough to hold an ImGui VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptor.
 | 
				
			||||||
 | 
					// - When using dynamic rendering, set UseDynamicRendering=true and fill PipelineRenderingCreateInfo structure.
 | 
				
			||||||
// [Please zero-clear before use!]
 | 
					// [Please zero-clear before use!]
 | 
				
			||||||
struct ImGui_ImplVulkan_InitInfo
 | 
					struct ImGui_ImplVulkan_InitInfo
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -62,18 +65,21 @@ struct ImGui_ImplVulkan_InitInfo
 | 
				
			|||||||
    VkDevice                        Device;
 | 
					    VkDevice                        Device;
 | 
				
			||||||
    uint32_t                        QueueFamily;
 | 
					    uint32_t                        QueueFamily;
 | 
				
			||||||
    VkQueue                         Queue;
 | 
					    VkQueue                         Queue;
 | 
				
			||||||
    VkPipelineCache                 PipelineCache;
 | 
					    VkDescriptorPool                DescriptorPool;               // See requirements in note above
 | 
				
			||||||
    VkDescriptorPool                DescriptorPool;
 | 
					 | 
				
			||||||
    uint32_t                        Subpass;
 | 
					 | 
				
			||||||
    uint32_t                        MinImageCount;                // >= 2
 | 
					    uint32_t                        MinImageCount;                // >= 2
 | 
				
			||||||
    uint32_t                        ImageCount;                   // >= MinImageCount
 | 
					    uint32_t                        ImageCount;                   // >= MinImageCount
 | 
				
			||||||
    VkSampleCountFlagBits           MSAASamples;            // >= VK_SAMPLE_COUNT_1_BIT (0 -> default to VK_SAMPLE_COUNT_1_BIT)
 | 
					    VkSampleCountFlagBits           MSAASamples;                  // 0 defaults to VK_SAMPLE_COUNT_1_BIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Dynamic Rendering (Optional)
 | 
					    // (Optional)
 | 
				
			||||||
    bool                            UseDynamicRendering;    // Need to explicitly enable VK_KHR_dynamic_rendering extension to use this, even for Vulkan 1.3.
 | 
					    VkPipelineCache                 PipelineCache;
 | 
				
			||||||
    VkFormat                        ColorAttachmentFormat;  // Required for dynamic rendering
 | 
					    uint32_t                        Subpass;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Allocation, Debugging
 | 
					    // (Optional) Dynamic Rendering
 | 
				
			||||||
 | 
					    // Need to explicitly enable VK_KHR_dynamic_rendering extension to use this, even for Vulkan 1.3.
 | 
				
			||||||
 | 
					    bool                            UseDynamicRendering;
 | 
				
			||||||
 | 
					    VkPipelineRenderingCreateInfoKHR PipelineRenderingCreateInfo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // (Optional) Allocation, Debugging
 | 
				
			||||||
    const VkAllocationCallbacks*    Allocator;
 | 
					    const VkAllocationCallbacks*    Allocator;
 | 
				
			||||||
    void                            (*CheckVkResultFn)(VkResult err);
 | 
					    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.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,6 +39,13 @@ HOW TO UPDATE?
 | 
				
			|||||||
 VERSION 1.90.3 WIP (In Progress)
 | 
					 VERSION 1.90.3 WIP (In Progress)
 | 
				
			||||||
-----------------------------------------------------------------------
 | 
					-----------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Breaking changes:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Backends: Vulkan: Using dynamic rendering now require filling the PipelineRenderingCreateInfo
 | 
				
			||||||
 | 
					  structure in ImGui_ImplVulkan_InitInfo, allowing to configure color/depth/stencil formats.
 | 
				
			||||||
 | 
					  Removed ColorAttachmentFormat field previously provided for dynamic rendering.
 | 
				
			||||||
 | 
					  (#7166, #6855, #5446, #5037) [@shawnhatori]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Other changes:
 | 
					Other changes:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Menus, Popups: fixed menus and popups with child window flag erroneously not displaying
 | 
					- Menus, Popups: fixed menus and popups with child window flag erroneously not displaying
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user