Flutter Engine
The Flutter Engine
capabilities.cc
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
7
8namespace impeller {
9
11
13
14class StandardCapabilities final : public Capabilities {
15 public:
16 // |Capabilities|
17 ~StandardCapabilities() override = default;
18
19 // |Capabilities|
20 bool SupportsOffscreenMSAA() const override {
21 return supports_offscreen_msaa_;
22 }
23
24 // |Capabilities|
25 bool SupportsImplicitResolvingMSAA() const override { return false; }
26
27 // |Capabilities|
28 bool SupportsSSBO() const override { return supports_ssbo_; }
29
30 // |Capabilities|
31 bool SupportsTextureToTextureBlits() const override {
32 return supports_texture_to_texture_blits_;
33 }
34
35 // |Capabilities|
36 bool SupportsFramebufferFetch() const override {
37 return supports_framebuffer_fetch_;
38 }
39
40 // |Capabilities|
41 bool SupportsCompute() const override { return supports_compute_; }
42
43 // |Capabilities|
44 bool SupportsComputeSubgroups() const override {
45 return supports_compute_subgroups_;
46 }
47
48 // |Capabilities|
49 bool SupportsReadFromResolve() const override {
50 return supports_read_from_resolve_;
51 }
52
53 // |Capabilities|
54 bool SupportsDecalSamplerAddressMode() const override {
55 return supports_decal_sampler_address_mode_;
56 }
57
58 // |Capabilities|
60 return default_color_format_;
61 }
62
63 // |Capabilities|
65 return default_stencil_format_;
66 }
67
68 // |Capabilities|
70 return default_depth_stencil_format_;
71 }
72
73 // |Capabilities|
74 bool SupportsDeviceTransientTextures() const override {
75 return supports_device_transient_textures_;
76 }
77
78 // |Capabilities|
80 return default_glyph_atlas_format_;
81 }
82
83 private:
84 StandardCapabilities(bool supports_offscreen_msaa,
85 bool supports_ssbo,
86 bool supports_texture_to_texture_blits,
87 bool supports_framebuffer_fetch,
88 bool supports_compute,
89 bool supports_compute_subgroups,
90 bool supports_read_from_resolve,
91 bool supports_decal_sampler_address_mode,
92 bool supports_device_transient_textures,
93 PixelFormat default_color_format,
94 PixelFormat default_stencil_format,
95 PixelFormat default_depth_stencil_format,
96 PixelFormat default_glyph_atlas_format)
97 : supports_offscreen_msaa_(supports_offscreen_msaa),
98 supports_ssbo_(supports_ssbo),
99 supports_texture_to_texture_blits_(supports_texture_to_texture_blits),
100 supports_framebuffer_fetch_(supports_framebuffer_fetch),
101 supports_compute_(supports_compute),
102 supports_compute_subgroups_(supports_compute_subgroups),
103 supports_read_from_resolve_(supports_read_from_resolve),
104 supports_decal_sampler_address_mode_(
105 supports_decal_sampler_address_mode),
106 supports_device_transient_textures_(supports_device_transient_textures),
107 default_color_format_(default_color_format),
108 default_stencil_format_(default_stencil_format),
109 default_depth_stencil_format_(default_depth_stencil_format),
110 default_glyph_atlas_format_(default_glyph_atlas_format) {}
111
113
114 bool supports_offscreen_msaa_ = false;
115 bool supports_ssbo_ = false;
116 bool supports_texture_to_texture_blits_ = false;
117 bool supports_framebuffer_fetch_ = false;
118 bool supports_compute_ = false;
119 bool supports_compute_subgroups_ = false;
120 bool supports_read_from_resolve_ = false;
121 bool supports_decal_sampler_address_mode_ = false;
122 bool supports_device_transient_textures_ = false;
123 PixelFormat default_color_format_ = PixelFormat::kUnknown;
124 PixelFormat default_stencil_format_ = PixelFormat::kUnknown;
125 PixelFormat default_depth_stencil_format_ = PixelFormat::kUnknown;
126 PixelFormat default_glyph_atlas_format_ = PixelFormat::kUnknown;
127
129
130 StandardCapabilities& operator=(const StandardCapabilities&) = delete;
131};
132
134
136
138 supports_offscreen_msaa_ = value;
139 return *this;
140}
141
143 supports_ssbo_ = value;
144 return *this;
145}
146
148 bool value) {
149 supports_texture_to_texture_blits_ = value;
150 return *this;
151}
152
154 bool value) {
155 supports_framebuffer_fetch_ = value;
156 return *this;
157}
158
160 supports_compute_ = value;
161 return *this;
162}
163
165 bool value) {
166 supports_compute_subgroups_ = value;
167 return *this;
168}
169
172 default_color_format_ = value;
173 return *this;
174}
175
178 default_stencil_format_ = value;
179 return *this;
180}
181
184 default_depth_stencil_format_ = value;
185 return *this;
186}
187
189 bool read_from_resolve) {
190 supports_read_from_resolve_ = read_from_resolve;
191 return *this;
192}
193
195 bool value) {
196 supports_decal_sampler_address_mode_ = value;
197 return *this;
198}
199
201 bool value) {
202 supports_device_transient_textures_ = value;
203 return *this;
204}
205
208 default_glyph_atlas_format_ = value;
209 return *this;
210}
211
212std::unique_ptr<Capabilities> CapabilitiesBuilder::Build() {
213 return std::unique_ptr<StandardCapabilities>(new StandardCapabilities( //
214 supports_offscreen_msaa_, //
215 supports_ssbo_, //
216 supports_texture_to_texture_blits_, //
217 supports_framebuffer_fetch_, //
218 supports_compute_, //
219 supports_compute_subgroups_, //
220 supports_read_from_resolve_, //
221 supports_decal_sampler_address_mode_, //
222 supports_device_transient_textures_, //
223 default_color_format_.value_or(PixelFormat::kUnknown), //
224 default_stencil_format_.value_or(PixelFormat::kUnknown), //
225 default_depth_stencil_format_.value_or(PixelFormat::kUnknown), //
226 default_glyph_atlas_format_.value_or(PixelFormat::kUnknown) //
227 ));
228}
229
230} // namespace impeller
CapabilitiesBuilder & SetDefaultColorFormat(PixelFormat value)
CapabilitiesBuilder & SetSupportsComputeSubgroups(bool value)
CapabilitiesBuilder & SetSupportsTextureToTextureBlits(bool value)
CapabilitiesBuilder & SetDefaultStencilFormat(PixelFormat value)
CapabilitiesBuilder & SetSupportsDeviceTransientTextures(bool value)
CapabilitiesBuilder & SetSupportsFramebufferFetch(bool value)
CapabilitiesBuilder & SetSupportsDecalSamplerAddressMode(bool value)
CapabilitiesBuilder & SetSupportsOffscreenMSAA(bool value)
CapabilitiesBuilder & SetSupportsSSBO(bool value)
CapabilitiesBuilder & SetDefaultGlyphAtlasFormat(PixelFormat value)
CapabilitiesBuilder & SetSupportsCompute(bool value)
std::unique_ptr< Capabilities > Build()
CapabilitiesBuilder & SetDefaultDepthStencilFormat(PixelFormat value)
CapabilitiesBuilder & SetSupportsReadFromResolve(bool value)
~StandardCapabilities() override=default
bool SupportsReadFromResolve() const override
Whether the context backend supports binding the current RenderPass attachments. This is supported if...
Definition: capabilities.cc:49
PixelFormat GetDefaultDepthStencilFormat() const override
Returns a supported PixelFormat for textures that store both a stencil and depth component....
Definition: capabilities.cc:69
bool SupportsComputeSubgroups() const override
Whether the context backend supports configuring ComputePass command subgroups.
Definition: capabilities.cc:44
bool SupportsOffscreenMSAA() const override
Whether the context backend supports attaching offscreen MSAA color/stencil textures.
Definition: capabilities.cc:20
bool SupportsTextureToTextureBlits() const override
Whether the context backend supports blitting from one texture region to another texture region (via ...
Definition: capabilities.cc:31
bool SupportsFramebufferFetch() const override
Whether the context backend is able to support pipelines with shaders that read from the framebuffer ...
Definition: capabilities.cc:36
PixelFormat GetDefaultGlyphAtlasFormat() const override
Returns the default pixel format for the alpha bitmap glyph atlas.
Definition: capabilities.cc:79
PixelFormat GetDefaultStencilFormat() const override
Returns a supported PixelFormat for textures that store stencil information. May include a depth chan...
Definition: capabilities.cc:64
bool SupportsCompute() const override
Whether the context backend supports ComputePass.
Definition: capabilities.cc:41
bool SupportsSSBO() const override
Whether the context backend supports binding Shader Storage Buffer Objects (SSBOs) to pipelines.
Definition: capabilities.cc:28
bool SupportsDeviceTransientTextures() const override
Whether the context backend supports allocating StorageMode::kDeviceTransient (aka "memoryless") text...
Definition: capabilities.cc:74
bool SupportsImplicitResolvingMSAA() const override
Whether the context backend supports multisampled rendering to the on-screen surface without requirin...
Definition: capabilities.cc:25
PixelFormat GetDefaultColorFormat() const override
Returns a supported PixelFormat for textures that store 4-channel colors (red/green/blue/alpha).
Definition: capabilities.cc:59
bool SupportsDecalSamplerAddressMode() const override
Whether the context backend supports SamplerAddressMode::Decal.
Definition: capabilities.cc:54
uint8_t value
PixelFormat
The Pixel formats supported by Impeller. The naming convention denotes the usage of the component,...
Definition: formats.h:99