Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
formats_mtl.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_IMPELLER_RENDERER_BACKEND_METAL_FORMATS_MTL_H_
6#define FLUTTER_IMPELLER_RENDERER_BACKEND_METAL_FORMATS_MTL_H_
7
8#include <Metal/Metal.h>
9
10#include <optional>
11
12#include "flutter/fml/build_config.h"
13#include "flutter/fml/macros.h"
18
19namespace impeller {
20
21class RenderTarget;
22
23constexpr PixelFormat FromMTLPixelFormat(MTLPixelFormat format) {
24 switch (format) {
25 case MTLPixelFormatInvalid:
27 case MTLPixelFormatBGRA8Unorm:
29 case MTLPixelFormatBGRA8Unorm_sRGB:
31 case MTLPixelFormatRGBA8Unorm:
33 case MTLPixelFormatRGBA8Unorm_sRGB:
35 case MTLPixelFormatRGBA32Float:
37 case MTLPixelFormatRGBA16Float:
39 case MTLPixelFormatStencil8:
41#if !FML_OS_IOS
42 case MTLPixelFormatDepth24Unorm_Stencil8:
44#endif // FML_OS_IOS
45 case MTLPixelFormatDepth32Float_Stencil8:
47 case MTLPixelFormatBGR10_XR_sRGB:
49 case MTLPixelFormatBGR10_XR:
51 case MTLPixelFormatBGRA10_XR:
53 default:
55 }
57}
58
59/// Safe accessor for MTLPixelFormatDepth24Unorm_Stencil8.
60/// Returns PixelFormat::kUnknown if MTLPixelFormatDepth24Unorm_Stencil8 isn't
61/// supported.
63
64/// Safe accessor for MTLPixelFormatBGR10_XR_sRGB.
65/// Returns PixelFormat::kUnknown if MTLPixelFormatBGR10_XR_sRGB isn't
66/// supported.
67MTLPixelFormat SafeMTLPixelFormatBGR10_XR_sRGB();
68
69/// Safe accessor for MTLPixelFormatBGR10_XR.
70/// Returns PixelFormat::kUnknown if MTLPixelFormatBGR10_XR isn't supported.
71MTLPixelFormat SafeMTLPixelFormatBGR10_XR();
72
73/// Safe accessor for MTLPixelFormatBGRA10_XR.
74/// Returns PixelFormat::kUnknown if MTLPixelFormatBGR10_XR isn't supported.
75MTLPixelFormat SafeMTLPixelFormatBGRA10_XR();
76
77constexpr MTLPixelFormat ToMTLPixelFormat(PixelFormat format) {
78 switch (format) {
80 return MTLPixelFormatInvalid;
82 return MTLPixelFormatA8Unorm;
84 return MTLPixelFormatR8Unorm;
86 return MTLPixelFormatRG8Unorm;
88 return MTLPixelFormatBGRA8Unorm;
90 return MTLPixelFormatBGRA8Unorm_sRGB;
92 return MTLPixelFormatRGBA8Unorm;
94 return MTLPixelFormatRGBA8Unorm_sRGB;
96 return MTLPixelFormatRGBA32Float;
98 return MTLPixelFormatRGBA16Float;
100 return MTLPixelFormatStencil8;
104 return MTLPixelFormatDepth32Float_Stencil8;
111 }
112 return MTLPixelFormatInvalid;
113};
114
115constexpr MTLBlendFactor ToMTLBlendFactor(BlendFactor type) {
116 switch (type) {
118 return MTLBlendFactorZero;
120 return MTLBlendFactorOne;
122 return MTLBlendFactorSourceColor;
124 return MTLBlendFactorOneMinusSourceColor;
126 return MTLBlendFactorSourceAlpha;
128 return MTLBlendFactorOneMinusSourceAlpha;
130 return MTLBlendFactorDestinationColor;
132 return MTLBlendFactorOneMinusDestinationColor;
134 return MTLBlendFactorDestinationAlpha;
136 return MTLBlendFactorOneMinusDestinationAlpha;
138 return MTLBlendFactorSourceAlphaSaturated;
140 return MTLBlendFactorBlendColor;
142 return MTLBlendFactorOneMinusBlendColor;
144 return MTLBlendFactorBlendAlpha;
146 return MTLBlendFactorOneMinusBlendAlpha;
147 }
148 return MTLBlendFactorZero;
149};
150
151constexpr MTLPrimitiveType ToMTLPrimitiveType(PrimitiveType type) {
152 switch (type) {
154 return MTLPrimitiveTypeTriangle;
156 return MTLPrimitiveTypeTriangleStrip;
158 return MTLPrimitiveTypeLine;
160 return MTLPrimitiveTypeLineStrip;
162 return MTLPrimitiveTypePoint;
163 }
164 return MTLPrimitiveTypePoint;
165}
166
167constexpr MTLTriangleFillMode ToMTLTriangleFillMode(PolygonMode mode) {
168 switch (mode) {
170 return MTLTriangleFillModeFill;
172 return MTLTriangleFillModeLines;
173 }
174 return MTLTriangleFillModeFill;
175}
176
177constexpr MTLIndexType ToMTLIndexType(IndexType type) {
178 switch (type) {
180 return MTLIndexTypeUInt16;
181 default:
182 return MTLIndexTypeUInt32;
183 }
184}
185
186constexpr MTLCullMode ToMTLCullMode(CullMode mode) {
187 switch (mode) {
188 case CullMode::kNone:
189 return MTLCullModeNone;
191 return MTLCullModeBack;
193 return MTLCullModeFront;
194 }
195 return MTLCullModeNone;
196}
197
198constexpr MTLBlendOperation ToMTLBlendOperation(BlendOperation type) {
199 switch (type) {
201 return MTLBlendOperationAdd;
203 return MTLBlendOperationSubtract;
205 return MTLBlendOperationReverseSubtract;
206 }
207 return MTLBlendOperationAdd;
208};
209
210constexpr MTLColorWriteMask ToMTLColorWriteMask(ColorWriteMask type) {
211 MTLColorWriteMask mask = MTLColorWriteMaskNone;
212
214 mask |= MTLColorWriteMaskRed;
215 }
216
218 mask |= MTLColorWriteMaskGreen;
219 }
220
222 mask |= MTLColorWriteMaskBlue;
223 }
224
226 mask |= MTLColorWriteMaskAlpha;
227 }
228
229 return mask;
230};
231
232constexpr MTLCompareFunction ToMTLCompareFunction(CompareFunction func) {
233 switch (func) {
235 return MTLCompareFunctionNever;
237 return MTLCompareFunctionLess;
239 return MTLCompareFunctionEqual;
241 return MTLCompareFunctionLessEqual;
243 return MTLCompareFunctionGreater;
245 return MTLCompareFunctionNotEqual;
247 return MTLCompareFunctionGreaterEqual;
249 return MTLCompareFunctionAlways;
250 }
251 return MTLCompareFunctionAlways;
252};
253
254constexpr MTLStencilOperation ToMTLStencilOperation(StencilOperation op) {
255 switch (op) {
257 return MTLStencilOperationKeep;
259 return MTLStencilOperationZero;
261 return MTLStencilOperationReplace;
263 return MTLStencilOperationIncrementClamp;
265 return MTLStencilOperationDecrementClamp;
267 return MTLStencilOperationInvert;
269 return MTLStencilOperationIncrementWrap;
271 return MTLStencilOperationDecrementWrap;
272 }
273 return MTLStencilOperationKeep;
274};
275
276constexpr MTLLoadAction ToMTLLoadAction(LoadAction action) {
277 switch (action) {
279 return MTLLoadActionDontCare;
281 return MTLLoadActionLoad;
283 return MTLLoadActionClear;
284 }
285
286 return MTLLoadActionDontCare;
287}
288
289constexpr LoadAction FromMTLLoadAction(MTLLoadAction action) {
290 switch (action) {
291 case MTLLoadActionDontCare:
293 case MTLLoadActionLoad:
294 return LoadAction::kLoad;
295 case MTLLoadActionClear:
296 return LoadAction::kClear;
297 default:
298 break;
299 }
300
302}
303
304constexpr MTLStoreAction ToMTLStoreAction(StoreAction action) {
305 switch (action) {
307 return MTLStoreActionDontCare;
309 return MTLStoreActionStore;
311 return MTLStoreActionMultisampleResolve;
313 return MTLStoreActionStoreAndMultisampleResolve;
314 }
315 return MTLStoreActionDontCare;
316}
317
318constexpr StoreAction FromMTLStoreAction(MTLStoreAction action) {
319 switch (action) {
320 case MTLStoreActionDontCare:
322 case MTLStoreActionStore:
323 return StoreAction::kStore;
324 case MTLStoreActionMultisampleResolve:
326 case MTLStoreActionStoreAndMultisampleResolve:
328 default:
329 break;
330 }
332}
333
334constexpr MTLSamplerMinMagFilter ToMTLSamplerMinMagFilter(MinMagFilter filter) {
335 switch (filter) {
337 return MTLSamplerMinMagFilterNearest;
339 return MTLSamplerMinMagFilterLinear;
340 }
341 return MTLSamplerMinMagFilterNearest;
342}
343
344constexpr MTLSamplerMipFilter ToMTLSamplerMipFilter(MipFilter filter) {
345 switch (filter) {
347 return MTLSamplerMipFilterNearest;
349 return MTLSamplerMipFilterLinear;
350 }
351 return MTLSamplerMipFilterNotMipmapped;
352}
353
354constexpr MTLSamplerAddressMode ToMTLSamplerAddressMode(
355 SamplerAddressMode mode) {
356 switch (mode) {
358 return MTLSamplerAddressModeClampToEdge;
360 return MTLSamplerAddressModeRepeat;
362 return MTLSamplerAddressModeMirrorRepeat;
364 return MTLSamplerAddressModeClampToZero;
365 }
366 return MTLSamplerAddressModeClampToEdge;
367}
368
369inline MTLClearColor ToMTLClearColor(const Color& color) {
370 return MTLClearColorMake(color.red, color.green, color.blue, color.alpha);
371}
372
373constexpr MTLTextureType ToMTLTextureType(TextureType type) {
374 switch (type) {
376 return MTLTextureType2D;
378 return MTLTextureType2DMultisample;
380 return MTLTextureTypeCube;
383 << "kTextureExternalOES can not be used with the Metal backend.";
384 }
385 return MTLTextureType2D;
386}
387
388MTLRenderPipelineColorAttachmentDescriptor*
390 ColorAttachmentDescriptor descriptor);
391
392MTLDepthStencilDescriptor* ToMTLDepthStencilDescriptor(
393 std::optional<DepthAttachmentDescriptor> depth,
394 std::optional<StencilAttachmentDescriptor> front,
395 std::optional<StencilAttachmentDescriptor> back);
396
397MTLTextureDescriptor* ToMTLTextureDescriptor(const TextureDescriptor& desc);
398
399} // namespace impeller
400
401#endif // FLUTTER_IMPELLER_RENDERER_BACKEND_METAL_FORMATS_MTL_H_
SkColor4f color
uint32_t uint32_t * format
SK_API sk_sp< SkSurface > RenderTarget(GrRecordingContext *context, skgpu::Budgeted budgeted, const SkImageInfo &imageInfo, int sampleCount, GrSurfaceOrigin surfaceOrigin, const SkSurfaceProps *surfaceProps, bool shouldCreateWithMips=false, bool isProtected=false)
PrimitiveType
Decides how backend draws pixels based on input vertices.
Definition formats.h:353
@ kPoint
Draws a point at each input vertex.
constexpr PixelFormat FromMTLPixelFormat(MTLPixelFormat format)
Definition formats_mtl.h:23
@ kNearest
Sample from the nearest mip level.
constexpr MTLColorWriteMask ToMTLColorWriteMask(ColorWriteMask type)
constexpr StoreAction FromMTLStoreAction(MTLStoreAction action)
SamplerAddressMode
Definition formats.h:423
@ kDecal
decal sampling mode is only supported on devices that pass the Capabilities.SupportsDecalSamplerAddre...
constexpr MTLStencilOperation ToMTLStencilOperation(StencilOperation op)
MTLPixelFormat SafeMTLPixelFormatBGR10_XR_sRGB()
PixelFormat
The Pixel formats supported by Impeller. The naming convention denotes the usage of the component,...
Definition formats.h:100
CompareFunction
Definition formats.h:534
@ kEqual
Comparison test passes if new_value == current_value.
@ kLessEqual
Comparison test passes if new_value <= current_value.
@ kGreaterEqual
Comparison test passes if new_value >= current_value.
@ kAlways
Comparison test passes always passes.
@ kLess
Comparison test passes if new_value < current_value.
@ kGreater
Comparison test passes if new_value > current_value.
@ kNotEqual
Comparison test passes if new_value != current_value.
@ kNever
Comparison test never passes.
MTLDepthStencilDescriptor * ToMTLDepthStencilDescriptor(std::optional< DepthAttachmentDescriptor > depth, std::optional< StencilAttachmentDescriptor > front, std::optional< StencilAttachmentDescriptor > back)
StencilOperation
Definition formats.h:553
@ kDecrementWrap
Decrement the current stencil value by 1. If at zero, set to maximum.
@ kSetToReferenceValue
Reset the stencil value to the reference value.
@ kDecrementClamp
Decrement the current stencil value by 1. Clamp it to zero.
@ kZero
Reset the stencil value to zero.
@ kIncrementClamp
Increment the current stencil value by 1. Clamp it to the maximum.
@ kIncrementWrap
Increment the current stencil value by 1. If at maximum, set to zero.
@ kInvert
Perform a logical bitwise invert on the current stencil value.
@ kKeep
Don't modify the current stencil value.
constexpr MTLLoadAction ToMTLLoadAction(LoadAction action)
constexpr MTLSamplerMipFilter ToMTLSamplerMipFilter(MipFilter filter)
constexpr MTLBlendOperation ToMTLBlendOperation(BlendOperation type)
MTLPixelFormat SafeMTLPixelFormatBGR10_XR()
MTLPixelFormat SafeMTLPixelFormatDepth24Unorm_Stencil8()
MTLPixelFormat SafeMTLPixelFormatBGRA10_XR()
constexpr MTLPrimitiveType ToMTLPrimitiveType(PrimitiveType type)
constexpr MTLPixelFormat ToMTLPixelFormat(PixelFormat format)
Definition formats_mtl.h:77
constexpr LoadAction FromMTLLoadAction(MTLLoadAction action)
constexpr MTLSamplerAddressMode ToMTLSamplerAddressMode(SamplerAddressMode mode)
constexpr MTLTextureType ToMTLTextureType(TextureType type)
@ kNearest
Select nearest to the sample point. Most widely supported.
constexpr MTLTriangleFillMode ToMTLTriangleFillMode(PolygonMode mode)
constexpr MTLBlendFactor ToMTLBlendFactor(BlendFactor type)
constexpr MTLIndexType ToMTLIndexType(IndexType type)
MTLRenderPipelineColorAttachmentDescriptor * ToMTLRenderPipelineColorAttachmentDescriptor(ColorAttachmentDescriptor descriptor)
constexpr MTLSamplerMinMagFilter ToMTLSamplerMinMagFilter(MinMagFilter filter)
constexpr MTLCompareFunction ToMTLCompareFunction(CompareFunction func)
constexpr MTLStoreAction ToMTLStoreAction(StoreAction action)
MTLTextureDescriptor * ToMTLTextureDescriptor(const TextureDescriptor &desc)
BlendOperation
Definition formats.h:197
MTLClearColor ToMTLClearColor(const Color &color)
constexpr MTLCullMode ToMTLCullMode(CullMode mode)
#define VALIDATION_LOG
Definition validation.h:73