Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
vulkan
vulkan_swapchain.h
Go to the documentation of this file.
1
// Copyright 2013 The Flutter Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
#ifndef FLUTTER_VULKAN_VULKAN_SWAPCHAIN_H_
6
#define FLUTTER_VULKAN_VULKAN_SWAPCHAIN_H_
7
8
#include <memory>
9
#include <utility>
10
#include <vector>
11
12
#include "flutter/fml/compiler_specific.h"
13
#include "flutter/fml/macros.h"
14
#include "flutter/vulkan/procs/vulkan_handle.h"
15
#include "
third_party/skia/include/core/SkSize.h
"
16
#include "
third_party/skia/include/core/SkSurface.h
"
17
18
namespace
vulkan
{
19
20
class
VulkanProcTable;
21
class
VulkanDevice;
22
class
VulkanSurface;
23
class
VulkanBackbuffer;
24
class
VulkanImage;
25
26
class
VulkanSwapchain
{
27
public
:
28
VulkanSwapchain
(
const
VulkanProcTable
& vk,
29
const
VulkanDevice
&
device
,
30
const
VulkanSurface
&
surface
,
31
GrDirectContext
* skia_context,
32
std::unique_ptr<VulkanSwapchain> old_swapchain,
33
uint32_t
queue_family_index
);
34
35
~VulkanSwapchain
();
36
37
bool
IsValid
()
const
;
38
39
enum class
AcquireStatus
{
40
/// A valid SkSurface was acquired successfully from the swapchain.
41
Success
,
42
/// The underlying surface of the swapchain was permanently lost. This is an
43
/// unrecoverable error. The entire surface must be recreated along with the
44
/// swapchain.
45
ErrorSurfaceLost
,
46
/// The swapchain surface is out-of-date with the underlying surface. The
47
/// swapchain must be recreated.
48
ErrorSurfaceOutOfDate
,
49
};
50
using
AcquireResult
= std::pair<AcquireStatus, sk_sp<SkSurface>>;
51
52
/// Acquire an SkSurface from the swapchain for the caller to render into for
53
/// later submission via |Submit|. There must not be consecutive calls to
54
/// |AcquireFrame| without and interleaving |Submit|.
55
AcquireResult
AcquireSurface
();
56
57
/// Submit a previously acquired. There must not be consecutive calls to
58
/// |Submit| without and interleaving |AcquireFrame|.
59
[[nodiscard]]
bool
Submit
();
60
61
SkISize
GetSize
()
const
;
62
63
#if FML_OS_ANDROID
64
private
:
65
const
VulkanProcTable
& vk;
66
const
VulkanDevice
& device_;
67
VkSurfaceCapabilitiesKHR
capabilities_;
68
VkSurfaceFormatKHR
surface_format_;
69
VulkanHandle<VkSwapchainKHR>
swapchain_;
70
std::vector<std::unique_ptr<VulkanBackbuffer>> backbuffers_;
71
std::vector<std::unique_ptr<VulkanImage>> images_;
72
std::vector<sk_sp<SkSurface>> surfaces_;
73
VkPipelineStageFlagBits
current_pipeline_stage_;
74
size_t
current_backbuffer_index_;
75
size_t
current_image_index_;
76
bool
valid_;
77
78
std::vector<VkImage> GetImages()
const
;
79
80
bool
CreateSwapchainImages(
GrDirectContext
* skia_context,
81
SkColorType
color_type
,
82
const
sk_sp<SkColorSpace>
& color_space,
83
VkImageUsageFlags
usage_flags);
84
85
sk_sp<SkSurface>
CreateSkiaSurface(
GrDirectContext
* skia_context,
86
VkImage
image
,
87
VkImageUsageFlags
usage_flags,
88
const
SkISize
& size,
89
SkColorType
color_type
,
90
sk_sp<SkColorSpace>
color_space)
const
;
91
92
VulkanBackbuffer
* GetNextBackbuffer();
93
#endif
// FML_OS_ANDROID
94
95
FML_DISALLOW_COPY_AND_ASSIGN
(
VulkanSwapchain
);
96
};
97
98
}
// namespace vulkan
99
100
#endif
// FLUTTER_VULKAN_VULKAN_SWAPCHAIN_H_
SkColorType
SkColorType
Definition
SkColorType.h:19
SkSize.h
SkSurface.h
GrDirectContext
Definition
GrDirectContext.h:60
sk_sp
Definition
SkRefCnt.h:220
vulkan::VulkanBackbuffer
Definition
vulkan_backbuffer.h:19
vulkan::VulkanDevice
Definition
vulkan_device.h:19
vulkan::VulkanHandle
Definition
vulkan_handle.h:17
vulkan::VulkanProcTable
Definition
vulkan_proc_table.h:17
vulkan::VulkanSurface
Definition
vulkan_surface.h:18
vulkan::VulkanSwapchain
Definition
vulkan_swapchain.h:26
vulkan::VulkanSwapchain::AcquireSurface
AcquireResult AcquireSurface()
Definition
vulkan_swapchain.cc:334
vulkan::VulkanSwapchain::GetSize
SkISize GetSize() const
Definition
vulkan_swapchain.cc:202
vulkan::VulkanSwapchain::Submit
bool Submit()
Definition
vulkan_swapchain.cc:495
vulkan::VulkanSwapchain::~VulkanSwapchain
~VulkanSwapchain()
vulkan::VulkanSwapchain::IsValid
bool IsValid() const
Definition
vulkan_swapchain.cc:174
vulkan::VulkanSwapchain::AcquireResult
std::pair< AcquireStatus, sk_sp< SkSurface > > AcquireResult
Definition
vulkan_swapchain.h:50
vulkan::VulkanSwapchain::FML_DISALLOW_COPY_AND_ASSIGN
FML_DISALLOW_COPY_AND_ASSIGN(VulkanSwapchain)
vulkan::VulkanSwapchain::AcquireStatus
AcquireStatus
Definition
vulkan_swapchain.h:39
vulkan::VulkanSwapchain::AcquireStatus::ErrorSurfaceLost
@ ErrorSurfaceLost
vulkan::VulkanSwapchain::AcquireStatus::Success
@ Success
A valid SkSurface was acquired successfully from the swapchain.
vulkan::VulkanSwapchain::AcquireStatus::ErrorSurfaceOutOfDate
@ ErrorSurfaceOutOfDate
device
VkDevice device
Definition
main.cc:53
queue_family_index
uint32_t queue_family_index
Definition
main.cc:54
surface
VkSurfaceKHR surface
Definition
main.cc:49
image
sk_sp< SkImage > image
Definition
examples.cpp:29
vulkan
Definition
vulkan_handle.cc:7
color_type
uint32_t color_type
Definition
serialization_callbacks.cc:2
SkISize
Definition
SkSize.h:16
VkSurfaceCapabilitiesKHR
Definition
vulkan_core.h:7648
VkSurfaceFormatKHR
Definition
vulkan_core.h:7661
VkImageUsageFlags
VkFlags VkImageUsageFlags
Definition
vulkan_core.h:2382
VkPipelineStageFlagBits
VkPipelineStageFlagBits
Definition
vulkan_core.h:2434
Generated on Fri Apr 26 2024 06:18:18 for Flutter Engine by
1.9.8