// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #include "NeonDepthwiseConvolutionBaseWorkload.hpp" #include namespace armnn { arm_compute::Status NeonDepthwiseConvolutionWorkloadValidate(const TensorInfo& input, const TensorInfo& output, const DepthwiseConvolution2dDescriptor& descriptor, const TensorInfo& weights, const Optional& biases) { const arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input, descriptor.m_DataLayout); const arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output, descriptor.m_DataLayout); const arm_compute::TensorInfo aclWeightsInfo = armcomputetensorutils::BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout); arm_compute::TensorInfo aclBiasesInfo; arm_compute::TensorInfo *optionalAclBiasesInfo = nullptr; if (descriptor.m_BiasEnabled) { BOOST_ASSERT(biases.has_value()); aclBiasesInfo = armcomputetensorutils::BuildArmComputeTensorInfo(biases.value(), descriptor.m_DataLayout); optionalAclBiasesInfo = &aclBiasesInfo; } const arm_compute::PadStrideInfo aclPadStrideInfo = armcomputetensorutils::BuildArmComputePadStrideInfo(descriptor); const unsigned int aclDepthMultiplier = weights.GetShape()[0]; return arm_compute::NEDepthwiseConvolutionLayer::validate(&aclInputInfo, &aclWeightsInfo, optionalAclBiasesInfo, &aclOutputInfo, aclPadStrideInfo, aclDepthMultiplier); } }