mirror of
https://github.com/stenzek/duckstation.git
synced 2025-06-09 04:55:35 +00:00
VulkanDevice: Only create swap chain framebuffer without dynamic rendering
This commit is contained in:
parent
ee750b44e3
commit
dfacf9e8db
@ -534,13 +534,13 @@ bool VulkanSwapChain::CreateSwapChainImages(VulkanDevice& dev, Error* error)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vulkan::FramebufferBuilder fbb;
|
|
||||||
m_images.reserve(image_count);
|
m_images.reserve(image_count);
|
||||||
m_current_image = 0;
|
m_current_image = 0;
|
||||||
for (u32 i = 0; i < image_count; i++)
|
for (u32 i = 0; i < image_count; i++)
|
||||||
{
|
{
|
||||||
Image& image = m_images.emplace_back();
|
Image& image = m_images.emplace_back();
|
||||||
image.image = images[i];
|
image.image = images[i];
|
||||||
|
image.framebuffer = VK_NULL_HANDLE;
|
||||||
|
|
||||||
const VkImageViewCreateInfo view_info = {
|
const VkImageViewCreateInfo view_info = {
|
||||||
.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
|
||||||
@ -560,15 +560,19 @@ bool VulkanSwapChain::CreateSwapChainImages(VulkanDevice& dev, Error* error)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
fbb.AddAttachment(image.view);
|
if (!dev.GetOptionalExtensions().vk_khr_dynamic_rendering)
|
||||||
fbb.SetRenderPass(render_pass);
|
|
||||||
fbb.SetSize(m_window_info.surface_width, m_window_info.surface_height, 1);
|
|
||||||
if ((image.framebuffer = fbb.Create(vkdev)) == VK_NULL_HANDLE)
|
|
||||||
{
|
{
|
||||||
Error::SetStringView(error, "Failed to create swap chain image framebuffer.");
|
Vulkan::FramebufferBuilder fbb;
|
||||||
vkDestroyImageView(vkdev, image.view, nullptr);
|
fbb.AddAttachment(image.view);
|
||||||
m_images.pop_back();
|
fbb.SetRenderPass(render_pass);
|
||||||
return false;
|
fbb.SetSize(m_window_info.surface_width, m_window_info.surface_height, 1);
|
||||||
|
if ((image.framebuffer = fbb.Create(vkdev)) == VK_NULL_HANDLE)
|
||||||
|
{
|
||||||
|
Error::SetStringView(error, "Failed to create swap chain image framebuffer.");
|
||||||
|
vkDestroyImageView(vkdev, image.view, nullptr);
|
||||||
|
m_images.pop_back();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -621,7 +625,8 @@ void VulkanSwapChain::DestroySwapChainImages()
|
|||||||
for (const auto& it : m_images)
|
for (const auto& it : m_images)
|
||||||
{
|
{
|
||||||
// don't defer view destruction, images are no longer valid
|
// don't defer view destruction, images are no longer valid
|
||||||
vkDestroyFramebuffer(vkdev, it.framebuffer, nullptr);
|
if (it.framebuffer != VK_NULL_HANDLE)
|
||||||
|
vkDestroyFramebuffer(vkdev, it.framebuffer, nullptr);
|
||||||
vkDestroyImageView(vkdev, it.view, nullptr);
|
vkDestroyImageView(vkdev, it.view, nullptr);
|
||||||
}
|
}
|
||||||
m_images.clear();
|
m_images.clear();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user