// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #include "ConstantLayer.hpp" #include "LayerCloneBase.hpp" #include #include #include #include namespace armnn { ConstantLayer::ConstantLayer(const char* name) : Layer(0, 1, LayerType::Constant, name) { } std::unique_ptr ConstantLayer::CreateWorkload(const IWorkloadFactory& factory) const { ConstantQueueDescriptor descriptor; descriptor.m_LayerOutput = m_LayerOutput.get(); return factory.CreateConstant(descriptor, PrepInfoAndDesc(descriptor)); } ConstantLayer* ConstantLayer::Clone(Graph& graph) const { // Cloned layers share the same layer output object. auto layer = CloneBase(graph, GetName()); layer->m_LayerOutput = m_LayerOutput ? std::make_unique(*m_LayerOutput) : nullptr; return std::move(layer); } std::vector ConstantLayer::InferOutputShapes(const std::vector& inputShapes) const { return std::vector({ inputShapes[0] }); } void ConstantLayer::ValidateTensorShapesFromInputs(ShapeInferenceMethod shapeInferenceMethod) { IgnoreUnused(shapeInferenceMethod); // Get the output shape from the value of the constant layer. TensorShape const& outShape = m_LayerOutput->GetTensorInfo().GetShape(); ConditionalThrowIfNotEqual( "ConstantLayer: TensorShape set on OutputSlot[0] does not match the inferred shape.", GetOutputSlot(0).GetTensorInfo().GetShape(), outShape); } void ConstantLayer::Accept(ILayerVisitor& visitor) const { ConstTensor layerOutputTensor(m_LayerOutput->GetTensorInfo(), m_LayerOutput->Map(true)) ; visitor.VisitConstantLayer(this, layerOutputTensor, GetName()); } } // namespace armnn