2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
6 #include <armnn/BackendHelper.hpp>
7 #include <armnn/BackendRegistry.hpp>
9 #include <armnn/backends/IBackendInternal.hpp>
14 // Return LayerSupportHandle instead of the previous pointer to ILayerSupport.
15 LayerSupportHandle GetILayerSupportByBackendId(const armnn::BackendId& backend)
17 BackendRegistry& backendRegistry = armnn::BackendRegistryInstance();
19 if (!backendRegistry.IsBackendRegistered(backend))
21 return LayerSupportHandle(nullptr);
24 auto factoryFunc = backendRegistry.GetFactory(backend);
25 auto backendObject = factoryFunc();
26 return LayerSupportHandle(backendObject->GetLayerSupport());
29 bool LayerSupportHandle::IsBackendRegistered() const
40 bool LayerSupportHandle::IsAbsSupported(const TensorInfo& input,
41 const TensorInfo& output,
42 Optional<std::string&> reasonIfUnsupported)
44 // Call the IsXXXLayerSupport function of the specific backend.
45 return m_LayerSupport->IsAbsSupported(input, output, reasonIfUnsupported.value());
48 bool LayerSupportHandle::IsActivationSupported(const TensorInfo& input,
49 const TensorInfo& output,
50 const ActivationDescriptor& descriptor,
51 Optional<std::string&> reasonIfUnsupported)
53 return m_LayerSupport->IsActivationSupported(input, output, descriptor, reasonIfUnsupported.value());
56 bool LayerSupportHandle::IsAdditionSupported(const TensorInfo& input0,
57 const TensorInfo& input1,
58 const TensorInfo& output,
59 Optional<std::string&> reasonIfUnsupported)
61 return m_LayerSupport->IsAdditionSupported(input0, input1, output, reasonIfUnsupported.value());
64 bool LayerSupportHandle::IsArgMinMaxSupported(const TensorInfo& input,
65 const TensorInfo& output,
66 const ArgMinMaxDescriptor& descriptor,
67 Optional<std::string&> reasonIfUnsupported)
69 return m_LayerSupport->IsArgMinMaxSupported(input, output, descriptor, reasonIfUnsupported.value());
72 bool LayerSupportHandle::IsBatchNormalizationSupported(const TensorInfo& input,
73 const TensorInfo& output,
74 const TensorInfo& mean,
75 const TensorInfo& var,
76 const TensorInfo& beta,
77 const TensorInfo& gamma,
78 const BatchNormalizationDescriptor& descriptor,
79 Optional<std::string&> reasonIfUnsupported)
81 return m_LayerSupport->IsBatchNormalizationSupported(input,
88 reasonIfUnsupported.value());
91 bool LayerSupportHandle::IsBatchToSpaceNdSupported(const TensorInfo& input,
92 const TensorInfo& output,
93 const BatchToSpaceNdDescriptor& descriptor,
94 Optional<std::string&> reasonIfUnsupported)
96 return m_LayerSupport->IsBatchToSpaceNdSupported(input,
99 reasonIfUnsupported.value());
102 bool LayerSupportHandle::IsComparisonSupported(const TensorInfo& input0,
103 const TensorInfo& input1,
104 const TensorInfo& output,
105 const ComparisonDescriptor& descriptor,
106 Optional<std::string&> reasonIfUnsupported)
108 return m_LayerSupport->IsComparisonSupported(input0, input1, output, descriptor, reasonIfUnsupported.value());
111 bool LayerSupportHandle::IsConcatSupported(const std::vector<const TensorInfo*> inputs,
112 const TensorInfo& output,
113 const OriginsDescriptor& descriptor,
114 Optional<std::string&> reasonIfUnsupported)
116 return m_LayerSupport->IsConcatSupported(inputs, output, descriptor, reasonIfUnsupported.value());
119 bool LayerSupportHandle::IsConstantSupported(const TensorInfo& output,
120 Optional<std::string&> reasonIfUnsupported)
122 return m_LayerSupport->IsConstantSupported(output, reasonIfUnsupported.value());
125 bool LayerSupportHandle::IsConvertBf16ToFp32Supported(const TensorInfo& input,
126 const TensorInfo& output,
127 Optional<std::string&> reasonIfUnsupported)
129 return m_LayerSupport->IsConvertBf16ToFp32Supported(input, output, reasonIfUnsupported.value());
132 bool LayerSupportHandle::IsConvertFp32ToBf16Supported(const TensorInfo& input,
133 const TensorInfo& output,
134 Optional<std::string&> reasonIfUnsupported)
136 return m_LayerSupport->IsConvertFp32ToBf16Supported(input, output, reasonIfUnsupported.value());
139 bool LayerSupportHandle::IsConvertFp16ToFp32Supported(const TensorInfo& input,
140 const TensorInfo& output,
141 Optional<std::string&> reasonIfUnsupported)
143 return m_LayerSupport->IsConvertFp16ToFp32Supported(input, output, reasonIfUnsupported.value());
146 bool LayerSupportHandle::IsConvertFp32ToFp16Supported(const TensorInfo& input,
147 const TensorInfo& output,
148 Optional<std::string&> reasonIfUnsupported)
150 return m_LayerSupport->IsConvertFp32ToFp16Supported(input, output, reasonIfUnsupported.value());
153 bool LayerSupportHandle::IsConvolution2dSupported(const TensorInfo& input,
154 const TensorInfo& output,
155 const Convolution2dDescriptor& descriptor,
156 const TensorInfo& weights,
157 const Optional<TensorInfo>& biases,
158 Optional<std::string&> reasonIfUnsupported)
160 return m_LayerSupport->IsConvolution2dSupported(input,
165 reasonIfUnsupported.value());
168 bool LayerSupportHandle::IsDebugSupported(const TensorInfo& input,
169 const TensorInfo& output,
170 Optional<std::string&> reasonIfUnsupported)
172 return m_LayerSupport->IsDebugSupported(input, output, reasonIfUnsupported.value());
175 bool LayerSupportHandle::IsDepthToSpaceSupported(const TensorInfo& input,
176 const TensorInfo& output,
177 const DepthToSpaceDescriptor& descriptor,
178 Optional<std::string&> reasonIfUnsupported)
180 return m_LayerSupport->IsDepthToSpaceSupported(input, output, descriptor, reasonIfUnsupported.value());
183 bool LayerSupportHandle::IsDepthwiseConvolutionSupported(
184 const TensorInfo& input,
185 const TensorInfo& output,
186 const DepthwiseConvolution2dDescriptor& descriptor,
187 const TensorInfo& weights,
188 const Optional<TensorInfo>& biases,
189 Optional<std::string&> reasonIfUnsupported)
191 return m_LayerSupport->IsDepthwiseConvolutionSupported(input,
196 reasonIfUnsupported.value());
199 bool LayerSupportHandle::IsDequantizeSupported(const TensorInfo& input,
200 const TensorInfo& output,
201 Optional<std::string&> reasonIfUnsupported)
203 return m_LayerSupport->IsDequantizeSupported(input, output, reasonIfUnsupported.value());
206 bool LayerSupportHandle::IsDetectionPostProcessSupported(const TensorInfo& boxEncodings,
207 const TensorInfo& scores,
208 const TensorInfo& anchors,
209 const TensorInfo& detectionBoxes,
210 const TensorInfo& detectionClasses,
211 const TensorInfo& detectionScores,
212 const TensorInfo& numDetections,
213 const DetectionPostProcessDescriptor& descriptor,
214 Optional<std::string&> reasonIfUnsupported)
216 return m_LayerSupport->IsDetectionPostProcessSupported(boxEncodings,
224 reasonIfUnsupported);
227 bool LayerSupportHandle::IsDilatedDepthwiseConvolutionSupported(
228 const TensorInfo& input,
229 const TensorInfo& output,
230 const DepthwiseConvolution2dDescriptor& descriptor,
231 const TensorInfo& weights,
232 const Optional<TensorInfo>& biases,
233 Optional<std::string&> reasonIfUnsupported)
235 return m_LayerSupport->IsDilatedDepthwiseConvolutionSupported(input,
240 reasonIfUnsupported);
243 bool LayerSupportHandle::IsDivisionSupported(const TensorInfo& input0,
244 const TensorInfo& input1,
245 const TensorInfo& output,
246 Optional<std::string&> reasonIfUnsupported)
248 return m_LayerSupport->IsDivisionSupported(input0, input1, output, reasonIfUnsupported.value());
251 bool LayerSupportHandle::IsElementwiseUnarySupported(const TensorInfo& input,
252 const TensorInfo& output,
253 const ElementwiseUnaryDescriptor& descriptor,
254 Optional<std::string&> reasonIfUnsupported)
256 return m_LayerSupport->IsElementwiseUnarySupported(input, output, descriptor, reasonIfUnsupported.value());
259 bool LayerSupportHandle::IsEqualSupported(const TensorInfo& input0,
260 const TensorInfo& input1,
261 const TensorInfo& output,
262 Optional<std::string&> reasonIfUnsupported)
264 return m_LayerSupport->IsEqualSupported(input0, input1, output, reasonIfUnsupported.value());
267 bool LayerSupportHandle::IsFakeQuantizationSupported(const TensorInfo& input,
268 const FakeQuantizationDescriptor& descriptor,
269 Optional<std::string&> reasonIfUnsupported)
271 return m_LayerSupport->IsFakeQuantizationSupported(input, descriptor, reasonIfUnsupported.value());
274 bool LayerSupportHandle::IsFillSupported(const TensorInfo& input,
275 const TensorInfo& output,
276 const FillDescriptor& descriptor,
277 Optional<std::string&> reasonIfUnsupported)
279 return m_LayerSupport->IsFillSupported(input, output, descriptor, reasonIfUnsupported.value());
282 bool LayerSupportHandle::IsFloorSupported(const TensorInfo& input,
283 const TensorInfo& output,
284 Optional<std::string&> reasonIfUnsupported)
286 return m_LayerSupport->IsFloorSupported(input, output, reasonIfUnsupported.value());
289 bool LayerSupportHandle::IsFullyConnectedSupported(const TensorInfo& input,
290 const TensorInfo& output,
291 const TensorInfo& weights,
292 const TensorInfo& biases,
293 const FullyConnectedDescriptor& descriptor,
294 Optional<std::string&> reasonIfUnsupported)
296 return m_LayerSupport->IsFullyConnectedSupported(input,
301 reasonIfUnsupported.value());
304 bool LayerSupportHandle::IsGatherSupported(const TensorInfo& input0,
305 const TensorInfo& input1,
306 const TensorInfo& output,
307 Optional<std::string&> reasonIfUnsupported)
309 return m_LayerSupport->IsGatherSupported(input0, input1, output, reasonIfUnsupported.value());
312 bool LayerSupportHandle::IsGatherSupported(const TensorInfo& input0,
313 const TensorInfo& input1,
314 const TensorInfo& output,
315 const GatherDescriptor& descriptor,
316 Optional<std::string&> reasonIfUnsupported)
318 return m_LayerSupport->IsGatherSupported(input0, input1, output, descriptor, reasonIfUnsupported.value());
321 bool LayerSupportHandle::IsGreaterSupported(const TensorInfo& input0,
322 const TensorInfo& input1,
323 const TensorInfo& ouput,
324 Optional<std::string&> reasonIfUnsupported)
326 return m_LayerSupport->IsGreaterSupported(input0, input1, ouput, reasonIfUnsupported.value());
329 bool LayerSupportHandle::IsInputSupported(const TensorInfo& input,
330 Optional<std::string&> reasonIfUnsupported)
332 return m_LayerSupport->IsInputSupported(input, reasonIfUnsupported.value());
335 bool LayerSupportHandle::IsInstanceNormalizationSupported(
336 const TensorInfo& input,
337 const TensorInfo& output,
338 const InstanceNormalizationDescriptor& descriptor,
339 Optional<std::string&> reasonIfUnsupported)
341 return m_LayerSupport->IsInstanceNormalizationSupported(input, output, descriptor, reasonIfUnsupported.value());
344 bool LayerSupportHandle::IsL2NormalizationSupported(const TensorInfo& input,
345 const TensorInfo& output,
346 const L2NormalizationDescriptor& descriptor,
347 Optional<std::string&> reasonIfUnsupported)
349 return m_LayerSupport->IsL2NormalizationSupported(input, output, descriptor, reasonIfUnsupported.value());
352 bool LayerSupportHandle::IsLogicalBinarySupported(const TensorInfo& input0,
353 const TensorInfo& input1,
354 const TensorInfo& output,
355 const LogicalBinaryDescriptor& descriptor,
356 Optional<std::string&> reasonIfUnsupported)
358 return m_LayerSupport->IsLogicalBinarySupported(input0,
362 reasonIfUnsupported.value());
365 bool LayerSupportHandle::IsLogicalUnarySupported(const TensorInfo& input,
366 const TensorInfo& output,
367 const ElementwiseUnaryDescriptor& descriptor,
368 Optional<std::string&> reasonIfUnsupported)
370 return m_LayerSupport->IsLogicalUnarySupported(input, output, descriptor, reasonIfUnsupported.value());
373 bool LayerSupportHandle::IsLogSoftmaxSupported(const TensorInfo& input,
374 const TensorInfo& output,
375 const LogSoftmaxDescriptor& descriptor,
376 Optional<std::string&> reasonIfUnsupported)
378 return m_LayerSupport->IsLogSoftmaxSupported(input, output, descriptor, reasonIfUnsupported.value());
381 bool LayerSupportHandle::IsLstmSupported(const TensorInfo& input,
382 const TensorInfo& outputStateIn,
383 const TensorInfo& cellStateIn,
384 const TensorInfo& scratchBuffer,
385 const TensorInfo& outputStateOut,
386 const TensorInfo& cellStateOut,
387 const TensorInfo& output,
388 const LstmDescriptor& descriptor,
389 const LstmInputParamsInfo& paramsInfo,
390 Optional<std::string&> reasonIfUnsupported)
392 return m_LayerSupport->IsLstmSupported(input,
401 reasonIfUnsupported);
404 bool LayerSupportHandle::IsMaximumSupported(const TensorInfo& input0,
405 const TensorInfo& input1,
406 const TensorInfo& output,
407 Optional<std::string&> reasonIfUnsupported)
409 return m_LayerSupport->IsMaximumSupported(input0, input1, output, reasonIfUnsupported.value());
412 bool LayerSupportHandle::IsMeanSupported(const TensorInfo& input,
413 const TensorInfo& output,
414 const MeanDescriptor& descriptor,
415 Optional<std::string&> reasonIfUnsupported)
417 return m_LayerSupport->IsMeanSupported(input, output, descriptor, reasonIfUnsupported.value());
420 bool LayerSupportHandle::IsMemCopySupported(const TensorInfo& input,
421 const TensorInfo& output,
422 Optional<std::string&> reasonIfUnsupported)
424 return m_LayerSupport->IsMemCopySupported(input, output, reasonIfUnsupported.value());
427 bool LayerSupportHandle::IsMemImportSupported(const TensorInfo& input,
428 const TensorInfo& output,
429 Optional<std::string&> reasonIfUnsupported)
431 return m_LayerSupport->IsMemImportSupported(input, output, reasonIfUnsupported.value());
434 bool LayerSupportHandle::IsMergeSupported(const TensorInfo& input0,
435 const TensorInfo& input1,
436 const TensorInfo& output,
437 Optional<std::string&> reasonIfUnsupported)
439 return m_LayerSupport->IsMergeSupported(input0, input1, output, reasonIfUnsupported.value());
442 bool LayerSupportHandle::IsMergerSupported(const std::vector<const TensorInfo*> inputs,
443 const TensorInfo& output,
444 const OriginsDescriptor& descriptor,
445 Optional<std::string&> reasonIfUnsupported)
447 return m_LayerSupport->IsMergerSupported(inputs, output, descriptor, reasonIfUnsupported.value());
450 bool LayerSupportHandle::IsMinimumSupported(const TensorInfo& input0,
451 const TensorInfo& input1,
452 const TensorInfo& output,
453 Optional<std::string&> reasonIfUnsupported)
455 return m_LayerSupport->IsMinimumSupported(input0, input1, output, reasonIfUnsupported.value());
458 bool LayerSupportHandle::IsMultiplicationSupported(const TensorInfo& input0,
459 const TensorInfo& input1,
460 const TensorInfo& output,
461 Optional<std::string&> reasonIfUnsupported)
463 return m_LayerSupport->IsMultiplicationSupported(input0, input1, output, reasonIfUnsupported.value());
466 bool LayerSupportHandle::IsNormalizationSupported(const TensorInfo& input,
467 const TensorInfo& output,
468 const NormalizationDescriptor& descriptor,
469 Optional<std::string&> reasonIfUnsupported)
471 return m_LayerSupport->IsNormalizationSupported(input, output, descriptor, reasonIfUnsupported.value());
474 bool LayerSupportHandle::IsOutputSupported(const TensorInfo& output,
475 Optional<std::string&> reasonIfUnsupported)
477 return m_LayerSupport->IsOutputSupported(output, reasonIfUnsupported.value());
480 bool LayerSupportHandle::IsPadSupported(const TensorInfo& input,
481 const TensorInfo& output,
482 const PadDescriptor& descriptor,
483 Optional<std::string&> reasonIfUnsupported)
485 return m_LayerSupport->IsPadSupported(input, output, descriptor, reasonIfUnsupported.value());
488 bool LayerSupportHandle::IsPermuteSupported(const TensorInfo& input,
489 const TensorInfo& output,
490 const PermuteDescriptor& descriptor,
491 Optional<std::string&> reasonIfUnsupported)
493 return m_LayerSupport->IsPermuteSupported(input, output, descriptor, reasonIfUnsupported.value());
496 bool LayerSupportHandle::IsPooling2dSupported(const TensorInfo& input,
497 const TensorInfo& output,
498 const Pooling2dDescriptor& descriptor,
499 Optional<std::string&> reasonIfUnsupported)
501 return m_LayerSupport->IsPooling2dSupported(input, output, descriptor, reasonIfUnsupported.value());
504 bool LayerSupportHandle::IsPreCompiledSupported(const TensorInfo& input,
505 const PreCompiledDescriptor& descriptor,
506 Optional<std::string&> reasonIfUnsupported)
508 return m_LayerSupport->IsPreCompiledSupported(input, descriptor, reasonIfUnsupported.value());
511 bool LayerSupportHandle::IsPreluSupported(const TensorInfo& input,
512 const TensorInfo& alpha,
513 const TensorInfo& output,
514 Optional<std::string&> reasonIfUnsupported)
516 return m_LayerSupport->IsPreluSupported(input, alpha, output, reasonIfUnsupported.value());
519 bool LayerSupportHandle::IsQuantizeSupported(const TensorInfo& input,
520 const TensorInfo& output,
521 Optional<std::string&> reasonIfUnsupported)
523 return m_LayerSupport->IsQuantizeSupported(input, output, reasonIfUnsupported.value());
526 bool LayerSupportHandle::IsQLstmSupported(const TensorInfo& input,
527 const TensorInfo& previousOutputIn,
528 const TensorInfo& previousCellStateIn,
529 const TensorInfo& outputStateOut,
530 const TensorInfo& cellStateOut,
531 const TensorInfo& output,
532 const QLstmDescriptor& descriptor,
533 const LstmInputParamsInfo& paramsInfo,
534 Optional<std::string&> reasonIfUnsupported)
536 return m_LayerSupport->IsQLstmSupported(input,
544 reasonIfUnsupported);
547 bool LayerSupportHandle::IsQuantizedLstmSupported(const TensorInfo& input,
548 const TensorInfo& previousCellStateIn,
549 const TensorInfo& previousOutputIn,
550 const TensorInfo& cellStateOut,
551 const TensorInfo& output,
552 const QuantizedLstmInputParamsInfo& paramsInfo,
553 Optional<std::string&> reasonIfUnsupported)
555 return m_LayerSupport->IsQuantizedLstmSupported(input,
561 reasonIfUnsupported);
564 bool LayerSupportHandle::IsRankSupported(const TensorInfo& input,
565 const TensorInfo& output,
566 Optional<std::string&> reasonIfUnsupported)
568 return m_LayerSupport->IsRankSupported(input, output, reasonIfUnsupported.value());
571 bool LayerSupportHandle::IsReshapeSupported(const TensorInfo& input,
572 const TensorInfo& output,
573 const ReshapeDescriptor& descriptor,
574 Optional<std::string&> reasonIfUnsupported)
576 return m_LayerSupport->IsReshapeSupported(input, output, descriptor, reasonIfUnsupported.value());
579 bool LayerSupportHandle::IsResizeBilinearSupported(const TensorInfo& input,
580 const TensorInfo& output,
581 Optional<std::string&> reasonIfUnsupported)
583 return m_LayerSupport->IsResizeBilinearSupported(input, output, reasonIfUnsupported.value());
586 bool LayerSupportHandle::IsResizeSupported(const TensorInfo& input,
587 const TensorInfo& output,
588 const ResizeDescriptor& descriptor,
589 Optional<std::string&> reasonIfUnsupported)
591 return m_LayerSupport->IsResizeSupported(input, output, descriptor, reasonIfUnsupported.value());
594 bool LayerSupportHandle::IsRsqrtSupported(const TensorInfo& input,
595 const TensorInfo& output,
596 Optional<std::string&> reasonIfUnsupported)
598 return m_LayerSupport->IsRsqrtSupported(input, output, reasonIfUnsupported.value());
601 bool LayerSupportHandle::IsSliceSupported(const TensorInfo& input,
602 const TensorInfo& output,
603 const SliceDescriptor& descriptor,
604 Optional<std::string&> reasonIfUnsupported)
606 return m_LayerSupport->IsSliceSupported(input, output, descriptor, reasonIfUnsupported.value());
609 bool LayerSupportHandle::IsSoftmaxSupported(const TensorInfo& input,
610 const TensorInfo& output,
611 const SoftmaxDescriptor& descriptor,
612 Optional<std::string&> reasonIfUnsupported)
614 return m_LayerSupport->IsSoftmaxSupported(input, output, descriptor, reasonIfUnsupported.value());
617 bool LayerSupportHandle::IsSpaceToBatchNdSupported(const TensorInfo& input,
618 const TensorInfo& output,
619 const SpaceToBatchNdDescriptor& descriptor,
620 Optional<std::string&> reasonIfUnsupported)
622 return m_LayerSupport->IsSpaceToBatchNdSupported(input, output, descriptor, reasonIfUnsupported.value());
625 bool LayerSupportHandle::IsSpaceToDepthSupported(const TensorInfo& input,
626 const TensorInfo& output,
627 const SpaceToDepthDescriptor& descriptor,
628 Optional<std::string&> reasonIfUnsupported)
630 return m_LayerSupport->IsSpaceToDepthSupported(input, output, descriptor, reasonIfUnsupported.value());
633 bool LayerSupportHandle::IsSplitterSupported(const TensorInfo& input,
634 const ViewsDescriptor& descriptor,
635 Optional<std::string&> reasonIfUnsupported)
637 return m_LayerSupport->IsSplitterSupported(input, descriptor, reasonIfUnsupported.value());
640 bool LayerSupportHandle::IsSplitterSupported(const TensorInfo& input,
641 const std::vector<std::reference_wrapper<TensorInfo>>& outputs,
642 const ViewsDescriptor& descriptor,
643 Optional<std::string&> reasonIfUnsupported)
645 return m_LayerSupport->IsSplitterSupported(input, outputs, descriptor, reasonIfUnsupported.value());
648 bool LayerSupportHandle::IsStackSupported(const std::vector<const TensorInfo*>& inputs,
649 const TensorInfo& output,
650 const StackDescriptor& descriptor,
651 Optional<std::string&> reasonIfUnsupported)
653 return m_LayerSupport->IsStackSupported(inputs, output, descriptor, reasonIfUnsupported.value());
656 bool LayerSupportHandle::IsStandInSupported(const std::vector<const TensorInfo*>& inputs,
657 const std::vector<const TensorInfo*>& outputs,
658 const StandInDescriptor& descriptor,
659 Optional<std::string&> reasonIfUnsupported)
661 return m_LayerSupport->IsStandInSupported(inputs, outputs, descriptor, reasonIfUnsupported.value());
665 bool LayerSupportHandle::IsStridedSliceSupported(const TensorInfo& input,
666 const TensorInfo& output,
667 const StridedSliceDescriptor& descriptor,
668 Optional<std::string&> reasonIfUnsupported)
670 return m_LayerSupport->IsStridedSliceSupported(input, output, descriptor, reasonIfUnsupported.value());
673 bool LayerSupportHandle::IsSubtractionSupported(const TensorInfo& input0,
674 const TensorInfo& input1,
675 const TensorInfo& output,
676 Optional<std::string&> reasonIfUnsupported)
678 return m_LayerSupport->IsSubtractionSupported(input0, input1, output, reasonIfUnsupported.value());
681 bool LayerSupportHandle::IsSwitchSupported(const TensorInfo& input0,
682 const TensorInfo& input1,
683 const TensorInfo& output0,
684 const TensorInfo& output1,
685 Optional<std::string&> reasonIfUnsupported)
687 return m_LayerSupport->IsSwitchSupported(input0, input1, output0, output1, reasonIfUnsupported.value());
690 bool LayerSupportHandle::IsTransposeConvolution2dSupported(
691 const TensorInfo& input,
692 const TensorInfo& output,
693 const TransposeConvolution2dDescriptor& descriptor,
694 const TensorInfo& weights,
695 const Optional<TensorInfo>& biases,
696 Optional<std::string&> reasonIfUnsupported)
698 return m_LayerSupport->IsTransposeConvolution2dSupported(input,
703 reasonIfUnsupported.value());
706 bool LayerSupportHandle::IsTransposeSupported(const TensorInfo& input,
707 const TensorInfo& output,
708 const TransposeDescriptor& descriptor,
709 Optional<std::string&> reasonIfUnsupported)
711 return m_LayerSupport->IsTransposeSupported(input, output, descriptor, reasonIfUnsupported.value());