5 #ifndef FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_FORMATS_VK_H_
6 #define FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_FORMATS_VK_H_
15 #include "vulkan/vulkan_enums.hpp"
22 return vk::SampleCountFlagBits::e1;
24 return vk::SampleCountFlagBits::e4;
32 return vk::BlendFactor::eZero;
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;
68 return vk::BlendOp::eAdd;
70 return vk::BlendOp::eSubtract;
72 return vk::BlendOp::eReverseSubtract;
78 vk::ColorComponentFlags mask;
81 mask |= vk::ColorComponentFlagBits::eR;
85 mask |= vk::ColorComponentFlagBits::eG;
89 mask |= vk::ColorComponentFlagBits::eB;
93 mask |= vk::ColorComponentFlagBits::eA;
99 constexpr vk::PipelineColorBlendAttachmentState
101 vk::PipelineColorBlendAttachmentState res;
124 return vk::ShaderStageFlagBits::eVertex;
126 return vk::ShaderStageFlagBits::eFragment;
128 return vk::ShaderStageFlagBits::eCompute;
139 return vk::Format::eUndefined;
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;
172 case vk::Format::eUndefined:
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:
188 case vk::Format::eD24UnormS8Uint:
190 case vk::Format::eD32SfloatS8Uint:
192 case vk::Format::eR8Unorm:
194 case vk::Format::eR8G8Unorm:
202 switch (sample_count) {
204 return vk::SampleCountFlagBits::e1;
206 return vk::SampleCountFlagBits::e4;
215 return vk::Filter::eNearest;
217 return vk::Filter::eLinear;
227 return vk::SamplerMipmapMode::eNearest;
229 return vk::SamplerMipmapMode::eLinear;
239 return vk::SamplerAddressMode::eRepeat;
241 return vk::SamplerAddressMode::eMirroredRepeat;
243 return vk::SamplerAddressMode::eClampToEdge;
245 return vk::SamplerAddressMode::eClampToBorder;
254 return vk::ShaderStageFlagBits::eAll;
256 return vk::ShaderStageFlagBits::eFragment;
258 return vk::ShaderStageFlagBits::eCompute;
260 return vk::ShaderStageFlagBits::eVertex;
269 return vk::DescriptorType::eCombinedImageSampler;
272 return vk::DescriptorType::eUniformBuffer;
275 return vk::DescriptorType::eStorageBuffer;
278 return vk::DescriptorType::eSampledImage;
281 return vk::DescriptorType::eSampler;
284 return vk::DescriptorType::eInputAttachment;
292 vk::DescriptorSetLayoutBinding binding;
293 binding.binding = layout.
binding;
294 binding.descriptorCount = 1u;
301 switch (load_action) {
303 return vk::AttachmentLoadOp::eLoad;
305 return vk::AttachmentLoadOp::eClear;
307 return vk::AttachmentLoadOp::eDontCare;
314 bool is_resolve_texture) {
315 switch (store_action) {
319 return vk::AttachmentStoreOp::eStore;
323 return vk::AttachmentStoreOp::eDontCare;
327 return is_resolve_texture ? vk::AttachmentStoreOp::eStore
328 : vk::AttachmentStoreOp::eDontCare;
332 return vk::AttachmentStoreOp::eStore;
338 switch (store_action) {
350 switch (index_type) {
352 return vk::IndexType::eUint16;
354 return vk::IndexType::eUint32;
356 return vk::IndexType::eUint32;
367 return vk::PolygonMode::eFill;
369 return vk::PolygonMode::eLine;
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;
387 return vk::PrimitiveTopology::eTriangleFan;
418 VK_ATTACHMENT_UNUSED, vk::ImageLayout::eUndefined};
423 return vk::CullModeFlagBits::eNone;
425 return vk::CullModeFlagBits::eFront;
427 return vk::CullModeFlagBits::eBack;
435 return vk::CompareOp::eNever;
437 return vk::CompareOp::eAlways;
439 return vk::CompareOp::eLess;
441 return vk::CompareOp::eEqual;
443 return vk::CompareOp::eLessOrEqual;
445 return vk::CompareOp::eGreater;
447 return vk::CompareOp::eNotEqual;
449 return vk::CompareOp::eGreaterOrEqual;
457 return vk::StencilOp::eKeep;
459 return vk::StencilOp::eZero;
461 return vk::StencilOp::eReplace;
463 return vk::StencilOp::eIncrementAndClamp;
465 return vk::StencilOp::eDecrementAndClamp;
467 return vk::StencilOp::eInvert;
469 return vk::StencilOp::eIncrementAndWrap;
471 return vk::StencilOp::eDecrementAndWrap;
479 vk::StencilOpState state;
488 state.reference = 1988;
507 return vk::ImageAspectFlagBits::eColor;
509 return vk::ImageAspectFlagBits::eStencil;
512 return vk::ImageAspectFlagBits::eDepth |
513 vk::ImageAspectFlagBits::eStencil;
527 <<
"kTextureExternalOES can not be used with the Vulkan backend.";
536 return vk::ImageViewType::e2D;
538 return vk::ImageViewType::eCube;
541 <<
"kTextureExternalOES can not be used with the Vulkan backend.";
552 return vk::ImageCreateFlagBits::eCubeCompatible;
555 <<
"kTextureExternalOES can not be used with the Vulkan backend.";
561 std::optional<DepthAttachmentDescriptor> depth,
562 std::optional<StencilAttachmentDescriptor> front,
563 std::optional<StencilAttachmentDescriptor> back);
581 return vk::ImageAspectFlagBits::eColor;
583 return vk::ImageAspectFlagBits::eStencil;
586 return vk::ImageAspectFlagBits::eDepth |
587 vk::ImageAspectFlagBits::eStencil;
594 #endif // FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_FORMATS_VK_H_