363 lines
20 KiB
C++
363 lines
20 KiB
C++
//
|
|
// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
//
|
|
#pragma once
|
|
|
|
#include <backendsCommon/LayerSupportBase.hpp>
|
|
|
|
namespace armnn
|
|
{
|
|
|
|
class RefLayerSupport : public LayerSupportBase
|
|
{
|
|
public:
|
|
ARMNN_DEPRECATED_MSG("Use IsElementwiseUnarySupported instead")
|
|
bool IsAbsSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsActivationSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const ActivationDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsAdditionSupported(const TensorInfo& input0,
|
|
const TensorInfo& input1,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsArgMinMaxSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const ArgMinMaxDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsBatchNormalizationSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const TensorInfo& mean,
|
|
const TensorInfo& var,
|
|
const TensorInfo& beta,
|
|
const TensorInfo& gamma,
|
|
const BatchNormalizationDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsBatchToSpaceNdSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const BatchToSpaceNdDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsComparisonSupported(const TensorInfo& input0,
|
|
const TensorInfo& input1,
|
|
const TensorInfo& output,
|
|
const ComparisonDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsConcatSupported(const std::vector<const TensorInfo*> inputs,
|
|
const TensorInfo& output,
|
|
const ConcatDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsConstantSupported(const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsConvertBf16ToFp32Supported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsConvertFp16ToFp32Supported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsConvertFp32ToBf16Supported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsConvertFp32ToFp16Supported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsConvolution2dSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const Convolution2dDescriptor& descriptor,
|
|
const TensorInfo& weights,
|
|
const Optional<TensorInfo>& biases,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsDebugSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsDepthToSpaceSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const DepthToSpaceDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsDepthwiseConvolutionSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const DepthwiseConvolution2dDescriptor& descriptor,
|
|
const TensorInfo& weights,
|
|
const Optional<TensorInfo>& biases,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsDequantizeSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsDetectionPostProcessSupported(const TensorInfo& boxEncodings,
|
|
const TensorInfo& scores,
|
|
const TensorInfo& anchors,
|
|
const TensorInfo& detectionBoxes,
|
|
const TensorInfo& detectionClasses,
|
|
const TensorInfo& detectionScores,
|
|
const TensorInfo& numDetections,
|
|
const DetectionPostProcessDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsDilatedDepthwiseConvolutionSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const DepthwiseConvolution2dDescriptor& descriptor,
|
|
const TensorInfo& weights,
|
|
const Optional<TensorInfo>& biases,
|
|
Optional<std::string&> reasonIfUnsupported =
|
|
EmptyOptional()) const override;
|
|
|
|
bool IsDivisionSupported(const TensorInfo& input0,
|
|
const TensorInfo& input1,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsElementwiseUnarySupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const ElementwiseUnaryDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
ARMNN_DEPRECATED_MSG("Use IsComparisonSupported instead")
|
|
bool IsEqualSupported(const TensorInfo& input0,
|
|
const TensorInfo& input1,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsFakeQuantizationSupported(const TensorInfo& input,
|
|
const FakeQuantizationDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsFillSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const FillDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsFloorSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsFullyConnectedSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const TensorInfo& weights,
|
|
const TensorInfo& biases,
|
|
const FullyConnectedDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsGatherSupported(const TensorInfo& input0,
|
|
const TensorInfo& input1,
|
|
const TensorInfo& output,
|
|
const GatherDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
ARMNN_DEPRECATED_MSG("Use IsComparisonSupported instead")
|
|
bool IsGreaterSupported(const TensorInfo& input0,
|
|
const TensorInfo& input1,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsInputSupported(const TensorInfo& input,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsInstanceNormalizationSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const InstanceNormalizationDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsL2NormalizationSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const L2NormalizationDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsLogicalBinarySupported(const TensorInfo& input0,
|
|
const TensorInfo& input1,
|
|
const TensorInfo& output,
|
|
const LogicalBinaryDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported) const override;
|
|
|
|
bool IsLogSoftmaxSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const LogSoftmaxDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported) const override;
|
|
|
|
bool IsLstmSupported(const TensorInfo& input,
|
|
const TensorInfo& outputStateIn,
|
|
const TensorInfo& cellStateIn,
|
|
const TensorInfo& scratchBuffer,
|
|
const TensorInfo& outputStateOut,
|
|
const TensorInfo& cellStateOut,
|
|
const TensorInfo& output,
|
|
const LstmDescriptor& descriptor,
|
|
const LstmInputParamsInfo& paramsInfo,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsMaximumSupported(const TensorInfo& input0,
|
|
const TensorInfo& input1,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsMeanSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const MeanDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
ARMNN_DEPRECATED_MSG("Use IsConcatSupported instead")
|
|
bool IsMergerSupported(const std::vector<const TensorInfo*> inputs,
|
|
const TensorInfo& output,
|
|
const MergerDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsMemCopySupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsMinimumSupported(const TensorInfo& input0,
|
|
const TensorInfo& input1,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsMultiplicationSupported(const TensorInfo& input0,
|
|
const TensorInfo& input1,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsNormalizationSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const NormalizationDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsOutputSupported(const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsPadSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const PadDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsPermuteSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const PermuteDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsPooling2dSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const Pooling2dDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsQuantizeSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsQLstmSupported(const TensorInfo& input,
|
|
const TensorInfo& previousOutputIn,
|
|
const TensorInfo& previousCellStateIn,
|
|
const TensorInfo& outputStateOut,
|
|
const TensorInfo& cellStateOut,
|
|
const TensorInfo& output,
|
|
const QLstmDescriptor& descriptor,
|
|
const LstmInputParamsInfo& paramsInfo,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsRankSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsReshapeSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const ReshapeDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsResizeBilinearSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsResizeSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const ResizeDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
ARMNN_DEPRECATED_MSG("Use IsElementwiseUnarySupported instead")
|
|
bool IsRsqrtSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsSliceSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const SliceDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsSoftmaxSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const SoftmaxDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsSpaceToBatchNdSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const SpaceToBatchNdDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsSpaceToDepthSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const SpaceToDepthDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional())
|
|
const override;
|
|
|
|
ARMNN_DEPRECATED_MSG("Use IsSplitterSupported with outputs instead")
|
|
bool IsSplitterSupported(const TensorInfo& input,
|
|
const ViewsDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsSplitterSupported(const TensorInfo& input,
|
|
const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
|
|
const ViewsDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsStackSupported(const std::vector<const TensorInfo*>& inputs,
|
|
const TensorInfo& output,
|
|
const StackDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsStridedSliceSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const StridedSliceDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsSubtractionSupported(const TensorInfo& input0,
|
|
const TensorInfo& input1,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsPreluSupported(const TensorInfo& input,
|
|
const TensorInfo& alpha,
|
|
const TensorInfo& output,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsTransposeConvolution2dSupported(
|
|
const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const TransposeConvolution2dDescriptor& descriptor,
|
|
const TensorInfo& weights,
|
|
const Optional<TensorInfo>& biases,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
|
|
bool IsTransposeSupported(const TensorInfo& input,
|
|
const TensorInfo& output,
|
|
const TransposeDescriptor& descriptor,
|
|
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
|
|
};
|
|
|
|
} // namespace armnn
|