Backends: Vulkan: Custom window surface format with dynamic rendering #6999
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Background
ImGui_ImplVulkan_CreateWindow
currently selects one out of four formats fromVK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_B8G8R8_UNORM, VK_FORMAT_R8G8B8_UNORM
. The selectedwd->SurfaceFormat
is later used to create the swapchain and the frame'sBackbufferView
.The backbuffer view is used in the
VkRenderingAttachmentInfo
when using dynamic rendering. If the selected surface format does not match the format set on the VkPipelineRenderingCreateInfoKHR, a validation error is triggered:In my case, I use
VK_FORMAT_B8G8R8A8_SRGB
asColorAttachmentFormat
when creating the pipeline, and theBackbufferView
defaults toVK_FORMAT_B8G8R8A8_UNORM
, which is invalid.Proposal
To solve this, I propose using the
ColorAttachmentFormat
as the primary requestSurfaceImageFormat when dynamic rendering is enabled, which will cause both the swapchain and the BackbufferView to have the same format as we create the pipeline with.