blob: 0b3001a8daf24204b2d9500f2d4f399c8da544e5 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "fml/logging.h"
#include "impeller/core/formats.h"
#include "impeller/core/shader_types.h"
// ATTENTION! ATTENTION! ATTENTION!
// All enums defined in this file must exactly match the contents and order of
// the corresponding enums defined in `gpu/lib/src/formats.dart`.
namespace flutter {
namespace gpu {
enum class FlutterGPUStorageMode {
kHostVisible,
kDevicePrivate,
kDeviceTransient,
};
constexpr impeller::StorageMode ToImpellerStorageMode(
FlutterGPUStorageMode value) {
switch (value) {
case FlutterGPUStorageMode::kHostVisible:
return impeller::StorageMode::kHostVisible;
case FlutterGPUStorageMode::kDevicePrivate:
return impeller::StorageMode::kDevicePrivate;
case FlutterGPUStorageMode::kDeviceTransient:
return impeller::StorageMode::kDeviceTransient;
}
}
constexpr impeller::StorageMode ToImpellerStorageMode(int value) {
return ToImpellerStorageMode(static_cast<FlutterGPUStorageMode>(value));
}
enum class FlutterGPUPixelFormat {
kUnknown,
kA8UNormInt,
kR8UNormInt,
kR8G8UNormInt,
kR8G8B8A8UNormInt,
kR8G8B8A8UNormIntSRGB,
kB8G8R8A8UNormInt,
kB8G8R8A8UNormIntSRGB,
kR32G32B32A32Float,
kR16G16B16A16Float,
kB10G10R10XR,
kB10G10R10XRSRGB,
kB10G10R10A10XR,
kS8UInt,
kD24UnormS8Uint,
kD32FloatS8UInt,
};
constexpr impeller::PixelFormat ToImpellerPixelFormat(
FlutterGPUPixelFormat value) {
switch (value) {
case FlutterGPUPixelFormat::kUnknown:
return impeller::PixelFormat::kUnknown;
case FlutterGPUPixelFormat::kA8UNormInt:
return impeller::PixelFormat::kA8UNormInt;
case FlutterGPUPixelFormat::kR8UNormInt:
return impeller::PixelFormat::kR8UNormInt;
case FlutterGPUPixelFormat::kR8G8UNormInt:
return impeller::PixelFormat::kR8G8UNormInt;
case FlutterGPUPixelFormat::kR8G8B8A8UNormInt:
return impeller::PixelFormat::kR8G8B8A8UNormInt;
case FlutterGPUPixelFormat::kR8G8B8A8UNormIntSRGB:
return impeller::PixelFormat::kR8G8B8A8UNormIntSRGB;
case FlutterGPUPixelFormat::kB8G8R8A8UNormInt:
return impeller::PixelFormat::kB8G8R8A8UNormInt;
case FlutterGPUPixelFormat::kB8G8R8A8UNormIntSRGB:
return impeller::PixelFormat::kB8G8R8A8UNormIntSRGB;
case FlutterGPUPixelFormat::kR32G32B32A32Float:
return impeller::PixelFormat::kR32G32B32A32Float;
case FlutterGPUPixelFormat::kR16G16B16A16Float:
return impeller::PixelFormat::kR16G16B16A16Float;
case FlutterGPUPixelFormat::kB10G10R10XR:
return impeller::PixelFormat::kB10G10R10XR;
case FlutterGPUPixelFormat::kB10G10R10XRSRGB:
return impeller::PixelFormat::kB10G10R10XRSRGB;
case FlutterGPUPixelFormat::kB10G10R10A10XR:
return impeller::PixelFormat::kB10G10R10A10XR;
case FlutterGPUPixelFormat::kS8UInt:
return impeller::PixelFormat::kS8UInt;
case FlutterGPUPixelFormat::kD24UnormS8Uint:
return impeller::PixelFormat::kD24UnormS8Uint;
case FlutterGPUPixelFormat::kD32FloatS8UInt:
return impeller::PixelFormat::kD32FloatS8UInt;
}
}
constexpr impeller::PixelFormat ToImpellerPixelFormat(int value) {
return ToImpellerPixelFormat(static_cast<FlutterGPUPixelFormat>(value));
}
constexpr FlutterGPUPixelFormat FromImpellerPixelFormat(
impeller::PixelFormat value) {
switch (value) {
case impeller::PixelFormat::kUnknown:
return FlutterGPUPixelFormat::kUnknown;
case impeller::PixelFormat::kA8UNormInt:
return FlutterGPUPixelFormat::kA8UNormInt;
case impeller::PixelFormat::kR8UNormInt:
return FlutterGPUPixelFormat::kR8UNormInt;
case impeller::PixelFormat::kR8G8UNormInt:
return FlutterGPUPixelFormat::kR8G8UNormInt;
case impeller::PixelFormat::kR8G8B8A8UNormInt:
return FlutterGPUPixelFormat::kR8G8B8A8UNormInt;
case impeller::PixelFormat::kR8G8B8A8UNormIntSRGB:
return FlutterGPUPixelFormat::kR8G8B8A8UNormIntSRGB;
case impeller::PixelFormat::kB8G8R8A8UNormInt:
return FlutterGPUPixelFormat::kB8G8R8A8UNormInt;
case impeller::PixelFormat::kB8G8R8A8UNormIntSRGB:
return FlutterGPUPixelFormat::kB8G8R8A8UNormIntSRGB;
case impeller::PixelFormat::kR32G32B32A32Float:
return FlutterGPUPixelFormat::kR32G32B32A32Float;
case impeller::PixelFormat::kR16G16B16A16Float:
return FlutterGPUPixelFormat::kR16G16B16A16Float;
case impeller::PixelFormat::kB10G10R10XR:
return FlutterGPUPixelFormat::kB10G10R10XR;
case impeller::PixelFormat::kB10G10R10XRSRGB:
return FlutterGPUPixelFormat::kB10G10R10XRSRGB;
case impeller::PixelFormat::kB10G10R10A10XR:
return FlutterGPUPixelFormat::kB10G10R10A10XR;
case impeller::PixelFormat::kS8UInt:
return FlutterGPUPixelFormat::kS8UInt;
case impeller::PixelFormat::kD24UnormS8Uint:
return FlutterGPUPixelFormat::kD24UnormS8Uint;
case impeller::PixelFormat::kD32FloatS8UInt:
return FlutterGPUPixelFormat::kD32FloatS8UInt;
}
}
enum class FlutterGPUTextureCoordinateSystem {
kUploadFromHost,
kRenderToTexture,
};
constexpr impeller::TextureCoordinateSystem ToImpellerTextureCoordinateSystem(
FlutterGPUTextureCoordinateSystem value) {
switch (value) {
case FlutterGPUTextureCoordinateSystem::kUploadFromHost:
return impeller::TextureCoordinateSystem::kUploadFromHost;
case FlutterGPUTextureCoordinateSystem::kRenderToTexture:
return impeller::TextureCoordinateSystem::kRenderToTexture;
}
}
constexpr impeller::TextureCoordinateSystem ToImpellerTextureCoordinateSystem(
int value) {
return ToImpellerTextureCoordinateSystem(
static_cast<FlutterGPUTextureCoordinateSystem>(value));
}
enum class FlutterGPUBlendFactor {
kZero,
kOne,
kSourceColor,
kOneMinusSourceColor,
kSourceAlpha,
kOneMinusSourceAlpha,
kDestinationColor,
kOneMinusDestinationColor,
kDestinationAlpha,
kOneMinusDestinationAlpha,
kSourceAlphaSaturated,
kBlendColor,
kOneMinusBlendColor,
kBlendAlpha,
kOneMinusBlendAlpha,
};
constexpr impeller::BlendFactor ToImpellerBlendFactor(
FlutterGPUBlendFactor value) {
switch (value) {
case FlutterGPUBlendFactor::kZero:
return impeller::BlendFactor::kZero;
case FlutterGPUBlendFactor::kOne:
return impeller::BlendFactor::kOne;
case FlutterGPUBlendFactor::kSourceColor:
return impeller::BlendFactor::kSourceColor;
case FlutterGPUBlendFactor::kOneMinusSourceColor:
return impeller::BlendFactor::kOneMinusSourceColor;
case FlutterGPUBlendFactor::kSourceAlpha:
return impeller::BlendFactor::kSourceAlpha;
case FlutterGPUBlendFactor::kOneMinusSourceAlpha:
return impeller::BlendFactor::kOneMinusSourceAlpha;
case FlutterGPUBlendFactor::kDestinationColor:
return impeller::BlendFactor::kDestinationColor;
case FlutterGPUBlendFactor::kOneMinusDestinationColor:
return impeller::BlendFactor::kOneMinusDestinationColor;
case FlutterGPUBlendFactor::kDestinationAlpha:
return impeller::BlendFactor::kDestinationAlpha;
case FlutterGPUBlendFactor::kOneMinusDestinationAlpha:
return impeller::BlendFactor::kOneMinusDestinationAlpha;
case FlutterGPUBlendFactor::kSourceAlphaSaturated:
return impeller::BlendFactor::kSourceAlphaSaturated;
case FlutterGPUBlendFactor::kBlendColor:
return impeller::BlendFactor::kBlendColor;
case FlutterGPUBlendFactor::kOneMinusBlendColor:
return impeller::BlendFactor::kOneMinusBlendColor;
case FlutterGPUBlendFactor::kBlendAlpha:
return impeller::BlendFactor::kBlendAlpha;
case FlutterGPUBlendFactor::kOneMinusBlendAlpha:
return impeller::BlendFactor::kOneMinusBlendAlpha;
}
}
constexpr impeller::BlendFactor ToImpellerBlendFactor(int value) {
return ToImpellerBlendFactor(static_cast<FlutterGPUBlendFactor>(value));
}
enum class FlutterGPUBlendOperation {
kAdd,
kSubtract,
kReverseSubtract,
};
constexpr impeller::BlendOperation ToImpellerBlendOperation(
FlutterGPUBlendOperation value) {
switch (value) {
case FlutterGPUBlendOperation::kAdd:
return impeller::BlendOperation::kAdd;
case FlutterGPUBlendOperation::kSubtract:
return impeller::BlendOperation::kSubtract;
case FlutterGPUBlendOperation::kReverseSubtract:
return impeller::BlendOperation::kReverseSubtract;
}
}
constexpr impeller::BlendOperation ToImpellerBlendOperation(int value) {
return ToImpellerBlendOperation(static_cast<FlutterGPUBlendOperation>(value));
}
enum class FlutterGPULoadAction {
kDontCare,
kLoad,
kClear,
};
constexpr impeller::LoadAction ToImpellerLoadAction(
FlutterGPULoadAction value) {
switch (value) {
case FlutterGPULoadAction::kDontCare:
return impeller::LoadAction::kDontCare;
case FlutterGPULoadAction::kLoad:
return impeller::LoadAction::kLoad;
case FlutterGPULoadAction::kClear:
return impeller::LoadAction::kClear;
}
}
constexpr impeller::LoadAction ToImpellerLoadAction(int value) {
return ToImpellerLoadAction(static_cast<FlutterGPULoadAction>(value));
}
enum class FlutterGPUStoreAction {
kDontCare,
kStore,
kMultisampleResolve,
kStoreAndMultisampleResolve,
};
constexpr impeller::StoreAction ToImpellerStoreAction(
FlutterGPUStoreAction value) {
switch (value) {
case FlutterGPUStoreAction::kDontCare:
return impeller::StoreAction::kDontCare;
case FlutterGPUStoreAction::kStore:
return impeller::StoreAction::kStore;
case FlutterGPUStoreAction::kMultisampleResolve:
return impeller::StoreAction::kMultisampleResolve;
case FlutterGPUStoreAction::kStoreAndMultisampleResolve:
return impeller::StoreAction::kStoreAndMultisampleResolve;
}
}
constexpr impeller::StoreAction ToImpellerStoreAction(int value) {
return ToImpellerStoreAction(static_cast<FlutterGPUStoreAction>(value));
}
enum class FlutterGPUShaderStage {
kVertex,
kFragment,
};
constexpr impeller::ShaderStage ToImpellerShaderStage(
FlutterGPUShaderStage value) {
switch (value) {
case FlutterGPUShaderStage::kVertex:
return impeller::ShaderStage::kVertex;
case FlutterGPUShaderStage::kFragment:
return impeller::ShaderStage::kFragment;
}
}
constexpr impeller::ShaderStage ToImpellerShaderStage(int value) {
return ToImpellerShaderStage(static_cast<FlutterGPUShaderStage>(value));
}
constexpr FlutterGPUShaderStage FromImpellerShaderStage(
impeller::ShaderStage value) {
switch (value) {
case impeller::ShaderStage::kVertex:
return FlutterGPUShaderStage::kVertex;
case impeller::ShaderStage::kFragment:
return FlutterGPUShaderStage::kFragment;
case impeller::ShaderStage::kUnknown:
case impeller::ShaderStage::kCompute:
FML_LOG(FATAL) << "Invalid Flutter GPU ShaderStage "
<< static_cast<size_t>(value);
FML_UNREACHABLE();
}
}
enum class FlutterGPUMinMagFilter {
kNearest,
kLinear,
};
constexpr impeller::MinMagFilter ToImpellerMinMagFilter(
FlutterGPUMinMagFilter value) {
switch (value) {
case FlutterGPUMinMagFilter::kNearest:
return impeller::MinMagFilter::kNearest;
case FlutterGPUMinMagFilter::kLinear:
return impeller::MinMagFilter::kLinear;
}
}
constexpr impeller::MinMagFilter ToImpellerMinMagFilter(int value) {
return ToImpellerMinMagFilter(static_cast<FlutterGPUMinMagFilter>(value));
}
enum class FlutterGPUMipFilter {
kNearest,
kLinear,
};
constexpr impeller::MipFilter ToImpellerMipFilter(FlutterGPUMipFilter value) {
switch (value) {
case FlutterGPUMipFilter::kNearest:
return impeller::MipFilter::kNearest;
case FlutterGPUMipFilter::kLinear:
return impeller::MipFilter::kLinear;
}
}
constexpr impeller::MipFilter ToImpellerMipFilter(int value) {
return ToImpellerMipFilter(static_cast<FlutterGPUMipFilter>(value));
}
enum class FlutterGPUSamplerAddressMode {
kClampToEdge,
kRepeat,
kMirror,
};
constexpr impeller::SamplerAddressMode ToImpellerSamplerAddressMode(
FlutterGPUSamplerAddressMode value) {
switch (value) {
case FlutterGPUSamplerAddressMode::kClampToEdge:
return impeller::SamplerAddressMode::kClampToEdge;
case FlutterGPUSamplerAddressMode::kRepeat:
return impeller::SamplerAddressMode::kRepeat;
case FlutterGPUSamplerAddressMode::kMirror:
return impeller::SamplerAddressMode::kMirror;
}
}
constexpr impeller::SamplerAddressMode ToImpellerSamplerAddressMode(int value) {
return ToImpellerSamplerAddressMode(
static_cast<FlutterGPUSamplerAddressMode>(value));
}
enum class FlutterGPUIndexType {
k16bit,
k32bit,
};
constexpr impeller::IndexType ToImpellerIndexType(FlutterGPUIndexType value) {
switch (value) {
case FlutterGPUIndexType::k16bit:
return impeller::IndexType::k16bit;
case FlutterGPUIndexType::k32bit:
return impeller::IndexType::k32bit;
}
}
constexpr impeller::IndexType ToImpellerIndexType(int value) {
return ToImpellerIndexType(static_cast<FlutterGPUIndexType>(value));
}
enum class FlutterGPUPrimitiveType {
kTriangle,
kTriangleStrip,
kLine,
kLineStrip,
kPoint,
};
constexpr impeller::PrimitiveType ToImpellerPrimitiveType(
FlutterGPUPrimitiveType value) {
switch (value) {
case FlutterGPUPrimitiveType::kTriangle:
return impeller::PrimitiveType::kTriangle;
case FlutterGPUPrimitiveType::kTriangleStrip:
return impeller::PrimitiveType::kTriangleStrip;
case FlutterGPUPrimitiveType::kLine:
return impeller::PrimitiveType::kLine;
case FlutterGPUPrimitiveType::kLineStrip:
return impeller::PrimitiveType::kLineStrip;
case FlutterGPUPrimitiveType::kPoint:
return impeller::PrimitiveType::kPoint;
}
}
constexpr impeller::PrimitiveType ToImpellerPrimitiveType(int value) {
return ToImpellerPrimitiveType(static_cast<FlutterGPUPrimitiveType>(value));
}
enum class FlutterGPUCompareFunction {
kNever,
kAlways,
kLess,
kEqual,
kLessEqual,
kGreater,
kNotEqual,
kGreaterEqual,
};
constexpr impeller::CompareFunction ToImpellerCompareFunction(
FlutterGPUCompareFunction value) {
switch (value) {
case FlutterGPUCompareFunction::kNever:
return impeller::CompareFunction::kNever;
case FlutterGPUCompareFunction::kAlways:
return impeller::CompareFunction::kAlways;
case FlutterGPUCompareFunction::kLess:
return impeller::CompareFunction::kLess;
case FlutterGPUCompareFunction::kEqual:
return impeller::CompareFunction::kEqual;
case FlutterGPUCompareFunction::kLessEqual:
return impeller::CompareFunction::kLessEqual;
case FlutterGPUCompareFunction::kGreater:
return impeller::CompareFunction::kGreater;
case FlutterGPUCompareFunction::kNotEqual:
return impeller::CompareFunction::kNotEqual;
case FlutterGPUCompareFunction::kGreaterEqual:
return impeller::CompareFunction::kGreaterEqual;
}
}
constexpr impeller::CompareFunction ToImpellerCompareFunction(int value) {
return ToImpellerCompareFunction(
static_cast<FlutterGPUCompareFunction>(value));
}
enum class FlutterGPUStencilOperation {
kKeep,
kZero,
kSetToReferenceValue,
kIncrementClamp,
kDecrementClamp,
kInvert,
kIncrementWrap,
kDecrementWrap,
};
constexpr impeller::StencilOperation ToImpellerStencilOperation(
FlutterGPUStencilOperation value) {
switch (value) {
case FlutterGPUStencilOperation::kKeep:
return impeller::StencilOperation::kKeep;
case FlutterGPUStencilOperation::kZero:
return impeller::StencilOperation::kZero;
case FlutterGPUStencilOperation::kSetToReferenceValue:
return impeller::StencilOperation::kSetToReferenceValue;
case FlutterGPUStencilOperation::kIncrementClamp:
return impeller::StencilOperation::kIncrementClamp;
case FlutterGPUStencilOperation::kDecrementClamp:
return impeller::StencilOperation::kDecrementClamp;
case FlutterGPUStencilOperation::kInvert:
return impeller::StencilOperation::kInvert;
case FlutterGPUStencilOperation::kIncrementWrap:
return impeller::StencilOperation::kIncrementWrap;
case FlutterGPUStencilOperation::kDecrementWrap:
return impeller::StencilOperation::kDecrementWrap;
}
}
constexpr impeller::StencilOperation ToImpellerStencilOperation(int value) {
return ToImpellerStencilOperation(
static_cast<FlutterGPUStencilOperation>(value));
}
} // namespace gpu
} // namespace flutter