7 #include "flutter/fml/trace_event.h"
11 #include "third_party/vulkan-deps/vulkan-headers/src/include/vulkan/vulkan_enums.hpp"
21 ANativeWindow* window,
22 const vk::UniqueSurfaceKHR& surface,
27 std::make_shared<android::SurfaceControl>(window,
"ImpellerSurface")),
28 enable_msaa_(enable_msaa) {
29 const auto [caps_result, surface_caps] =
32 if (caps_result == vk::Result::eSuccess) {
33 swapchain_image_count_ =
34 std::clamp(surface_caps.minImageCount + 1u,
35 surface_caps.minImageCount,
36 surface_caps.maxImageCount == 0u
37 ? surface_caps.minImageCount + 1u
38 : surface_caps.maxImageCount
49 return impl_ ? impl_->IsValid() :
false;
58 TRACE_EVENT0(
"impeller", __FUNCTION__);
59 return impl_->AcquireNextDrawable();
66 : vk::Format::eUndefined;
71 std::shared_ptr<CommandBuffer> cmd_buffer)
const {
72 return impl_->AddFinalCommandBuffer(cmd_buffer);
77 if (impl_ && impl_->GetSize() == size) {
80 TRACE_EVENT0(
"impeller", __FUNCTION__);
85 swapchain_image_count_
87 if (!impl || !impl->IsValid()) {
91 impl_ = std::move(impl);
static std::shared_ptr< AHBSwapchainImplVK > Create(const std::weak_ptr< Context > &context, std::weak_ptr< android::SurfaceControl > surface_control, const ISize &size, bool enable_msaa, size_t swapchain_image_count)
Create a swapchain of a specific size whose images will be presented to the provided surface control.
static bool IsAvailableOnPlatform()
void UpdateSurfaceSize(const ISize &size) override
Mark the current swapchain configuration as dirty, forcing it to be recreated on the next frame.
bool IsValid() const override
void AddFinalCommandBuffer(std::shared_ptr< CommandBuffer > cmd_buffer) const override
vk::Format GetSurfaceFormat() const override
~AHBSwapchainVK() override
std::unique_ptr< Surface > AcquireNextDrawable() override
AHBSwapchainVK(const AHBSwapchainVK &)=delete
static ContextVK & Cast(Context &base)
vk::PhysicalDevice GetPhysicalDevice() const
static bool IsAvailableOnPlatform()
static bool IsAvailableOnPlatform()
constexpr vk::Format ToVKImageFormat(PixelFormat format)
static PixelFormat ToPixelFormat(AHardwareBuffer_Format format)