Flutter Impeller
formats_vk.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_VULKAN_FORMATS_VK_H_
6 #define FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_FORMATS_VK_H_
7 
8 #include <cstdint>
9 #include <ostream>
10 
12 #include "impeller/core/formats.h"
15 #include "vulkan/vulkan_enums.hpp"
16 
17 namespace impeller {
18 
19 constexpr vk::SampleCountFlagBits ToVKSampleCountFlagBits(SampleCount count) {
20  switch (count) {
22  return vk::SampleCountFlagBits::e1;
24  return vk::SampleCountFlagBits::e4;
25  }
26  FML_UNREACHABLE();
27 }
28 
30  switch (factor) {
31  case BlendFactor::kZero:
32  return vk::BlendFactor::eZero;
33  case BlendFactor::kOne:
34  return vk::BlendFactor::eOne;
36  return vk::BlendFactor::eSrcColor;
38  return vk::BlendFactor::eOneMinusSrcColor;
40  return vk::BlendFactor::eSrcAlpha;
42  return vk::BlendFactor::eOneMinusSrcAlpha;
44  return vk::BlendFactor::eDstColor;
46  return vk::BlendFactor::eOneMinusDstColor;
48  return vk::BlendFactor::eDstAlpha;
50  return vk::BlendFactor::eOneMinusDstAlpha;
52  return vk::BlendFactor::eSrcAlphaSaturate;
54  return vk::BlendFactor::eConstantColor;
56  return vk::BlendFactor::eOneMinusConstantColor;
58  return vk::BlendFactor::eConstantAlpha;
60  return vk::BlendFactor::eOneMinusConstantAlpha;
61  }
62  FML_UNREACHABLE();
63 }
64 
65 constexpr vk::BlendOp ToVKBlendOp(BlendOperation op) {
66  switch (op) {
68  return vk::BlendOp::eAdd;
70  return vk::BlendOp::eSubtract;
72  return vk::BlendOp::eReverseSubtract;
73  }
74  FML_UNREACHABLE();
75 }
76 
77 constexpr vk::ColorComponentFlags ToVKColorComponentFlags(ColorWriteMask type) {
78  vk::ColorComponentFlags mask;
79 
81  mask |= vk::ColorComponentFlagBits::eR;
82  }
83 
85  mask |= vk::ColorComponentFlagBits::eG;
86  }
87 
89  mask |= vk::ColorComponentFlagBits::eB;
90  }
91 
93  mask |= vk::ColorComponentFlagBits::eA;
94  }
95 
96  return mask;
97 }
98 
99 constexpr vk::PipelineColorBlendAttachmentState
101  vk::PipelineColorBlendAttachmentState res;
102 
103  res.setBlendEnable(desc.blending_enabled);
104 
105  res.setSrcColorBlendFactor(ToVKBlendFactor(desc.src_color_blend_factor));
106  res.setColorBlendOp(ToVKBlendOp(desc.color_blend_op));
107  res.setDstColorBlendFactor(ToVKBlendFactor(desc.dst_color_blend_factor));
108 
109  res.setSrcAlphaBlendFactor(ToVKBlendFactor(desc.src_alpha_blend_factor));
110  res.setAlphaBlendOp(ToVKBlendOp(desc.alpha_blend_op));
111  res.setDstAlphaBlendFactor(ToVKBlendFactor(desc.dst_alpha_blend_factor));
112 
113  res.setColorWriteMask(ToVKColorComponentFlags(desc.write_mask));
114 
115  return res;
116 }
117 
118 constexpr std::optional<vk::ShaderStageFlagBits> ToVKShaderStageFlagBits(
119  ShaderStage stage) {
120  switch (stage) {
122  return std::nullopt;
124  return vk::ShaderStageFlagBits::eVertex;
126  return vk::ShaderStageFlagBits::eFragment;
128  return vk::ShaderStageFlagBits::eCompute;
129  }
130  FML_UNREACHABLE();
131 }
132 
133 constexpr vk::Format ToVKImageFormat(PixelFormat format) {
134  switch (format) {
139  return vk::Format::eUndefined;
141  // TODO(csg): This is incorrect. Don't depend on swizzle support for GLES.
142  return vk::Format::eR8Unorm;
144  return vk::Format::eR8G8B8A8Unorm;
146  return vk::Format::eR8G8B8A8Srgb;
148  return vk::Format::eB8G8R8A8Unorm;
150  return vk::Format::eB8G8R8A8Srgb;
152  return vk::Format::eR32G32B32A32Sfloat;
154  return vk::Format::eR16G16B16A16Sfloat;
156  return vk::Format::eS8Uint;
158  return vk::Format::eD24UnormS8Uint;
160  return vk::Format::eD32SfloatS8Uint;
162  return vk::Format::eR8Unorm;
164  return vk::Format::eR8G8Unorm;
165  }
166 
167  FML_UNREACHABLE();
168 }
169 
170 constexpr PixelFormat ToPixelFormat(vk::Format format) {
171  switch (format) {
172  case vk::Format::eUndefined:
173  return PixelFormat::kUnknown;
174  case vk::Format::eR8G8B8A8Unorm:
176  case vk::Format::eR8G8B8A8Srgb:
178  case vk::Format::eB8G8R8A8Unorm:
180  case vk::Format::eB8G8R8A8Srgb:
182  case vk::Format::eR32G32B32A32Sfloat:
184  case vk::Format::eR16G16B16A16Sfloat:
186  case vk::Format::eS8Uint:
187  return PixelFormat::kS8UInt;
188  case vk::Format::eD24UnormS8Uint:
190  case vk::Format::eD32SfloatS8Uint:
192  case vk::Format::eR8Unorm:
194  case vk::Format::eR8G8Unorm:
196  default:
197  return PixelFormat::kUnknown;
198  }
199 }
200 
201 constexpr vk::SampleCountFlagBits ToVKSampleCount(SampleCount sample_count) {
202  switch (sample_count) {
204  return vk::SampleCountFlagBits::e1;
206  return vk::SampleCountFlagBits::e4;
207  }
208 
209  FML_UNREACHABLE();
210 }
211 
212 constexpr vk::Filter ToVKSamplerMinMagFilter(MinMagFilter filter) {
213  switch (filter) {
215  return vk::Filter::eNearest;
217  return vk::Filter::eLinear;
218  }
219 
220  FML_UNREACHABLE();
221 }
222 
223 constexpr vk::SamplerMipmapMode ToVKSamplerMipmapMode(MipFilter filter) {
224  switch (filter) {
225  case MipFilter::kBase:
226  case MipFilter::kNearest:
227  return vk::SamplerMipmapMode::eNearest;
228  case MipFilter::kLinear:
229  return vk::SamplerMipmapMode::eLinear;
230  }
231 
232  FML_UNREACHABLE();
233 }
234 
236  SamplerAddressMode mode) {
237  switch (mode) {
239  return vk::SamplerAddressMode::eRepeat;
241  return vk::SamplerAddressMode::eMirroredRepeat;
243  return vk::SamplerAddressMode::eClampToEdge;
245  return vk::SamplerAddressMode::eClampToBorder;
246  }
247 
248  FML_UNREACHABLE();
249 }
250 
251 constexpr vk::ShaderStageFlags ToVkShaderStage(ShaderStage stage) {
252  switch (stage) {
254  return vk::ShaderStageFlagBits::eAll;
256  return vk::ShaderStageFlagBits::eFragment;
258  return vk::ShaderStageFlagBits::eCompute;
260  return vk::ShaderStageFlagBits::eVertex;
261  }
262 
263  FML_UNREACHABLE();
264 }
265 
267  switch (type) {
269  return vk::DescriptorType::eCombinedImageSampler;
270  break;
272  return vk::DescriptorType::eUniformBuffer;
273  break;
275  return vk::DescriptorType::eStorageBuffer;
276  break;
278  return vk::DescriptorType::eSampledImage;
279  break;
281  return vk::DescriptorType::eSampler;
282  break;
284  return vk::DescriptorType::eInputAttachment;
285  }
286 
287  FML_UNREACHABLE();
288 }
289 
290 constexpr vk::DescriptorSetLayoutBinding ToVKDescriptorSetLayoutBinding(
291  const DescriptorSetLayout& layout) {
292  vk::DescriptorSetLayoutBinding binding;
293  binding.binding = layout.binding;
294  binding.descriptorCount = 1u;
295  binding.descriptorType = ToVKDescriptorType(layout.descriptor_type);
296  binding.stageFlags = ToVkShaderStage(layout.shader_stage);
297  return binding;
298 }
299 
300 constexpr vk::AttachmentLoadOp ToVKAttachmentLoadOp(LoadAction load_action) {
301  switch (load_action) {
302  case LoadAction::kLoad:
303  return vk::AttachmentLoadOp::eLoad;
304  case LoadAction::kClear:
305  return vk::AttachmentLoadOp::eClear;
307  return vk::AttachmentLoadOp::eDontCare;
308  }
309 
310  FML_UNREACHABLE();
311 }
312 
313 constexpr vk::AttachmentStoreOp ToVKAttachmentStoreOp(StoreAction store_action,
314  bool is_resolve_texture) {
315  switch (store_action) {
316  case StoreAction::kStore:
317  // Both MSAA and resolve textures need to be stored. A resolve is NOT
318  // performed.
319  return vk::AttachmentStoreOp::eStore;
321  // Both MSAA and resolve textures can be discarded. A resolve is NOT
322  // performed.
323  return vk::AttachmentStoreOp::eDontCare;
325  // The resolve texture is stored but the MSAA texture can be discarded. A
326  // resolve IS performed.
327  return is_resolve_texture ? vk::AttachmentStoreOp::eStore
328  : vk::AttachmentStoreOp::eDontCare;
330  // Both MSAA and resolve textures need to be stored. A resolve IS
331  // performed.
332  return vk::AttachmentStoreOp::eStore;
333  }
334  FML_UNREACHABLE();
335 }
336 
337 constexpr bool StoreActionPerformsResolve(StoreAction store_action) {
338  switch (store_action) {
340  case StoreAction::kStore:
341  return false;
344  return true;
345  }
346  FML_UNREACHABLE();
347 }
348 
349 constexpr vk::IndexType ToVKIndexType(IndexType index_type) {
350  switch (index_type) {
351  case IndexType::k16bit:
352  return vk::IndexType::eUint16;
353  case IndexType::k32bit:
354  return vk::IndexType::eUint32;
355  case IndexType::kUnknown:
356  return vk::IndexType::eUint32;
357  case IndexType::kNone:
358  FML_UNREACHABLE();
359  }
360 
361  FML_UNREACHABLE();
362 }
363 
365  switch (mode) {
366  case PolygonMode::kFill:
367  return vk::PolygonMode::eFill;
368  case PolygonMode::kLine:
369  return vk::PolygonMode::eLine;
370  }
371  FML_UNREACHABLE();
372 }
373 
374 constexpr vk::PrimitiveTopology ToVKPrimitiveTopology(PrimitiveType primitive) {
375  switch (primitive) {
377  return vk::PrimitiveTopology::eTriangleList;
379  return vk::PrimitiveTopology::eTriangleStrip;
381  return vk::PrimitiveTopology::eLineList;
383  return vk::PrimitiveTopology::eLineStrip;
385  return vk::PrimitiveTopology::ePointList;
386  }
387 
388  FML_UNREACHABLE();
389 }
390 
391 constexpr bool PixelFormatIsDepthStencil(PixelFormat format) {
392  switch (format) {
406  return false;
410  return true;
411  }
412  return false;
413 }
414 
415 static constexpr vk::AttachmentReference kUnusedAttachmentReference = {
416  VK_ATTACHMENT_UNUSED, vk::ImageLayout::eUndefined};
417 
418 constexpr vk::CullModeFlags ToVKCullModeFlags(CullMode mode) {
419  switch (mode) {
420  case CullMode::kNone:
421  return vk::CullModeFlagBits::eNone;
423  return vk::CullModeFlagBits::eFront;
424  case CullMode::kBackFace:
425  return vk::CullModeFlagBits::eBack;
426  }
427  FML_UNREACHABLE();
428 }
429 
430 constexpr vk::CompareOp ToVKCompareOp(CompareFunction op) {
431  switch (op) {
433  return vk::CompareOp::eNever;
435  return vk::CompareOp::eAlways;
437  return vk::CompareOp::eLess;
439  return vk::CompareOp::eEqual;
441  return vk::CompareOp::eLessOrEqual;
443  return vk::CompareOp::eGreater;
445  return vk::CompareOp::eNotEqual;
447  return vk::CompareOp::eGreaterOrEqual;
448  }
449  FML_UNREACHABLE();
450 }
451 
452 constexpr vk::StencilOp ToVKStencilOp(StencilOperation op) {
453  switch (op) {
455  return vk::StencilOp::eKeep;
457  return vk::StencilOp::eZero;
459  return vk::StencilOp::eReplace;
461  return vk::StencilOp::eIncrementAndClamp;
463  return vk::StencilOp::eDecrementAndClamp;
465  return vk::StencilOp::eInvert;
467  return vk::StencilOp::eIncrementAndWrap;
469  return vk::StencilOp::eDecrementAndWrap;
470  break;
471  }
472  FML_UNREACHABLE();
473 }
474 
475 constexpr vk::StencilOpState ToVKStencilOpState(
476  const StencilAttachmentDescriptor& desc) {
477  vk::StencilOpState state;
478  state.failOp = ToVKStencilOp(desc.stencil_failure);
479  state.passOp = ToVKStencilOp(desc.depth_stencil_pass);
480  state.depthFailOp = ToVKStencilOp(desc.depth_failure);
481  state.compareOp = ToVKCompareOp(desc.stencil_compare);
482  state.compareMask = desc.read_mask;
483  state.writeMask = desc.write_mask;
484  // This is irrelevant as the stencil references are always dynamic state and
485  // will be set in the render pass.
486  state.reference = 1988;
487  return state;
488 }
489 
490 constexpr vk::ImageAspectFlags ToVKImageAspectFlags(PixelFormat format) {
491  switch (format) {
505  return vk::ImageAspectFlagBits::eColor;
507  return vk::ImageAspectFlagBits::eStencil;
510  return vk::ImageAspectFlagBits::eDepth |
511  vk::ImageAspectFlagBits::eStencil;
512  }
513  FML_UNREACHABLE();
514 }
515 
516 constexpr uint32_t ToArrayLayerCount(TextureType type) {
517  switch (type) {
520  return 1u;
522  return 6u;
525  << "kTextureExternalOES can not be used with the Vulkan backend.";
526  }
527  FML_UNREACHABLE();
528 }
529 
530 constexpr vk::ImageViewType ToVKImageViewType(TextureType type) {
531  switch (type) {
534  return vk::ImageViewType::e2D;
536  return vk::ImageViewType::eCube;
539  << "kTextureExternalOES can not be used with the Vulkan backend.";
540  }
541  FML_UNREACHABLE();
542 }
543 
544 constexpr vk::ImageCreateFlags ToVKImageCreateFlags(TextureType type) {
545  switch (type) {
548  return {};
550  return vk::ImageCreateFlagBits::eCubeCompatible;
553  << "kTextureExternalOES can not be used with the Vulkan backend.";
554  }
555  FML_UNREACHABLE();
556 }
557 
558 vk::PipelineDepthStencilStateCreateInfo ToVKPipelineDepthStencilStateCreateInfo(
559  std::optional<DepthAttachmentDescriptor> depth,
560  std::optional<StencilAttachmentDescriptor> front,
561  std::optional<StencilAttachmentDescriptor> back);
562 
563 constexpr vk::ImageAspectFlags ToImageAspectFlags(PixelFormat format) {
564  switch (format) {
566  return {};
579  return vk::ImageAspectFlagBits::eColor;
581  return vk::ImageAspectFlagBits::eStencil;
584  return vk::ImageAspectFlagBits::eDepth |
585  vk::ImageAspectFlagBits::eStencil;
586  }
587  FML_UNREACHABLE();
588 }
589 
590 } // namespace impeller
591 
592 #endif // FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_FORMATS_VK_H_
impeller::StoreAction::kMultisampleResolve
@ kMultisampleResolve
impeller::PixelFormat::kS8UInt
@ kS8UInt
impeller::TextureType::kTextureExternalOES
@ kTextureExternalOES
impeller::ToVKSampleCount
constexpr vk::SampleCountFlagBits ToVKSampleCount(SampleCount sample_count)
Definition: formats_vk.h:201
impeller::ColorAttachmentDescriptor::src_color_blend_factor
BlendFactor src_color_blend_factor
Definition: formats.h:516
impeller::CompareFunction::kGreater
@ kGreater
Comparison test passes if new_value > current_value.
impeller::PrimitiveType::kLineStrip
@ kLineStrip
impeller::LoadAction::kLoad
@ kLoad
impeller::DescriptorSetLayout
Definition: shader_types.h:162
impeller::StoreAction
StoreAction
Definition: formats.h:208
impeller::StencilOperation::kDecrementClamp
@ kDecrementClamp
Decrement the current stencil value by 1. Clamp it to zero.
impeller::PixelFormatIsDepthStencil
constexpr bool PixelFormatIsDepthStencil(PixelFormat format)
Definition: formats_vk.h:391
impeller::ToVKColorComponentFlags
constexpr vk::ColorComponentFlags ToVKColorComponentFlags(ColorWriteMask type)
Definition: formats_vk.h:77
impeller::StoreAction::kStoreAndMultisampleResolve
@ kStoreAndMultisampleResolve
impeller::ToVKPipelineDepthStencilStateCreateInfo
vk::PipelineDepthStencilStateCreateInfo ToVKPipelineDepthStencilStateCreateInfo(std::optional< DepthAttachmentDescriptor > depth, std::optional< StencilAttachmentDescriptor > front, std::optional< StencilAttachmentDescriptor > back)
Definition: formats_vk.cc:9
impeller::IndexType::k16bit
@ k16bit
impeller::PolygonMode
PolygonMode
Definition: formats.h:383
impeller::StencilAttachmentDescriptor::depth_failure
StencilOperation depth_failure
Definition: formats.h:619
impeller::StencilAttachmentDescriptor::stencil_compare
CompareFunction stencil_compare
Definition: formats.h:610
impeller::ToVKSamplerAddressMode
constexpr vk::SamplerAddressMode ToVKSamplerAddressMode(SamplerAddressMode mode)
Definition: formats_vk.h:235
impeller::PixelFormat::kB10G10R10A10XR
@ kB10G10R10A10XR
impeller::PixelFormat::kB8G8R8A8UNormIntSRGB
@ kB8G8R8A8UNormIntSRGB
impeller::ShaderStage::kUnknown
@ kUnknown
impeller::PixelFormat::kA8UNormInt
@ kA8UNormInt
impeller::ToVKBlendFactor
constexpr vk::BlendFactor ToVKBlendFactor(BlendFactor factor)
Definition: formats_vk.h:29
impeller::BlendFactor::kSourceAlphaSaturated
@ kSourceAlphaSaturated
impeller::BlendFactor
BlendFactor
Definition: formats.h:178
impeller::PixelFormat::kR8UNormInt
@ kR8UNormInt
impeller::ToVKPolygonMode
constexpr vk::PolygonMode ToVKPolygonMode(PolygonMode mode)
Definition: formats_vk.h:364
impeller::ToVKPipelineColorBlendAttachmentState
constexpr vk::PipelineColorBlendAttachmentState ToVKPipelineColorBlendAttachmentState(const ColorAttachmentDescriptor &desc)
Definition: formats_vk.h:100
impeller::ColorWriteMaskBits::kGreen
@ kGreen
impeller::CompareFunction::kEqual
@ kEqual
Comparison test passes if new_value == current_value.
impeller::ToVKDescriptorType
constexpr vk::DescriptorType ToVKDescriptorType(DescriptorType type)
Definition: formats_vk.h:266
impeller::BlendFactor::kOneMinusSourceAlpha
@ kOneMinusSourceAlpha
impeller::SamplerAddressMode
SamplerAddressMode
Definition: formats.h:435
impeller::CompareFunction::kGreaterEqual
@ kGreaterEqual
Comparison test passes if new_value >= current_value.
impeller::StencilOperation::kKeep
@ kKeep
Don't modify the current stencil value.
impeller::PixelFormat::kR8G8B8A8UNormInt
@ kR8G8B8A8UNormInt
impeller::ToArrayLayerCount
constexpr uint32_t ToArrayLayerCount(TextureType type)
Definition: formats_vk.h:516
impeller::TextureType
TextureType
Definition: formats.h:262
formats.h
impeller::StencilOperation::kIncrementClamp
@ kIncrementClamp
Increment the current stencil value by 1. Clamp it to the maximum.
impeller::ColorAttachmentDescriptor::alpha_blend_op
BlendOperation alpha_blend_op
Definition: formats.h:521
impeller::ToVKCullModeFlags
constexpr vk::CullModeFlags ToVKCullModeFlags(CullMode mode)
Definition: formats_vk.h:418
impeller::ShaderStage
ShaderStage
Definition: shader_types.h:22
impeller::StoreAction::kDontCare
@ kDontCare
impeller::ToVKImageCreateFlags
constexpr vk::ImageCreateFlags ToVKImageCreateFlags(TextureType type)
Definition: formats_vk.h:544
impeller::DescriptorSetLayout::shader_stage
ShaderStage shader_stage
Definition: shader_types.h:165
impeller::ToVKSamplerMipmapMode
constexpr vk::SamplerMipmapMode ToVKSamplerMipmapMode(MipFilter filter)
Definition: formats_vk.h:223
impeller::StencilOperation::kInvert
@ kInvert
Perform a logical bitwise invert on the current stencil value.
impeller::SamplerAddressMode::kClampToEdge
@ kClampToEdge
impeller::BlendFactor::kDestinationAlpha
@ kDestinationAlpha
impeller::DescriptorType::kImage
@ kImage
impeller::IndexType::k32bit
@ k32bit
impeller::StencilAttachmentDescriptor::write_mask
uint32_t write_mask
Definition: formats.h:634
validation.h
impeller::ToVKStencilOpState
constexpr vk::StencilOpState ToVKStencilOpState(const StencilAttachmentDescriptor &desc)
Definition: formats_vk.h:475
impeller::StencilOperation
StencilOperation
Definition: formats.h:565
impeller::PolygonMode::kFill
@ kFill
impeller::ToVKAttachmentStoreOp
constexpr vk::AttachmentStoreOp ToVKAttachmentStoreOp(StoreAction store_action, bool is_resolve_texture)
Definition: formats_vk.h:313
impeller::StencilOperation::kSetToReferenceValue
@ kSetToReferenceValue
Reset the stencil value to the reference value.
impeller::ToVKCompareOp
constexpr vk::CompareOp ToVKCompareOp(CompareFunction op)
Definition: formats_vk.h:430
vk.h
impeller::BlendFactor::kSourceColor
@ kSourceColor
impeller::PixelFormat::kD32FloatS8UInt
@ kD32FloatS8UInt
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::MinMagFilter::kNearest
@ kNearest
Select nearest to the sample point. Most widely supported.
impeller::ToVKStencilOp
constexpr vk::StencilOp ToVKStencilOp(StencilOperation op)
Definition: formats_vk.h:452
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:546
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::CullMode::kNone
@ kNone
impeller::StencilAttachmentDescriptor::read_mask
uint32_t read_mask
Definition: formats.h:629
impeller::ToVKImageFormat
constexpr vk::Format ToVKImageFormat(PixelFormat format)
Definition: formats_vk.h:133
impeller::MipFilter
MipFilter
Options for selecting and filtering between mipmap levels.
Definition: formats.h:419
impeller::BlendOperation::kReverseSubtract
@ kReverseSubtract
impeller::ToVKIndexType
constexpr vk::IndexType ToVKIndexType(IndexType index_type)
Definition: formats_vk.h:349
impeller::BlendFactor::kBlendAlpha
@ kBlendAlpha
impeller::LoadAction
LoadAction
Definition: formats.h:202
impeller::PrimitiveType::kPoint
@ kPoint
Draws a point at each input vertex.
impeller::PixelFormat::kR8G8UNormInt
@ kR8G8UNormInt
impeller::BlendOperation::kAdd
@ kAdd
impeller::MinMagFilter::kLinear
@ kLinear
impeller::BlendFactor::kBlendColor
@ kBlendColor
impeller::ToVKDescriptorSetLayoutBinding
constexpr vk::DescriptorSetLayoutBinding ToVKDescriptorSetLayoutBinding(const DescriptorSetLayout &layout)
Definition: formats_vk.h:290
impeller::DescriptorType::kSampler
@ kSampler
impeller::IndexType
IndexType
Definition: formats.h:343
impeller::ToVKPrimitiveTopology
constexpr vk::PrimitiveTopology ToVKPrimitiveTopology(PrimitiveType primitive)
Definition: formats_vk.h:374
impeller::PixelFormat::kB10G10R10XR
@ kB10G10R10XR
impeller::PixelFormat::kD24UnormS8Uint
@ kD24UnormS8Uint
type
GLenum type
Definition: blit_command_gles.cc:126
impeller::StencilAttachmentDescriptor::stencil_failure
StencilOperation stencil_failure
Definition: formats.h:614
impeller::BlendFactor::kOneMinusBlendColor
@ kOneMinusBlendColor
impeller::IndexType::kNone
@ kNone
Does not use the index buffer.
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:409
impeller::PixelFormat::kR16G16B16A16Float
@ kR16G16B16A16Float
impeller::StencilAttachmentDescriptor::depth_stencil_pass
StencilOperation depth_stencil_pass
Definition: formats.h:623
impeller::ToVKSampleCountFlagBits
constexpr vk::SampleCountFlagBits ToVKSampleCountFlagBits(SampleCount count)
Definition: formats_vk.h:19
impeller::ShaderStage::kFragment
@ kFragment
impeller::StoreAction::kStore
@ kStore
impeller::ToVkShaderStage
constexpr vk::ShaderStageFlags ToVkShaderStage(ShaderStage stage)
Definition: formats_vk.h:251
impeller::CompareFunction::kLessEqual
@ kLessEqual
Comparison test passes if new_value <= current_value.
impeller::BlendFactor::kOne
@ kOne
impeller::BlendFactor::kOneMinusBlendAlpha
@ kOneMinusBlendAlpha
impeller::DescriptorType::kSampledImage
@ kSampledImage
impeller::ToVKImageViewType
constexpr vk::ImageViewType ToVKImageViewType(TextureType type)
Definition: formats_vk.h:530
impeller::CompareFunction::kAlways
@ kAlways
Comparison test passes always passes.
impeller::ToVKImageAspectFlags
constexpr vk::ImageAspectFlags ToVKImageAspectFlags(PixelFormat format)
Definition: formats_vk.h:490
impeller::TextureType::kTexture2D
@ kTexture2D
impeller::StencilOperation::kZero
@ kZero
Reset the stencil value to zero.
impeller::PixelFormat::kR32G32B32A32Float
@ kR32G32B32A32Float
impeller::DescriptorType::kUniformBuffer
@ kUniformBuffer
impeller::PixelFormat::kUnknown
@ kUnknown
impeller::CompareFunction::kNever
@ kNever
Comparison test never passes.
impeller::ColorAttachmentDescriptor::src_alpha_blend_factor
BlendFactor src_alpha_blend_factor
Definition: formats.h:520
impeller::ToVKAttachmentLoadOp
constexpr vk::AttachmentLoadOp ToVKAttachmentLoadOp(LoadAction load_action)
Definition: formats_vk.h:300
VALIDATION_LOG
#define VALIDATION_LOG
Definition: validation.h:73
impeller::CullMode::kFrontFace
@ kFrontFace
impeller::ColorWriteMaskBits::kAlpha
@ kAlpha
impeller::ColorAttachmentDescriptor::dst_color_blend_factor
BlendFactor dst_color_blend_factor
Definition: formats.h:518
impeller::BlendOperation
BlendOperation
Definition: formats.h:196
impeller::ColorAttachmentDescriptor::dst_alpha_blend_factor
BlendFactor dst_alpha_blend_factor
Definition: formats.h:522
impeller::ToVKSamplerMinMagFilter
constexpr vk::Filter ToVKSamplerMinMagFilter(MinMagFilter filter)
Definition: formats_vk.h:212
impeller::MipFilter::kBase
@ kBase
The texture is sampled as if it only had a single mipmap level.
impeller::PixelFormat::kR8G8B8A8UNormIntSRGB
@ kR8G8B8A8UNormIntSRGB
impeller::SamplerAddressMode::kMirror
@ kMirror
impeller::ShaderStage::kVertex
@ kVertex
impeller::LoadAction::kDontCare
@ kDontCare
impeller::StencilAttachmentDescriptor
Definition: formats.h:604
impeller::SampleCount
SampleCount
Definition: formats.h:295
impeller::BlendFactor::kOneMinusSourceColor
@ kOneMinusSourceColor
impeller::ColorWriteMaskBits::kRed
@ kRed
impeller::MipFilter::kLinear
@ kLinear
Sample from the two nearest mip levels and linearly interpolate.
impeller::ColorWriteMaskBits::kBlue
@ kBlue
impeller::kUnusedAttachmentReference
static constexpr vk::AttachmentReference kUnusedAttachmentReference
Definition: formats_vk.h:415
impeller::SampleCount::kCount1
@ kCount1
impeller::SampleCount::kCount4
@ kCount4
impeller::PolygonMode::kLine
@ kLine
impeller::DescriptorType::kInputAttachment
@ kInputAttachment
impeller::ShaderStage::kCompute
@ kCompute
impeller::ColorAttachmentDescriptor::color_blend_op
BlendOperation color_blend_op
Definition: formats.h:517
impeller::CompareFunction::kNotEqual
@ kNotEqual
Comparison test passes if new_value != current_value.
impeller::PixelFormat::kB10G10R10XRSRGB
@ kB10G10R10XRSRGB
impeller::ToVKBlendOp
constexpr vk::BlendOp ToVKBlendOp(BlendOperation op)
Definition: formats_vk.h:65
impeller::ToVKShaderStageFlagBits
constexpr std::optional< vk::ShaderStageFlagBits > ToVKShaderStageFlagBits(ShaderStage stage)
Definition: formats_vk.h:118
impeller::PixelFormat::kB8G8R8A8UNormInt
@ kB8G8R8A8UNormInt
impeller::BlendFactor::kSourceAlpha
@ kSourceAlpha
impeller::DescriptorSetLayout::descriptor_type
DescriptorType descriptor_type
Definition: shader_types.h:164
shader_types.h
impeller::CompareFunction::kLess
@ kLess
Comparison test passes if new_value < current_value.
impeller
Definition: aiks_blend_unittests.cc:18
impeller::ColorAttachmentDescriptor::blending_enabled
bool blending_enabled
Definition: formats.h:514
impeller::BlendOperation::kSubtract
@ kSubtract
impeller::IndexType::kUnknown
@ kUnknown
impeller::DescriptorSetLayout::binding
uint32_t binding
Definition: shader_types.h:163
impeller::BlendFactor::kOneMinusDestinationAlpha
@ kOneMinusDestinationAlpha
impeller::ToPixelFormat
static PixelFormat ToPixelFormat(AHardwareBuffer_Format format)
Definition: ahb_texture_source_vk.cc:221
impeller::DescriptorType::kStorageBuffer
@ kStorageBuffer
impeller::ColorAttachmentDescriptor::write_mask
ColorWriteMask write_mask
Definition: formats.h:524
impeller::DescriptorType
DescriptorType
Definition: shader_types.h:153
impeller::StoreActionPerformsResolve
constexpr bool StoreActionPerformsResolve(StoreAction store_action)
Definition: formats_vk.h:337
impeller::ToImageAspectFlags
constexpr vk::ImageAspectFlags ToImageAspectFlags(PixelFormat format)
Definition: formats_vk.h:563
impeller::ColorAttachmentDescriptor
Describe the color attachment that will be used with this pipeline.
Definition: formats.h:512
impeller::SamplerAddressMode::kRepeat
@ kRepeat
impeller::SamplerAddressMode::kDecal
@ kDecal
decal sampling mode is only supported on devices that pass the Capabilities.SupportsDecalSamplerAddre...