blob: 00e549c933b3e627a929d0ff608375b3345eeb24 [file] [log] [blame]
Derek Lambertie3803ea2019-11-13 10:36:08 +00001//
2// Copyright © 2019 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
Colm Donelan0c479742021-12-10 12:43:54 +00008#include <armnn/backends/WorkloadFactory.hpp>
Derek Lambertie3803ea2019-11-13 10:36:08 +00009
10namespace armnn
11{
12
13class WorkloadFactoryBase : public IWorkloadFactory
14{
15public:
16 bool SupportsSubTensors() const override
17 { return false; };
18
Derek Lamberti901ea112019-12-10 22:07:09 +000019 std::unique_ptr<ITensorHandle> CreateSubTensorHandle(ITensorHandle& /*parent*/,
20 TensorShape const& /*subTensorShape*/,
21 unsigned int const */*subTensorOrigin*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000022 { return nullptr; };
23
Derek Lamberti901ea112019-12-10 22:07:09 +000024 std::unique_ptr<IWorkload> CreateInput(const InputQueueDescriptor& /*descriptor*/,
25 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000026 { return nullptr; }
27
Derek Lamberti901ea112019-12-10 22:07:09 +000028 std::unique_ptr<ITensorHandle> CreateTensorHandle(const TensorInfo& /*tensorInfo*/,
29 const bool /*IsMemoryManaged*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000030 { return nullptr; }
31
Derek Lamberti901ea112019-12-10 22:07:09 +000032 std::unique_ptr<ITensorHandle> CreateTensorHandle(const TensorInfo& /*tensorInfo*/,
33 DataLayout /*dataLayout*/,
34 const bool /*IsMemoryManaged*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000035 { return nullptr; }
36
Teresa Charlin611c7fb2022-01-07 09:47:29 +000037 std::unique_ptr<IWorkload> CreateWorkload(LayerType /*type*/,
38 const QueueDescriptor& /*descriptor*/,
39 const WorkloadInfo& /*info*/) const override
40 { return nullptr; }
41
Derek Lamberti901ea112019-12-10 22:07:09 +000042 std::unique_ptr<IWorkload> CreateActivation(const ActivationQueueDescriptor& /*descriptor*/,
43 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000044 { return nullptr; }
45
Derek Lamberti901ea112019-12-10 22:07:09 +000046 std::unique_ptr<IWorkload> CreateAddition(const AdditionQueueDescriptor& /*descriptor*/,
47 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000048 { return nullptr; }
49
Derek Lamberti901ea112019-12-10 22:07:09 +000050 std::unique_ptr<IWorkload> CreateArgMinMax(const ArgMinMaxQueueDescriptor& /*descriptor*/,
51 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000052 { return nullptr; }
53
Derek Lamberti901ea112019-12-10 22:07:09 +000054 std::unique_ptr<IWorkload> CreateBatchNormalization(const BatchNormalizationQueueDescriptor& /*descriptor*/,
55 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000056 { return nullptr; }
57
Derek Lamberti901ea112019-12-10 22:07:09 +000058 std::unique_ptr<IWorkload> CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor& /*descriptor*/,
59 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000060 { return nullptr; }
61
Derek Lamberti901ea112019-12-10 22:07:09 +000062 std::unique_ptr<IWorkload> CreateComparison(const ComparisonQueueDescriptor& /*descriptor*/,
63 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000064 { return nullptr; }
65
Derek Lamberti901ea112019-12-10 22:07:09 +000066 std::unique_ptr<IWorkload> CreateConcat(const ConcatQueueDescriptor& /*descriptor*/,
67 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000068 { return nullptr; }
69
Derek Lamberti901ea112019-12-10 22:07:09 +000070 std::unique_ptr<IWorkload> CreateConstant(const ConstantQueueDescriptor& /*descriptor*/,
71 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000072 { return nullptr; }
73
Derek Lamberti901ea112019-12-10 22:07:09 +000074 std::unique_ptr<IWorkload> CreateConvertFp16ToFp32(const ConvertFp16ToFp32QueueDescriptor& /*descriptor*/,
75 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000076 { return nullptr; }
77
Derek Lamberti901ea112019-12-10 22:07:09 +000078 std::unique_ptr<IWorkload> CreateConvertFp32ToFp16(const ConvertFp32ToFp16QueueDescriptor& /*descriptor*/,
79 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000080 { return nullptr; }
81
Derek Lamberti901ea112019-12-10 22:07:09 +000082 std::unique_ptr<IWorkload> CreateConvolution2d(const Convolution2dQueueDescriptor& /*descriptor*/,
83 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000084 { return nullptr; }
85
Derek Lamberti901ea112019-12-10 22:07:09 +000086 std::unique_ptr<IWorkload> CreateDebug(const DebugQueueDescriptor& /*descriptor*/,
87 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000088 { return nullptr; }
89
Derek Lamberti901ea112019-12-10 22:07:09 +000090 std::unique_ptr<IWorkload> CreateDepthToSpace(const DepthToSpaceQueueDescriptor& /*descriptor*/,
91 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000092 { return nullptr; }
93
Derek Lamberti901ea112019-12-10 22:07:09 +000094 std::unique_ptr<IWorkload> CreateDepthwiseConvolution2d(const DepthwiseConvolution2dQueueDescriptor& /*descriptor*/,
95 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000096 { return nullptr; }
97
Derek Lamberti901ea112019-12-10 22:07:09 +000098 std::unique_ptr<IWorkload> CreateDequantize(const DequantizeQueueDescriptor& /*descriptor*/,
99 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000100 { return nullptr; }
101
Derek Lamberti901ea112019-12-10 22:07:09 +0000102 std::unique_ptr<IWorkload> CreateDetectionPostProcess(const DetectionPostProcessQueueDescriptor& /*descriptor*/,
103 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000104 { return nullptr; }
105
Derek Lamberti901ea112019-12-10 22:07:09 +0000106 std::unique_ptr<IWorkload> CreateDivision(const DivisionQueueDescriptor& /*descriptor*/,
107 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000108 { return nullptr; }
109
josh minor4a3c6102020-01-06 16:40:46 -0600110 std::unique_ptr<IWorkload> CreateElementwiseUnary(const ElementwiseUnaryQueueDescriptor& descriptor,
111 const WorkloadInfo& info) const override
112 {
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000113 if (descriptor.m_Parameters.m_Operation == UnaryOperation::LogicalNot)
114 {
115 return CreateWorkload(armnn::LayerType::ElementwiseUnary, descriptor, info);
116 }
117 else
josh minor4a3c6102020-01-06 16:40:46 -0600118 {
Jan Eilers1b2654f2021-09-24 15:45:46 +0100119 { return nullptr; }
josh minor4a3c6102020-01-06 16:40:46 -0600120 }
josh minor4a3c6102020-01-06 16:40:46 -0600121 }
122
Derek Lamberti901ea112019-12-10 22:07:09 +0000123 std::unique_ptr<IWorkload> CreateFakeQuantization(const FakeQuantizationQueueDescriptor& /*descriptor*/,
124 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000125 { return nullptr; }
126
Derek Lamberti901ea112019-12-10 22:07:09 +0000127 std::unique_ptr<IWorkload> CreateFloor(const FloorQueueDescriptor& /*descriptor*/,
128 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000129 { return nullptr; }
130
Derek Lamberti901ea112019-12-10 22:07:09 +0000131 std::unique_ptr<IWorkload> CreateFullyConnected(const FullyConnectedQueueDescriptor& /*descriptor*/,
132 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000133 { return nullptr; }
134
Derek Lamberti901ea112019-12-10 22:07:09 +0000135 std::unique_ptr<IWorkload> CreateGather(const GatherQueueDescriptor& /*descriptor*/,
136 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000137 { return nullptr; }
138
Derek Lamberti901ea112019-12-10 22:07:09 +0000139 std::unique_ptr<IWorkload> CreateInstanceNormalization(const InstanceNormalizationQueueDescriptor& /*descriptor*/,
140 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000141 { return nullptr; }
142
Derek Lamberti901ea112019-12-10 22:07:09 +0000143 std::unique_ptr<IWorkload> CreateL2Normalization(const L2NormalizationQueueDescriptor& /*descriptor*/,
144 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000145 { return nullptr; }
146
Derek Lamberti901ea112019-12-10 22:07:09 +0000147 std::unique_ptr<IWorkload> CreateLogSoftmax(const LogSoftmaxQueueDescriptor& /*descriptor*/,
148 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000149 { return nullptr; }
150
Derek Lamberti901ea112019-12-10 22:07:09 +0000151 std::unique_ptr<IWorkload> CreateLstm(const LstmQueueDescriptor& /*descriptor*/,
152 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000153 { return nullptr; }
154
Derek Lamberti901ea112019-12-10 22:07:09 +0000155 std::unique_ptr<IWorkload> CreateMaximum(const MaximumQueueDescriptor& /*descriptor*/,
156 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000157 { return nullptr; }
158
Derek Lamberti901ea112019-12-10 22:07:09 +0000159 std::unique_ptr<IWorkload> CreateMean(const MeanQueueDescriptor& /*descriptor*/,
160 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000161 { return nullptr; }
162
Derek Lamberti901ea112019-12-10 22:07:09 +0000163 std::unique_ptr<IWorkload> CreateMemCopy(const MemCopyQueueDescriptor& /*descriptor*/,
164 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000165 { return nullptr; }
166
Derek Lamberti901ea112019-12-10 22:07:09 +0000167 std::unique_ptr<IWorkload> CreateMemImport(const MemImportQueueDescriptor& /*descriptor*/,
168 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000169 { return nullptr; }
170
Derek Lamberti901ea112019-12-10 22:07:09 +0000171 std::unique_ptr<IWorkload> CreateMerge(const MergeQueueDescriptor& /*descriptor*/,
172 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000173 { return nullptr; }
174
Derek Lamberti901ea112019-12-10 22:07:09 +0000175 std::unique_ptr<IWorkload> CreateMinimum(const MinimumQueueDescriptor& /*descriptor*/,
176 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000177 { return nullptr; }
178
Derek Lamberti901ea112019-12-10 22:07:09 +0000179 std::unique_ptr<IWorkload> CreateMultiplication(const MultiplicationQueueDescriptor& /*descriptor*/,
180 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000181 { return nullptr; }
182
Derek Lamberti901ea112019-12-10 22:07:09 +0000183 std::unique_ptr<IWorkload> CreateNormalization(const NormalizationQueueDescriptor& /*descriptor*/,
184 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000185 { return nullptr; }
186
Derek Lamberti901ea112019-12-10 22:07:09 +0000187 std::unique_ptr<IWorkload> CreateOutput(const OutputQueueDescriptor& /*descriptor*/,
188 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000189 { return nullptr; }
190
Derek Lamberti901ea112019-12-10 22:07:09 +0000191 std::unique_ptr<IWorkload> CreatePad(const PadQueueDescriptor& /*descriptor*/,
192 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000193 { return nullptr; }
194
Derek Lamberti901ea112019-12-10 22:07:09 +0000195 std::unique_ptr<IWorkload> CreatePermute(const PermuteQueueDescriptor& /*descriptor*/,
196 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000197 { return nullptr; }
198
Derek Lamberti901ea112019-12-10 22:07:09 +0000199 std::unique_ptr<IWorkload> CreatePooling2d(const Pooling2dQueueDescriptor& /*descriptor*/,
200 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000201 { return nullptr; }
202
Tamás Nyíri7b885b32021-10-26 14:47:57 +0100203 std::unique_ptr<IWorkload> CreatePooling3d(const Pooling3dQueueDescriptor& /*descriptor*/,
204 const WorkloadInfo& /*info*/) const override
205 { return nullptr; }
206
Derek Lamberti901ea112019-12-10 22:07:09 +0000207 std::unique_ptr<IWorkload> CreatePreCompiled(const PreCompiledQueueDescriptor& /*descriptor*/,
208 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000209 { return nullptr; }
210
Derek Lamberti901ea112019-12-10 22:07:09 +0000211 std::unique_ptr<IWorkload> CreatePrelu(const PreluQueueDescriptor& /*descriptor*/,
212 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000213 { return nullptr; }
214
Derek Lamberti901ea112019-12-10 22:07:09 +0000215 std::unique_ptr<IWorkload> CreateQuantize(const QuantizeQueueDescriptor& /*descriptor*/,
216 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000217 { return nullptr; }
218
Derek Lamberti901ea112019-12-10 22:07:09 +0000219 std::unique_ptr<IWorkload> CreateQuantizedLstm(const QuantizedLstmQueueDescriptor& /*descriptor*/,
220 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000221 { return nullptr; }
222
Finn Williams2605b232020-06-10 15:53:46 +0100223 std::unique_ptr<IWorkload> CreateRank(const RankQueueDescriptor& /*descriptor*/,
224 const WorkloadInfo& /*info*/) const override
225 { return nullptr; }
226
Derek Lamberti901ea112019-12-10 22:07:09 +0000227 std::unique_ptr<IWorkload> CreateReshape(const ReshapeQueueDescriptor& /*descriptor*/,
228 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000229 { return nullptr; }
230
Derek Lamberti901ea112019-12-10 22:07:09 +0000231 std::unique_ptr<IWorkload> CreateResize(const ResizeQueueDescriptor& /*descriptor*/,
232 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000233 { return nullptr; }
234
Derek Lamberti901ea112019-12-10 22:07:09 +0000235 std::unique_ptr<IWorkload> CreateSlice(const SliceQueueDescriptor& /*descriptor*/,
236 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000237 { return nullptr; }
238
Derek Lamberti901ea112019-12-10 22:07:09 +0000239 std::unique_ptr<IWorkload> CreateSoftmax(const SoftmaxQueueDescriptor& /*descriptor*/,
240 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000241 { return nullptr; }
242
Derek Lamberti901ea112019-12-10 22:07:09 +0000243 std::unique_ptr<IWorkload> CreateSpaceToBatchNd(const SpaceToBatchNdQueueDescriptor& /*descriptor*/,
244 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000245 { return nullptr; }
246
Derek Lamberti901ea112019-12-10 22:07:09 +0000247 std::unique_ptr<IWorkload> CreateSpaceToDepth(const SpaceToDepthQueueDescriptor& /*descriptor*/,
248 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000249 { return nullptr; }
250
Derek Lamberti901ea112019-12-10 22:07:09 +0000251 std::unique_ptr<IWorkload> CreateSubtraction(const SubtractionQueueDescriptor& /*descriptor*/,
252 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000253 { return nullptr; }
254
Derek Lamberti901ea112019-12-10 22:07:09 +0000255 std::unique_ptr<IWorkload> CreateSplitter(const SplitterQueueDescriptor& /*descriptor*/,
256 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000257 { return nullptr; }
258
Derek Lamberti901ea112019-12-10 22:07:09 +0000259 std::unique_ptr<IWorkload> CreateStack(const StackQueueDescriptor& /*descriptor*/,
260 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000261 { return nullptr; }
262
Derek Lamberti901ea112019-12-10 22:07:09 +0000263 std::unique_ptr<IWorkload> CreateStridedSlice(const StridedSliceQueueDescriptor& /*descriptor*/,
264 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000265 { return nullptr; }
266
Derek Lamberti901ea112019-12-10 22:07:09 +0000267 std::unique_ptr<IWorkload> CreateSwitch(const SwitchQueueDescriptor& /*descriptor*/,
268 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000269 { return nullptr; }
270
Mike Kellyc9ea45a2020-02-28 18:11:58 +0000271 std::unique_ptr<IWorkload> CreateTranspose(const TransposeQueueDescriptor& /*descriptor*/,
272 const WorkloadInfo& /*info*/) const override
273 { return nullptr; }
274
Derek Lamberti901ea112019-12-10 22:07:09 +0000275 std::unique_ptr<IWorkload> CreateTransposeConvolution2d(const TransposeConvolution2dQueueDescriptor& /*descriptor*/,
276 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000277 { return nullptr; }
278};
279
280} //namespace armnn