Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 8dd3ba8

Browse files
authored
[Impeller] Refactor KHR swapchains to make it easy to reuse backend agnostic components. (#52002)
Just a refactor to make room for the AHB swapchains implementation while also ensuring that the MSAA and depth-stencil transients memoization as well as the existing surface implementation can be reused by that swapchain backend. This does a few major things: * Make an abstract implementation of swapchains, SwapchainVK. This currently has KHRSwapchainVK as its sole subclass but will soon have AHBSwapchainVK. * There is no more per swapchain backend memoization of the MSAA and depth-stencil textures. This is now moved to SwapchainTransientsVK and can be shared by both backend. This leads into the next change. This also avoids the round trip of the textures first being set on each swapchain image and then accessed to create the onscreen renderpass. Now the transients can access the textures directly. * KHRSurfaceVK no longer wraps a KHRSwapchainImageVK. Instead, it deals with TextureSourceVKs (which used to be the base class of KHRSwapchainImageVK). This surface can now magically work with AHBTextureSourceVK since they have a common base class. Since the surface is now backend agnostic, it has been renamed to SurfaceVK. There is one minor functional change over the previous implementation thought. Earlier, the transients would be created and cached when the swapchain was resized. Now, the same will happen when the first surface frame is attempted to be acquired at the new size. This effectively means that swapchain resized should be faster and do less work if no frames are rendered at the new size (continuous window resized maybe).
1 parent e23ca36 commit 8dd3ba8

19 files changed

+435
-282
lines changed

ci/licenses_golden/licenses_flutter

+12-4
Original file line numberDiff line numberDiff line change
@@ -40292,14 +40292,18 @@ ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/shared_object_vk.cc +
4029240292
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/shared_object_vk.h + ../../../flutter/LICENSE
4029340293
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/surface_context_vk.cc + ../../../flutter/LICENSE
4029440294
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/surface_context_vk.h + ../../../flutter/LICENSE
40295-
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/khr/khr_surface_vk.cc + ../../../flutter/LICENSE
40296-
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/khr/khr_surface_vk.h + ../../../flutter/LICENSE
4029740295
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/khr/khr_swapchain_image_vk.cc + ../../../flutter/LICENSE
4029840296
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/khr/khr_swapchain_image_vk.h + ../../../flutter/LICENSE
4029940297
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/khr/khr_swapchain_impl_vk.cc + ../../../flutter/LICENSE
4030040298
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/khr/khr_swapchain_impl_vk.h + ../../../flutter/LICENSE
4030140299
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/khr/khr_swapchain_vk.cc + ../../../flutter/LICENSE
4030240300
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/khr/khr_swapchain_vk.h + ../../../flutter/LICENSE
40301+
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/surface_vk.cc + ../../../flutter/LICENSE
40302+
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/surface_vk.h + ../../../flutter/LICENSE
40303+
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/swapchain_transients_vk.cc + ../../../flutter/LICENSE
40304+
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/swapchain_transients_vk.h + ../../../flutter/LICENSE
40305+
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/swapchain_vk.cc + ../../../flutter/LICENSE
40306+
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/swapchain_vk.h + ../../../flutter/LICENSE
4030340307
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/texture_source_vk.cc + ../../../flutter/LICENSE
4030440308
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/texture_source_vk.h + ../../../flutter/LICENSE
4030540309
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/texture_vk.cc + ../../../flutter/LICENSE
@@ -43169,14 +43173,18 @@ FILE: ../../../flutter/impeller/renderer/backend/vulkan/shared_object_vk.cc
4316943173
FILE: ../../../flutter/impeller/renderer/backend/vulkan/shared_object_vk.h
4317043174
FILE: ../../../flutter/impeller/renderer/backend/vulkan/surface_context_vk.cc
4317143175
FILE: ../../../flutter/impeller/renderer/backend/vulkan/surface_context_vk.h
43172-
FILE: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/khr/khr_surface_vk.cc
43173-
FILE: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/khr/khr_surface_vk.h
4317443176
FILE: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/khr/khr_swapchain_image_vk.cc
4317543177
FILE: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/khr/khr_swapchain_image_vk.h
4317643178
FILE: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/khr/khr_swapchain_impl_vk.cc
4317743179
FILE: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/khr/khr_swapchain_impl_vk.h
4317843180
FILE: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/khr/khr_swapchain_vk.cc
4317943181
FILE: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/khr/khr_swapchain_vk.h
43182+
FILE: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/surface_vk.cc
43183+
FILE: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/surface_vk.h
43184+
FILE: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/swapchain_transients_vk.cc
43185+
FILE: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/swapchain_transients_vk.h
43186+
FILE: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/swapchain_vk.cc
43187+
FILE: ../../../flutter/impeller/renderer/backend/vulkan/swapchain/swapchain_vk.h
4318043188
FILE: ../../../flutter/impeller/renderer/backend/vulkan/texture_source_vk.cc
4318143189
FILE: ../../../flutter/impeller/renderer/backend/vulkan/texture_source_vk.h
4318243190
FILE: ../../../flutter/impeller/renderer/backend/vulkan/texture_vk.cc

impeller/playground/backend/vulkan/playground_impl_vk.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#include "impeller/renderer/backend/vulkan/context_vk.h"
2121
#include "impeller/renderer/backend/vulkan/formats_vk.h"
2222
#include "impeller/renderer/backend/vulkan/surface_context_vk.h"
23-
#include "impeller/renderer/backend/vulkan/swapchain/khr/khr_surface_vk.h"
23+
#include "impeller/renderer/backend/vulkan/swapchain/surface_vk.h"
2424
#include "impeller/renderer/backend/vulkan/texture_vk.h"
2525
#include "impeller/renderer/vk/compute_shaders_vk.h"
2626
#include "impeller/scene/shaders/vk/scene_shaders_vk.h"

impeller/renderer/backend/vulkan/BUILD.gn

+6-2
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,18 @@ impeller_component("vulkan") {
100100
"shared_object_vk.h",
101101
"surface_context_vk.cc",
102102
"surface_context_vk.h",
103-
"swapchain/khr/khr_surface_vk.cc",
104-
"swapchain/khr/khr_surface_vk.h",
105103
"swapchain/khr/khr_swapchain_image_vk.cc",
106104
"swapchain/khr/khr_swapchain_image_vk.h",
107105
"swapchain/khr/khr_swapchain_impl_vk.cc",
108106
"swapchain/khr/khr_swapchain_impl_vk.h",
109107
"swapchain/khr/khr_swapchain_vk.cc",
110108
"swapchain/khr/khr_swapchain_vk.h",
109+
"swapchain/surface_vk.cc",
110+
"swapchain/surface_vk.h",
111+
"swapchain/swapchain_transients_vk.cc",
112+
"swapchain/swapchain_transients_vk.h",
113+
"swapchain/swapchain_vk.cc",
114+
"swapchain/swapchain_vk.h",
111115
"texture_source_vk.cc",
112116
"texture_source_vk.h",
113117
"texture_vk.cc",

impeller/renderer/backend/vulkan/surface_context_vk.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ void SurfaceContextVK::Shutdown() {
6464

6565
bool SurfaceContextVK::SetWindowSurface(vk::UniqueSurfaceKHR surface,
6666
const ISize& size) {
67-
auto swapchain = KHRSwapchainVK::Create(parent_, std::move(surface), size);
67+
auto swapchain = SwapchainVK::Create(parent_, std::move(surface), size);
6868
if (!swapchain) {
6969
VALIDATION_LOG << "Could not create swapchain.";
7070
return false;

impeller/renderer/backend/vulkan/surface_context_vk.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ namespace impeller {
1616

1717
class ContextVK;
1818
class Surface;
19-
class KHRSwapchainVK;
19+
class SwapchainVK;
2020

2121
/// For Vulkan, there is both a ContextVK that implements Context and a
2222
/// SurfaceContextVK that also implements Context and takes a ContextVK as its
@@ -90,7 +90,7 @@ class SurfaceContextVK : public Context,
9090

9191
private:
9292
std::shared_ptr<ContextVK> parent_;
93-
std::shared_ptr<KHRSwapchainVK> swapchain_;
93+
std::shared_ptr<SwapchainVK> swapchain_;
9494
};
9595

9696
} // namespace impeller

impeller/renderer/backend/vulkan/swapchain/khr/khr_surface_vk.cc

-104
This file was deleted.

impeller/renderer/backend/vulkan/swapchain/khr/khr_surface_vk.h

-49
This file was deleted.

impeller/renderer/backend/vulkan/swapchain/khr/khr_swapchain_image_vk.cc

+5-25
Original file line numberDiff line numberDiff line change
@@ -35,31 +35,6 @@ bool KHRSwapchainImageVK::IsValid() const {
3535
return is_valid_;
3636
}
3737

38-
std::shared_ptr<Texture> KHRSwapchainImageVK::GetMSAATexture() const {
39-
return msaa_texture_;
40-
}
41-
42-
std::shared_ptr<Texture> KHRSwapchainImageVK::GetDepthStencilTexture() const {
43-
return depth_stencil_texture_;
44-
}
45-
46-
void KHRSwapchainImageVK::SetMSAATexture(std::shared_ptr<Texture> texture) {
47-
msaa_texture_ = std::move(texture);
48-
}
49-
50-
void KHRSwapchainImageVK::SetDepthStencilTexture(
51-
std::shared_ptr<Texture> texture) {
52-
depth_stencil_texture_ = std::move(texture);
53-
}
54-
55-
PixelFormat KHRSwapchainImageVK::GetPixelFormat() const {
56-
return desc_.format;
57-
}
58-
59-
ISize KHRSwapchainImageVK::GetSize() const {
60-
return desc_.size;
61-
}
62-
6338
// |TextureSourceVK|
6439
vk::Image KHRSwapchainImageVK::GetImage() const {
6540
return image_;
@@ -75,4 +50,9 @@ vk::ImageView KHRSwapchainImageVK::GetRenderTargetView() const {
7550
return image_view_.get();
7651
}
7752

53+
// |TextureSourceVK|
54+
bool KHRSwapchainImageVK::IsSwapchainImage() const {
55+
return true;
56+
}
57+
7858
} // namespace impeller

impeller/renderer/backend/vulkan/swapchain/khr/khr_swapchain_image_vk.h

+3-16
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
#include "impeller/renderer/backend/vulkan/formats_vk.h"
1010
#include "impeller/renderer/backend/vulkan/texture_source_vk.h"
1111
#include "impeller/renderer/backend/vulkan/vk.h"
12-
#include "vulkan/vulkan_handles.hpp"
1312

1413
namespace impeller {
1514

@@ -24,33 +23,21 @@ class KHRSwapchainImageVK final : public TextureSourceVK {
2423

2524
bool IsValid() const;
2625

27-
PixelFormat GetPixelFormat() const;
28-
29-
ISize GetSize() const;
30-
3126
// |TextureSourceVK|
3227
vk::Image GetImage() const override;
3328

34-
std::shared_ptr<Texture> GetMSAATexture() const;
35-
36-
std::shared_ptr<Texture> GetDepthStencilTexture() const;
37-
3829
// |TextureSourceVK|
3930
vk::ImageView GetImageView() const override;
4031

32+
// |TextureSourceVK|
4133
vk::ImageView GetRenderTargetView() const override;
4234

43-
void SetMSAATexture(std::shared_ptr<Texture> texture);
44-
45-
void SetDepthStencilTexture(std::shared_ptr<Texture> texture);
46-
47-
bool IsSwapchainImage() const override { return true; }
35+
// |TextureSourceVK|
36+
bool IsSwapchainImage() const override;
4837

4938
private:
5039
vk::Image image_ = VK_NULL_HANDLE;
5140
vk::UniqueImageView image_view_ = {};
52-
std::shared_ptr<Texture> msaa_texture_;
53-
std::shared_ptr<Texture> depth_stencil_texture_;
5441
bool is_valid_ = false;
5542

5643
KHRSwapchainImageVK(const KHRSwapchainImageVK&) = delete;

0 commit comments

Comments
 (0)