5 #ifndef FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_FORMATS_VK_H_
6 #define FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_FORMATS_VK_H_
11 #include "flutter/fml/hash_combine.h"
12 #include "flutter/fml/macros.h"
17 #include "vulkan/vulkan_enums.hpp"
24 return vk::SampleCountFlagBits::e1;
26 return vk::SampleCountFlagBits::e4;
34 return vk::BlendFactor::eZero;
36 return vk::BlendFactor::eOne;
38 return vk::BlendFactor::eSrcColor;
40 return vk::BlendFactor::eOneMinusSrcColor;
42 return vk::BlendFactor::eSrcAlpha;
44 return vk::BlendFactor::eOneMinusSrcAlpha;
46 return vk::BlendFactor::eDstColor;
48 return vk::BlendFactor::eOneMinusDstColor;
50 return vk::BlendFactor::eDstAlpha;
52 return vk::BlendFactor::eOneMinusDstAlpha;
54 return vk::BlendFactor::eSrcAlphaSaturate;
56 return vk::BlendFactor::eConstantColor;
58 return vk::BlendFactor::eOneMinusConstantColor;
60 return vk::BlendFactor::eConstantAlpha;
62 return vk::BlendFactor::eOneMinusConstantAlpha;
70 return vk::BlendOp::eAdd;
72 return vk::BlendOp::eSubtract;
74 return vk::BlendOp::eReverseSubtract;
80 vk::ColorComponentFlags mask;
83 mask |= vk::ColorComponentFlagBits::eR;
87 mask |= vk::ColorComponentFlagBits::eG;
91 mask |= vk::ColorComponentFlagBits::eB;
95 mask |= vk::ColorComponentFlagBits::eA;
101 constexpr vk::PipelineColorBlendAttachmentState
103 vk::PipelineColorBlendAttachmentState res;
126 return vk::ShaderStageFlagBits::eVertex;
128 return vk::ShaderStageFlagBits::eFragment;
130 return vk::ShaderStageFlagBits::eCompute;
141 return vk::Format::eUndefined;
144 return vk::Format::eR8Unorm;
146 return vk::Format::eR8G8B8A8Unorm;
148 return vk::Format::eR8G8B8A8Srgb;
150 return vk::Format::eB8G8R8A8Unorm;
152 return vk::Format::eB8G8R8A8Srgb;
154 return vk::Format::eR32G32B32A32Sfloat;
156 return vk::Format::eR16G16B16A16Sfloat;
158 return vk::Format::eS8Uint;
160 return vk::Format::eD24UnormS8Uint;
162 return vk::Format::eD32SfloatS8Uint;
164 return vk::Format::eR8Unorm;
166 return vk::Format::eR8G8Unorm;
174 case vk::Format::eUndefined:
176 case vk::Format::eR8G8B8A8Unorm:
178 case vk::Format::eR8G8B8A8Srgb:
180 case vk::Format::eB8G8R8A8Unorm:
182 case vk::Format::eB8G8R8A8Srgb:
184 case vk::Format::eR32G32B32A32Sfloat:
186 case vk::Format::eR16G16B16A16Sfloat:
188 case vk::Format::eS8Uint:
190 case vk::Format::eD24UnormS8Uint:
192 case vk::Format::eD32SfloatS8Uint:
194 case vk::Format::eR8Unorm:
196 case vk::Format::eR8G8Unorm:
204 switch (sample_count) {
206 return vk::SampleCountFlagBits::e1;
208 return vk::SampleCountFlagBits::e4;
217 return vk::Filter::eNearest;
219 return vk::Filter::eLinear;
228 return vk::SamplerMipmapMode::eNearest;
230 return vk::SamplerMipmapMode::eLinear;
240 return vk::SamplerAddressMode::eRepeat;
242 return vk::SamplerAddressMode::eMirroredRepeat;
244 return vk::SamplerAddressMode::eClampToEdge;
246 return vk::SamplerAddressMode::eClampToBorder;
255 return vk::ShaderStageFlagBits::eAll;
257 return vk::ShaderStageFlagBits::eFragment;
259 return vk::ShaderStageFlagBits::eCompute;
261 return vk::ShaderStageFlagBits::eVertex;
270 return vk::DescriptorType::eCombinedImageSampler;
273 return vk::DescriptorType::eUniformBuffer;
276 return vk::DescriptorType::eStorageBuffer;
279 return vk::DescriptorType::eSampledImage;
282 return vk::DescriptorType::eSampler;
285 return vk::DescriptorType::eInputAttachment;
293 vk::DescriptorSetLayoutBinding binding;
294 binding.binding = layout.
binding;
295 binding.descriptorCount = 1u;
302 switch (load_action) {
304 return vk::AttachmentLoadOp::eLoad;
306 return vk::AttachmentLoadOp::eClear;
308 return vk::AttachmentLoadOp::eDontCare;
315 bool is_resolve_texture) {
316 switch (store_action) {
320 return vk::AttachmentStoreOp::eStore;
324 return vk::AttachmentStoreOp::eDontCare;
328 return is_resolve_texture ? vk::AttachmentStoreOp::eStore
329 : vk::AttachmentStoreOp::eDontCare;
333 return vk::AttachmentStoreOp::eStore;
339 switch (store_action) {
351 switch (index_type) {
353 return vk::IndexType::eUint16;
355 return vk::IndexType::eUint32;
357 return vk::IndexType::eUint32;
368 return vk::PolygonMode::eFill;
370 return vk::PolygonMode::eLine;
378 return vk::PrimitiveTopology::eTriangleList;
380 return vk::PrimitiveTopology::eTriangleStrip;
382 return vk::PrimitiveTopology::eLineList;
384 return vk::PrimitiveTopology::eLineStrip;
386 return vk::PrimitiveTopology::ePointList;
417 VK_ATTACHMENT_UNUSED, vk::ImageLayout::eUndefined};
422 return vk::CullModeFlagBits::eNone;
424 return vk::CullModeFlagBits::eFront;
426 return vk::CullModeFlagBits::eBack;
434 return vk::CompareOp::eNever;
436 return vk::CompareOp::eAlways;
438 return vk::CompareOp::eLess;
440 return vk::CompareOp::eEqual;
442 return vk::CompareOp::eLessOrEqual;
444 return vk::CompareOp::eGreater;
446 return vk::CompareOp::eNotEqual;
448 return vk::CompareOp::eGreaterOrEqual;
456 return vk::StencilOp::eKeep;
458 return vk::StencilOp::eZero;
460 return vk::StencilOp::eReplace;
462 return vk::StencilOp::eIncrementAndClamp;
464 return vk::StencilOp::eDecrementAndClamp;
466 return vk::StencilOp::eInvert;
468 return vk::StencilOp::eIncrementAndWrap;
470 return vk::StencilOp::eDecrementAndWrap;
478 vk::StencilOpState state;
487 state.reference = 1988;
506 return vk::ImageAspectFlagBits::eColor;
508 return vk::ImageAspectFlagBits::eStencil;
511 return vk::ImageAspectFlagBits::eDepth |
512 vk::ImageAspectFlagBits::eStencil;
526 <<
"kTextureExternalOES can not be used with the Vulkan backend.";
535 return vk::ImageViewType::e2D;
537 return vk::ImageViewType::eCube;
540 <<
"kTextureExternalOES can not be used with the Vulkan backend.";
551 return vk::ImageCreateFlagBits::eCubeCompatible;
554 <<
"kTextureExternalOES can not be used with the Vulkan backend.";
560 std::optional<DepthAttachmentDescriptor> depth,
561 std::optional<StencilAttachmentDescriptor> front,
562 std::optional<StencilAttachmentDescriptor> back);
580 return vk::ImageAspectFlagBits::eColor;
582 return vk::ImageAspectFlagBits::eStencil;
585 return vk::ImageAspectFlagBits::eDepth |
586 vk::ImageAspectFlagBits::eStencil;
593 #endif // FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_FORMATS_VK_H_