From ebba777c7b616682c5ab4c1f675ff28a047a8727 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Sun, 11 Jun 2023 21:14:48 -0700 Subject: [PATCH 1/4] [Impeller] Correct attachment description for offscreen MSAA resolve. --- impeller/renderer/backend/vulkan/render_pass_vk.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/impeller/renderer/backend/vulkan/render_pass_vk.cc b/impeller/renderer/backend/vulkan/render_pass_vk.cc index 9806fb675a460..b7c787da8504f 100644 --- a/impeller/renderer/backend/vulkan/render_pass_vk.cc +++ b/impeller/renderer/backend/vulkan/render_pass_vk.cc @@ -49,6 +49,8 @@ static vk::AttachmentDescription CreateAttachmentDescription( if (desc.storage_mode == StorageMode::kDeviceTransient) { store_action = StoreAction::kDontCare; + } else if (resolve_texture) { + store_action = StoreAction::kStore; } const auto attachment_desc = @@ -95,7 +97,7 @@ SharedHandleVK RenderPassVK::CreateVKRenderPass( if (color.resolve_texture) { resolve_refs[bind_point] = vk::AttachmentReference{static_cast(attachments.size()), - vk::ImageLayout::eColorAttachmentOptimal}; + vk::ImageLayout::ePresentSrcKHR}; attachments.emplace_back(CreateAttachmentDescription(color, true)); } } From 4150f30b138115ad380cc3570bd075007981f1fc Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Sun, 11 Jun 2023 22:11:20 -0700 Subject: [PATCH 2/4] correct image layout --- impeller/renderer/backend/vulkan/formats_vk.h | 7 +++++-- impeller/renderer/backend/vulkan/render_pass_vk.cc | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/impeller/renderer/backend/vulkan/formats_vk.h b/impeller/renderer/backend/vulkan/formats_vk.h index da2aa616eea19..70508438cc544 100644 --- a/impeller/renderer/backend/vulkan/formats_vk.h +++ b/impeller/renderer/backend/vulkan/formats_vk.h @@ -427,7 +427,8 @@ constexpr vk::AttachmentDescription CreateAttachmentDescription( SampleCount sample_count, LoadAction load_action, StoreAction store_action, - vk::ImageLayout current_layout) { + vk::ImageLayout current_layout, + bool resolve_texture = false) { vk::AttachmentDescription vk_attachment; vk_attachment.format = ToVKImageFormat(format); @@ -466,7 +467,9 @@ constexpr vk::AttachmentDescription CreateAttachmentDescription( switch (kind) { case AttachmentKind::kColor: vk_attachment.initialLayout = current_layout; - vk_attachment.finalLayout = vk::ImageLayout::eColorAttachmentOptimal; + vk_attachment.finalLayout = + resolve_texture ? vk::ImageLayout::ePresentSrcKHR + : vk::ImageLayout::eColorAttachmentOptimal; break; case AttachmentKind::kDepth: case AttachmentKind::kStencil: diff --git a/impeller/renderer/backend/vulkan/render_pass_vk.cc b/impeller/renderer/backend/vulkan/render_pass_vk.cc index b7c787da8504f..21fb5f49ecd0f 100644 --- a/impeller/renderer/backend/vulkan/render_pass_vk.cc +++ b/impeller/renderer/backend/vulkan/render_pass_vk.cc @@ -58,7 +58,8 @@ static vk::AttachmentDescription CreateAttachmentDescription( desc.sample_count, // load_action, // store_action, // - current_layout // + current_layout, // + resolve_texture // ); // Instead of transitioning layouts manually using barriers, we are going to From af28e2292f9a5b586d52f8453fcd12361bbca643 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Mon, 12 Jun 2023 09:51:32 -0700 Subject: [PATCH 3/4] switch to eGeneral --- impeller/renderer/backend/vulkan/formats_vk.h | 2 +- impeller/renderer/backend/vulkan/render_pass_vk.cc | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/impeller/renderer/backend/vulkan/formats_vk.h b/impeller/renderer/backend/vulkan/formats_vk.h index 70508438cc544..9e8cec5e6b4ba 100644 --- a/impeller/renderer/backend/vulkan/formats_vk.h +++ b/impeller/renderer/backend/vulkan/formats_vk.h @@ -468,7 +468,7 @@ constexpr vk::AttachmentDescription CreateAttachmentDescription( case AttachmentKind::kColor: vk_attachment.initialLayout = current_layout; vk_attachment.finalLayout = - resolve_texture ? vk::ImageLayout::ePresentSrcKHR + resolve_texture ? vk::ImageLayout::eGeneral : vk::ImageLayout::eColorAttachmentOptimal; break; case AttachmentKind::kDepth: diff --git a/impeller/renderer/backend/vulkan/render_pass_vk.cc b/impeller/renderer/backend/vulkan/render_pass_vk.cc index 21fb5f49ecd0f..cb78e891e6999 100644 --- a/impeller/renderer/backend/vulkan/render_pass_vk.cc +++ b/impeller/renderer/backend/vulkan/render_pass_vk.cc @@ -96,9 +96,8 @@ SharedHandleVK RenderPassVK::CreateVKRenderPass( vk::ImageLayout::eColorAttachmentOptimal}; attachments.emplace_back(CreateAttachmentDescription(color)); if (color.resolve_texture) { - resolve_refs[bind_point] = - vk::AttachmentReference{static_cast(attachments.size()), - vk::ImageLayout::ePresentSrcKHR}; + resolve_refs[bind_point] = vk::AttachmentReference{ + static_cast(attachments.size()), vk::ImageLayout::eGeneral}; attachments.emplace_back(CreateAttachmentDescription(color, true)); } } From a7d148dd4effc49d71f11827e21b976911c667ae Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Mon, 12 Jun 2023 10:10:31 -0700 Subject: [PATCH 4/4] switch both to eGeneral --- impeller/renderer/backend/vulkan/formats_vk.h | 7 ++----- impeller/renderer/backend/vulkan/render_pass_vk.cc | 3 +-- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/impeller/renderer/backend/vulkan/formats_vk.h b/impeller/renderer/backend/vulkan/formats_vk.h index 9e8cec5e6b4ba..1791e9b8123b7 100644 --- a/impeller/renderer/backend/vulkan/formats_vk.h +++ b/impeller/renderer/backend/vulkan/formats_vk.h @@ -427,8 +427,7 @@ constexpr vk::AttachmentDescription CreateAttachmentDescription( SampleCount sample_count, LoadAction load_action, StoreAction store_action, - vk::ImageLayout current_layout, - bool resolve_texture = false) { + vk::ImageLayout current_layout) { vk::AttachmentDescription vk_attachment; vk_attachment.format = ToVKImageFormat(format); @@ -467,9 +466,7 @@ constexpr vk::AttachmentDescription CreateAttachmentDescription( switch (kind) { case AttachmentKind::kColor: vk_attachment.initialLayout = current_layout; - vk_attachment.finalLayout = - resolve_texture ? vk::ImageLayout::eGeneral - : vk::ImageLayout::eColorAttachmentOptimal; + vk_attachment.finalLayout = vk::ImageLayout::eGeneral; break; case AttachmentKind::kDepth: case AttachmentKind::kStencil: diff --git a/impeller/renderer/backend/vulkan/render_pass_vk.cc b/impeller/renderer/backend/vulkan/render_pass_vk.cc index cb78e891e6999..001ae3c1fea8a 100644 --- a/impeller/renderer/backend/vulkan/render_pass_vk.cc +++ b/impeller/renderer/backend/vulkan/render_pass_vk.cc @@ -58,8 +58,7 @@ static vk::AttachmentDescription CreateAttachmentDescription( desc.sample_count, // load_action, // store_action, // - current_layout, // - resolve_texture // + current_layout // ); // Instead of transitioning layouts manually using barriers, we are going to