Flutter Impeller
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"
14 #include "impeller/core/formats.h"
17 
18 namespace impeller {
19 
20 class RenderTarget;
21 
22 constexpr PixelFormat FromMTLPixelFormat(MTLPixelFormat format) {
23  switch (format) {
24  case MTLPixelFormatInvalid:
25  return PixelFormat::kUnknown;
26  case MTLPixelFormatBGRA8Unorm:
28  case MTLPixelFormatBGRA8Unorm_sRGB:
30  case MTLPixelFormatRGBA8Unorm:
32  case MTLPixelFormatRGBA8Unorm_sRGB:
34  case MTLPixelFormatRGBA32Float:
36  case MTLPixelFormatRGBA16Float:
38  case MTLPixelFormatStencil8:
39  return PixelFormat::kS8UInt;
40 #if !FML_OS_IOS
41  case MTLPixelFormatDepth24Unorm_Stencil8:
43 #endif // FML_OS_IOS
44  case MTLPixelFormatDepth32Float_Stencil8:
46  case MTLPixelFormatBGR10_XR_sRGB:
48  case MTLPixelFormatBGR10_XR:
50  case MTLPixelFormatBGRA10_XR:
52  default:
53  return PixelFormat::kUnknown;
54  }
55  return PixelFormat::kUnknown;
56 }
57 
58 /// Safe accessor for MTLPixelFormatDepth24Unorm_Stencil8.
59 /// Returns PixelFormat::kUnknown if MTLPixelFormatDepth24Unorm_Stencil8 isn't
60 /// supported.
62 
63 /// Safe accessor for MTLPixelFormatBGR10_XR_sRGB.
64 /// Returns PixelFormat::kUnknown if MTLPixelFormatBGR10_XR_sRGB isn't
65 /// supported.
66 MTLPixelFormat SafeMTLPixelFormatBGR10_XR_sRGB();
67 
68 /// Safe accessor for MTLPixelFormatBGR10_XR.
69 /// Returns PixelFormat::kUnknown if MTLPixelFormatBGR10_XR isn't supported.
70 MTLPixelFormat SafeMTLPixelFormatBGR10_XR();
71 
72 /// Safe accessor for MTLPixelFormatBGRA10_XR.
73 /// Returns PixelFormat::kUnknown if MTLPixelFormatBGR10_XR isn't supported.
74 MTLPixelFormat SafeMTLPixelFormatBGRA10_XR();
75 
76 constexpr MTLPixelFormat ToMTLPixelFormat(PixelFormat format) {
77  switch (format) {
79  return MTLPixelFormatInvalid;
81  return MTLPixelFormatA8Unorm;
83  return MTLPixelFormatR8Unorm;
85  return MTLPixelFormatRG8Unorm;
87  return MTLPixelFormatBGRA8Unorm;
89  return MTLPixelFormatBGRA8Unorm_sRGB;
91  return MTLPixelFormatRGBA8Unorm;
93  return MTLPixelFormatRGBA8Unorm_sRGB;
95  return MTLPixelFormatRGBA32Float;
97  return MTLPixelFormatRGBA16Float;
99  return MTLPixelFormatStencil8;
103  return MTLPixelFormatDepth32Float_Stencil8;
110  }
111  return MTLPixelFormatInvalid;
112 };
113 
114 constexpr MTLBlendFactor ToMTLBlendFactor(BlendFactor type) {
115  switch (type) {
116  case BlendFactor::kZero:
117  return MTLBlendFactorZero;
118  case BlendFactor::kOne:
119  return MTLBlendFactorOne;
121  return MTLBlendFactorSourceColor;
123  return MTLBlendFactorOneMinusSourceColor;
125  return MTLBlendFactorSourceAlpha;
127  return MTLBlendFactorOneMinusSourceAlpha;
129  return MTLBlendFactorDestinationColor;
131  return MTLBlendFactorOneMinusDestinationColor;
133  return MTLBlendFactorDestinationAlpha;
135  return MTLBlendFactorOneMinusDestinationAlpha;
137  return MTLBlendFactorSourceAlphaSaturated;
139  return MTLBlendFactorBlendColor;
141  return MTLBlendFactorOneMinusBlendColor;
143  return MTLBlendFactorBlendAlpha;
145  return MTLBlendFactorOneMinusBlendAlpha;
146  }
147  return MTLBlendFactorZero;
148 };
149 
150 constexpr MTLPrimitiveType ToMTLPrimitiveType(PrimitiveType type) {
151  switch (type) {
153  return MTLPrimitiveTypeTriangle;
155  return MTLPrimitiveTypeTriangleStrip;
157  return MTLPrimitiveTypeLine;
159  return MTLPrimitiveTypeLineStrip;
161  return MTLPrimitiveTypePoint;
163  // Callers are expected to perform a capability check for triangle fan
164  // support.
165  return MTLPrimitiveTypePoint;
166  }
167  return MTLPrimitiveTypePoint;
168 }
169 
170 constexpr MTLTriangleFillMode ToMTLTriangleFillMode(PolygonMode mode) {
171  switch (mode) {
172  case PolygonMode::kFill:
173  return MTLTriangleFillModeFill;
174  case PolygonMode::kLine:
175  return MTLTriangleFillModeLines;
176  }
177  return MTLTriangleFillModeFill;
178 }
179 
180 constexpr MTLIndexType ToMTLIndexType(IndexType type) {
181  switch (type) {
182  case IndexType::k16bit:
183  return MTLIndexTypeUInt16;
184  default:
185  return MTLIndexTypeUInt32;
186  }
187 }
188 
189 constexpr MTLCullMode ToMTLCullMode(CullMode mode) {
190  switch (mode) {
191  case CullMode::kNone:
192  return MTLCullModeNone;
193  case CullMode::kBackFace:
194  return MTLCullModeBack;
196  return MTLCullModeFront;
197  }
198  return MTLCullModeNone;
199 }
200 
201 constexpr MTLBlendOperation ToMTLBlendOperation(BlendOperation type) {
202  switch (type) {
204  return MTLBlendOperationAdd;
206  return MTLBlendOperationSubtract;
208  return MTLBlendOperationReverseSubtract;
209  }
210  return MTLBlendOperationAdd;
211 };
212 
213 constexpr MTLColorWriteMask ToMTLColorWriteMask(ColorWriteMask type) {
214  MTLColorWriteMask mask = MTLColorWriteMaskNone;
215 
217  mask |= MTLColorWriteMaskRed;
218  }
219 
221  mask |= MTLColorWriteMaskGreen;
222  }
223 
225  mask |= MTLColorWriteMaskBlue;
226  }
227 
229  mask |= MTLColorWriteMaskAlpha;
230  }
231 
232  return mask;
233 };
234 
235 constexpr MTLCompareFunction ToMTLCompareFunction(CompareFunction func) {
236  switch (func) {
238  return MTLCompareFunctionNever;
240  return MTLCompareFunctionLess;
242  return MTLCompareFunctionEqual;
244  return MTLCompareFunctionLessEqual;
246  return MTLCompareFunctionGreater;
248  return MTLCompareFunctionNotEqual;
250  return MTLCompareFunctionGreaterEqual;
252  return MTLCompareFunctionAlways;
253  }
254  return MTLCompareFunctionAlways;
255 };
256 
257 constexpr MTLStencilOperation ToMTLStencilOperation(StencilOperation op) {
258  switch (op) {
260  return MTLStencilOperationKeep;
262  return MTLStencilOperationZero;
264  return MTLStencilOperationReplace;
266  return MTLStencilOperationIncrementClamp;
268  return MTLStencilOperationDecrementClamp;
270  return MTLStencilOperationInvert;
272  return MTLStencilOperationIncrementWrap;
274  return MTLStencilOperationDecrementWrap;
275  }
276  return MTLStencilOperationKeep;
277 };
278 
279 constexpr MTLLoadAction ToMTLLoadAction(LoadAction action) {
280  switch (action) {
282  return MTLLoadActionDontCare;
283  case LoadAction::kLoad:
284  return MTLLoadActionLoad;
285  case LoadAction::kClear:
286  return MTLLoadActionClear;
287  }
288 
289  return MTLLoadActionDontCare;
290 }
291 
292 constexpr LoadAction FromMTLLoadAction(MTLLoadAction action) {
293  switch (action) {
294  case MTLLoadActionDontCare:
295  return LoadAction::kDontCare;
296  case MTLLoadActionLoad:
297  return LoadAction::kLoad;
298  case MTLLoadActionClear:
299  return LoadAction::kClear;
300  default:
301  break;
302  }
303 
304  return LoadAction::kDontCare;
305 }
306 
307 constexpr MTLStoreAction ToMTLStoreAction(StoreAction action) {
308  switch (action) {
310  return MTLStoreActionDontCare;
311  case StoreAction::kStore:
312  return MTLStoreActionStore;
314  return MTLStoreActionMultisampleResolve;
316  return MTLStoreActionStoreAndMultisampleResolve;
317  }
318  return MTLStoreActionDontCare;
319 }
320 
321 constexpr StoreAction FromMTLStoreAction(MTLStoreAction action) {
322  switch (action) {
323  case MTLStoreActionDontCare:
324  return StoreAction::kDontCare;
325  case MTLStoreActionStore:
326  return StoreAction::kStore;
327  case MTLStoreActionMultisampleResolve:
329  case MTLStoreActionStoreAndMultisampleResolve:
331  default:
332  break;
333  }
334  return StoreAction::kDontCare;
335 }
336 
337 constexpr MTLSamplerMinMagFilter ToMTLSamplerMinMagFilter(MinMagFilter filter) {
338  switch (filter) {
340  return MTLSamplerMinMagFilterNearest;
342  return MTLSamplerMinMagFilterLinear;
343  }
344  return MTLSamplerMinMagFilterNearest;
345 }
346 
347 constexpr MTLSamplerMipFilter ToMTLSamplerMipFilter(MipFilter filter) {
348  switch (filter) {
349  case MipFilter::kBase:
350  return MTLSamplerMipFilterNotMipmapped;
351  case MipFilter::kNearest:
352  return MTLSamplerMipFilterNearest;
353  case MipFilter::kLinear:
354  return MTLSamplerMipFilterLinear;
355  }
356  return MTLSamplerMipFilterNotMipmapped;
357 }
358 
359 constexpr MTLSamplerAddressMode ToMTLSamplerAddressMode(
360  SamplerAddressMode mode) {
361  switch (mode) {
363  return MTLSamplerAddressModeClampToEdge;
365  return MTLSamplerAddressModeRepeat;
367  return MTLSamplerAddressModeMirrorRepeat;
369  return MTLSamplerAddressModeClampToZero;
370  }
371  return MTLSamplerAddressModeClampToEdge;
372 }
373 
374 inline MTLClearColor ToMTLClearColor(const Color& color) {
375  return MTLClearColorMake(color.red, color.green, color.blue, color.alpha);
376 }
377 
378 constexpr MTLTextureType ToMTLTextureType(TextureType type) {
379  switch (type) {
381  return MTLTextureType2D;
383  return MTLTextureType2DMultisample;
385  return MTLTextureTypeCube;
388  << "kTextureExternalOES can not be used with the Metal backend.";
389  }
390  return MTLTextureType2D;
391 }
392 
393 MTLRenderPipelineColorAttachmentDescriptor*
395  ColorAttachmentDescriptor descriptor);
396 
397 MTLDepthStencilDescriptor* ToMTLDepthStencilDescriptor(
398  std::optional<DepthAttachmentDescriptor> depth,
399  std::optional<StencilAttachmentDescriptor> front,
400  std::optional<StencilAttachmentDescriptor> back);
401 
402 MTLTextureDescriptor* ToMTLTextureDescriptor(const TextureDescriptor& desc);
403 
404 } // namespace impeller
405 
406 #endif // FLUTTER_IMPELLER_RENDERER_BACKEND_METAL_FORMATS_MTL_H_
impeller::StoreAction::kMultisampleResolve
@ kMultisampleResolve
impeller::PixelFormat::kS8UInt
@ kS8UInt
impeller::TextureType::kTextureExternalOES
@ kTextureExternalOES
impeller::ToMTLColorWriteMask
constexpr MTLColorWriteMask ToMTLColorWriteMask(ColorWriteMask type)
Definition: formats_mtl.h:213
impeller::CompareFunction::kGreater
@ kGreater
Comparison test passes if new_value > current_value.
impeller::PrimitiveType::kLineStrip
@ kLineStrip
impeller::LoadAction::kLoad
@ kLoad
impeller::StoreAction
StoreAction
Definition: formats.h:208
impeller::StencilOperation::kDecrementClamp
@ kDecrementClamp
Decrement the current stencil value by 1. Clamp it to zero.
impeller::StoreAction::kStoreAndMultisampleResolve
@ kStoreAndMultisampleResolve
impeller::IndexType::k16bit
@ k16bit
impeller::PolygonMode
PolygonMode
Definition: formats.h:389
impeller::ToMTLSamplerAddressMode
constexpr MTLSamplerAddressMode ToMTLSamplerAddressMode(SamplerAddressMode mode)
Definition: formats_mtl.h:359
impeller::PixelFormat::kB10G10R10A10XR
@ kB10G10R10A10XR
impeller::PixelFormat::kB8G8R8A8UNormIntSRGB
@ kB8G8R8A8UNormIntSRGB
impeller::SafeMTLPixelFormatBGRA10_XR
MTLPixelFormat SafeMTLPixelFormatBGRA10_XR()
Definition: formats_mtl.mm:138
impeller::PixelFormat::kA8UNormInt
@ kA8UNormInt
impeller::BlendFactor::kSourceAlphaSaturated
@ kSourceAlphaSaturated
impeller::BlendFactor
BlendFactor
Definition: formats.h:178
impeller::PixelFormat::kR8UNormInt
@ kR8UNormInt
impeller::Color
Definition: color.h:123
impeller::ColorWriteMaskBits::kGreen
@ kGreen
impeller::CompareFunction::kEqual
@ kEqual
Comparison test passes if new_value == current_value.
impeller::BlendFactor::kOneMinusSourceAlpha
@ kOneMinusSourceAlpha
impeller::SamplerAddressMode
SamplerAddressMode
Definition: formats.h:441
impeller::CompareFunction::kGreaterEqual
@ kGreaterEqual
Comparison test passes if new_value >= current_value.
impeller::ToMTLStencilOperation
constexpr MTLStencilOperation ToMTLStencilOperation(StencilOperation op)
Definition: formats_mtl.h:257
impeller::StencilOperation::kKeep
@ kKeep
Don't modify the current stencil value.
impeller::PixelFormat::kR8G8B8A8UNormInt
@ kR8G8B8A8UNormInt
impeller::TextureType
TextureType
Definition: formats.h:262
texture_descriptor.h
impeller::StencilOperation::kIncrementClamp
@ kIncrementClamp
Increment the current stencil value by 1. Clamp it to the maximum.
formats.h
impeller::StoreAction::kDontCare
@ kDontCare
impeller::SafeMTLPixelFormatDepth24Unorm_Stencil8
MTLPixelFormat SafeMTLPixelFormatDepth24Unorm_Stencil8()
Definition: formats_mtl.mm:113
impeller::StencilOperation::kInvert
@ kInvert
Perform a logical bitwise invert on the current stencil value.
impeller::SamplerAddressMode::kClampToEdge
@ kClampToEdge
impeller::BlendFactor::kDestinationAlpha
@ kDestinationAlpha
impeller::ToMTLStoreAction
constexpr MTLStoreAction ToMTLStoreAction(StoreAction action)
Definition: formats_mtl.h:307
impeller::ToMTLCompareFunction
constexpr MTLCompareFunction ToMTLCompareFunction(CompareFunction func)
Definition: formats_mtl.h:235
validation.h
impeller::ToMTLClearColor
MTLClearColor ToMTLClearColor(const Color &color)
Definition: formats_mtl.h:374
impeller::StencilOperation
StencilOperation
Definition: formats.h:571
impeller::PolygonMode::kFill
@ kFill
impeller::StencilOperation::kSetToReferenceValue
@ kSetToReferenceValue
Reset the stencil value to the reference value.
impeller::BlendFactor::kSourceColor
@ kSourceColor
impeller::PixelFormat::kD32FloatS8UInt
@ kD32FloatS8UInt
impeller::ToMTLDepthStencilDescriptor
MTLDepthStencilDescriptor * ToMTLDepthStencilDescriptor(std::optional< DepthAttachmentDescriptor > depth, std::optional< StencilAttachmentDescriptor > front, std::optional< StencilAttachmentDescriptor > back)
Definition: formats_mtl.mm:54
impeller::PixelFormat
PixelFormat
The Pixel formats supported by Impeller. The naming convention denotes the usage of the component,...
Definition: formats.h:99
impeller::PrimitiveType::kLine
@ kLine
impeller::BlendFactor::kDestinationColor
@ kDestinationColor
impeller::ToMTLTextureDescriptor
MTLTextureDescriptor * ToMTLTextureDescriptor(const TextureDescriptor &desc)
Definition: formats_mtl.mm:86
impeller::MinMagFilter::kNearest
@ kNearest
Select nearest to the sample point. Most widely supported.
impeller::Mask< ColorWriteMaskBits >
impeller::PrimitiveType::kTriangle
@ kTriangle
impeller::BlendFactor::kZero
@ kZero
impeller::TextureType::kTexture2DMultisample
@ kTexture2DMultisample
impeller::CullMode
CullMode
Definition: formats.h:337
impeller::MipFilter::kNearest
@ kNearest
The nearst mipmap level is selected.
impeller::LoadAction::kClear
@ kClear
impeller::StencilOperation::kDecrementWrap
@ kDecrementWrap
Decrement the current stencil value by 1. If at zero, set to maximum.
impeller::CompareFunction
CompareFunction
Definition: formats.h:552
impeller::BlendFactor::kOneMinusDestinationColor
@ kOneMinusDestinationColor
impeller::PrimitiveType::kTriangleStrip
@ kTriangleStrip
impeller::PrimitiveType
PrimitiveType
Decides how backend draws pixels based on input vertices.
Definition: formats.h:352
impeller::CullMode::kBackFace
@ kBackFace
impeller::FromMTLStoreAction
constexpr StoreAction FromMTLStoreAction(MTLStoreAction action)
Definition: formats_mtl.h:321
impeller::ToMTLLoadAction
constexpr MTLLoadAction ToMTLLoadAction(LoadAction action)
Definition: formats_mtl.h:279
impeller::CullMode::kNone
@ kNone
impeller::ToMTLBlendOperation
constexpr MTLBlendOperation ToMTLBlendOperation(BlendOperation type)
Definition: formats_mtl.h:201
impeller::MipFilter
MipFilter
Options for selecting and filtering between mipmap levels.
Definition: formats.h:425
impeller::BlendOperation::kReverseSubtract
@ kReverseSubtract
impeller::BlendFactor::kBlendAlpha
@ kBlendAlpha
impeller::ToMTLPrimitiveType
constexpr MTLPrimitiveType ToMTLPrimitiveType(PrimitiveType type)
Definition: formats_mtl.h:150
impeller::LoadAction
LoadAction
Definition: formats.h:202
impeller::PrimitiveType::kPoint
@ kPoint
Draws a point at each input vertex.
impeller::ToMTLSamplerMinMagFilter
constexpr MTLSamplerMinMagFilter ToMTLSamplerMinMagFilter(MinMagFilter filter)
Definition: formats_mtl.h:337
impeller::PixelFormat::kR8G8UNormInt
@ kR8G8UNormInt
impeller::ToMTLRenderPipelineColorAttachmentDescriptor
MTLRenderPipelineColorAttachmentDescriptor * ToMTLRenderPipelineColorAttachmentDescriptor(ColorAttachmentDescriptor descriptor)
Definition: formats_mtl.mm:15
impeller::BlendOperation::kAdd
@ kAdd
impeller::MinMagFilter::kLinear
@ kLinear
impeller::BlendFactor::kBlendColor
@ kBlendColor
impeller::IndexType
IndexType
Definition: formats.h:343
impeller::PixelFormat::kB10G10R10XR
@ kB10G10R10XR
impeller::PixelFormat::kD24UnormS8Uint
@ kD24UnormS8Uint
type
GLenum type
Definition: blit_command_gles.cc:127
impeller::BlendFactor::kOneMinusBlendColor
@ kOneMinusBlendColor
impeller::StencilOperation::kIncrementWrap
@ kIncrementWrap
Increment the current stencil value by 1. If at maximum, set to zero.
impeller::TextureType::kTextureCube
@ kTextureCube
impeller::MinMagFilter
MinMagFilter
Describes how the texture should be sampled when the texture is being shrunk (minified) or expanded (...
Definition: formats.h:415
impeller::PixelFormat::kR16G16B16A16Float
@ kR16G16B16A16Float
impeller::StoreAction::kStore
@ kStore
impeller::CompareFunction::kLessEqual
@ kLessEqual
Comparison test passes if new_value <= current_value.
impeller::BlendFactor::kOne
@ kOne
impeller::BlendFactor::kOneMinusBlendAlpha
@ kOneMinusBlendAlpha
impeller::CompareFunction::kAlways
@ kAlways
Comparison test passes always passes.
impeller::TextureType::kTexture2D
@ kTexture2D
impeller::StencilOperation::kZero
@ kZero
Reset the stencil value to zero.
impeller::PixelFormat::kR32G32B32A32Float
@ kR32G32B32A32Float
impeller::PixelFormat::kUnknown
@ kUnknown
impeller::ToMTLPixelFormat
constexpr MTLPixelFormat ToMTLPixelFormat(PixelFormat format)
Definition: formats_mtl.h:76
impeller::CompareFunction::kNever
@ kNever
Comparison test never passes.
impeller::SafeMTLPixelFormatBGR10_XR
MTLPixelFormat SafeMTLPixelFormatBGR10_XR()
Definition: formats_mtl.mm:130
impeller::ToMTLTextureType
constexpr MTLTextureType ToMTLTextureType(TextureType type)
Definition: formats_mtl.h:378
VALIDATION_LOG
#define VALIDATION_LOG
Definition: validation.h:91
impeller::CullMode::kFrontFace
@ kFrontFace
impeller::FromMTLLoadAction
constexpr LoadAction FromMTLLoadAction(MTLLoadAction action)
Definition: formats_mtl.h:292
impeller::ColorWriteMaskBits::kAlpha
@ kAlpha
impeller::BlendOperation
BlendOperation
Definition: formats.h:196
impeller::MipFilter::kBase
@ kBase
The texture is sampled as if it only had a single mipmap level.
impeller::PixelFormat::kR8G8B8A8UNormIntSRGB
@ kR8G8B8A8UNormIntSRGB
impeller::SafeMTLPixelFormatBGR10_XR_sRGB
MTLPixelFormat SafeMTLPixelFormatBGR10_XR_sRGB()
Definition: formats_mtl.mm:122
impeller::SamplerAddressMode::kMirror
@ kMirror
impeller::LoadAction::kDontCare
@ kDontCare
impeller::ToMTLSamplerMipFilter
constexpr MTLSamplerMipFilter ToMTLSamplerMipFilter(MipFilter filter)
Definition: formats_mtl.h:347
impeller::ToMTLBlendFactor
constexpr MTLBlendFactor ToMTLBlendFactor(BlendFactor type)
Definition: formats_mtl.h:114
impeller::BlendFactor::kOneMinusSourceColor
@ kOneMinusSourceColor
impeller::ColorWriteMaskBits::kRed
@ kRed
impeller::MipFilter::kLinear
@ kLinear
Sample from the two nearest mip levels and linearly interpolate.
impeller::ToMTLIndexType
constexpr MTLIndexType ToMTLIndexType(IndexType type)
Definition: formats_mtl.h:180
impeller::FromMTLPixelFormat
constexpr PixelFormat FromMTLPixelFormat(MTLPixelFormat format)
Definition: formats_mtl.h:22
impeller::ColorWriteMaskBits::kBlue
@ kBlue
color.h
color
DlColor color
Definition: dl_golden_blur_unittests.cc:24
impeller::PolygonMode::kLine
@ kLine
impeller::CompareFunction::kNotEqual
@ kNotEqual
Comparison test passes if new_value != current_value.
impeller::PixelFormat::kB10G10R10XRSRGB
@ kB10G10R10XRSRGB
impeller::PixelFormat::kB8G8R8A8UNormInt
@ kB8G8R8A8UNormInt
impeller::BlendFactor::kSourceAlpha
@ kSourceAlpha
impeller::ToMTLCullMode
constexpr MTLCullMode ToMTLCullMode(CullMode mode)
Definition: formats_mtl.h:189
impeller::CompareFunction::kLess
@ kLess
Comparison test passes if new_value < current_value.
impeller
Definition: allocation.cc:12
impeller::BlendOperation::kSubtract
@ kSubtract
impeller::ToMTLTriangleFillMode
constexpr MTLTriangleFillMode ToMTLTriangleFillMode(PolygonMode mode)
Definition: formats_mtl.h:170
impeller::PrimitiveType::kTriangleFan
@ kTriangleFan
impeller::BlendFactor::kOneMinusDestinationAlpha
@ kOneMinusDestinationAlpha
impeller::SamplerAddressMode::kRepeat
@ kRepeat
impeller::SamplerAddressMode::kDecal
@ kDecal
decal sampling mode is only supported on devices that pass the Capabilities.SupportsDecalSamplerAddre...