Path: blob/master/thirdparty/metal-cpp/Metal/MTL4MachineLearningPipeline.hpp
21066 views
//-------------------------------------------------------------------------------------------------------------------------------------------------------------1//2// Metal/MTL4MachineLearningPipeline.hpp3//4// Copyright 2020-2025 Apple Inc.5//6// Licensed under the Apache License, Version 2.0 (the "License");7// you may not use this file except in compliance with the License.8// You may obtain a copy of the License at9//10// http://www.apache.org/licenses/LICENSE-2.011//12// Unless required by applicable law or agreed to in writing, software13// distributed under the License is distributed on an "AS IS" BASIS,14// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.15// See the License for the specific language governing permissions and16// limitations under the License.17//18//-------------------------------------------------------------------------------------------------------------------------------------------------------------1920#pragma once2122#include "../Foundation/Foundation.hpp"23#include "MTL4PipelineState.hpp"24#include "MTLAllocation.hpp"25#include "MTLDefines.hpp"26#include "MTLHeaderBridge.hpp"27#include "MTLPrivate.hpp"2829namespace MTL430{31class FunctionDescriptor;32class MachineLearningPipelineDescriptor;33class MachineLearningPipelineReflection;34}3536namespace MTL37{38class Device;39class TensorExtents;40}4142namespace MTL443{44class MachineLearningPipelineDescriptor : public NS::Copying<MachineLearningPipelineDescriptor, PipelineDescriptor>45{46public:47static MachineLearningPipelineDescriptor* alloc();4849MachineLearningPipelineDescriptor* init();5051MTL::TensorExtents* inputDimensionsAtBufferIndex(NS::Integer bufferIndex);5253NS::String* label() const;5455FunctionDescriptor* machineLearningFunctionDescriptor() const;5657void reset();5859void setInputDimensions(const MTL::TensorExtents* dimensions, NS::Integer bufferIndex);60void setInputDimensions(const NS::Array* dimensions, NS::Range range);6162void setLabel(const NS::String* label);6364void setMachineLearningFunctionDescriptor(const MTL4::FunctionDescriptor* machineLearningFunctionDescriptor);65};66class MachineLearningPipelineReflection : public NS::Referencing<MachineLearningPipelineReflection>67{68public:69static MachineLearningPipelineReflection* alloc();7071NS::Array* bindings() const;7273MachineLearningPipelineReflection* init();74};75class MachineLearningPipelineState : public NS::Referencing<MachineLearningPipelineState, MTL::Allocation>76{77public:78MTL::Device* device() const;7980NS::UInteger intermediatesHeapSize() const;8182NS::String* label() const;8384MachineLearningPipelineReflection* reflection() const;85};8687}88_MTL_INLINE MTL4::MachineLearningPipelineDescriptor* MTL4::MachineLearningPipelineDescriptor::alloc()89{90return NS::Object::alloc<MTL4::MachineLearningPipelineDescriptor>(_MTL_PRIVATE_CLS(MTL4MachineLearningPipelineDescriptor));91}9293_MTL_INLINE MTL4::MachineLearningPipelineDescriptor* MTL4::MachineLearningPipelineDescriptor::init()94{95return NS::Object::init<MTL4::MachineLearningPipelineDescriptor>();96}9798_MTL_INLINE MTL::TensorExtents* MTL4::MachineLearningPipelineDescriptor::inputDimensionsAtBufferIndex(NS::Integer bufferIndex)99{100return Object::sendMessage<MTL::TensorExtents*>(this, _MTL_PRIVATE_SEL(inputDimensionsAtBufferIndex_), bufferIndex);101}102103_MTL_INLINE NS::String* MTL4::MachineLearningPipelineDescriptor::label() const104{105return Object::sendMessage<NS::String*>(this, _MTL_PRIVATE_SEL(label));106}107108_MTL_INLINE MTL4::FunctionDescriptor* MTL4::MachineLearningPipelineDescriptor::machineLearningFunctionDescriptor() const109{110return Object::sendMessage<MTL4::FunctionDescriptor*>(this, _MTL_PRIVATE_SEL(machineLearningFunctionDescriptor));111}112113_MTL_INLINE void MTL4::MachineLearningPipelineDescriptor::reset()114{115Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(reset));116}117118_MTL_INLINE void MTL4::MachineLearningPipelineDescriptor::setInputDimensions(const MTL::TensorExtents* dimensions, NS::Integer bufferIndex)119{120Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setInputDimensions_atBufferIndex_), dimensions, bufferIndex);121}122123_MTL_INLINE void MTL4::MachineLearningPipelineDescriptor::setInputDimensions(const NS::Array* dimensions, NS::Range range)124{125Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setInputDimensions_withRange_), dimensions, range);126}127128_MTL_INLINE void MTL4::MachineLearningPipelineDescriptor::setLabel(const NS::String* label)129{130Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setLabel_), label);131}132133_MTL_INLINE void MTL4::MachineLearningPipelineDescriptor::setMachineLearningFunctionDescriptor(const MTL4::FunctionDescriptor* machineLearningFunctionDescriptor)134{135Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setMachineLearningFunctionDescriptor_), machineLearningFunctionDescriptor);136}137138_MTL_INLINE MTL4::MachineLearningPipelineReflection* MTL4::MachineLearningPipelineReflection::alloc()139{140return NS::Object::alloc<MTL4::MachineLearningPipelineReflection>(_MTL_PRIVATE_CLS(MTL4MachineLearningPipelineReflection));141}142143_MTL_INLINE NS::Array* MTL4::MachineLearningPipelineReflection::bindings() const144{145return Object::sendMessage<NS::Array*>(this, _MTL_PRIVATE_SEL(bindings));146}147148_MTL_INLINE MTL4::MachineLearningPipelineReflection* MTL4::MachineLearningPipelineReflection::init()149{150return NS::Object::init<MTL4::MachineLearningPipelineReflection>();151}152153_MTL_INLINE MTL::Device* MTL4::MachineLearningPipelineState::device() const154{155return Object::sendMessage<MTL::Device*>(this, _MTL_PRIVATE_SEL(device));156}157158_MTL_INLINE NS::UInteger MTL4::MachineLearningPipelineState::intermediatesHeapSize() const159{160return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(intermediatesHeapSize));161}162163_MTL_INLINE NS::String* MTL4::MachineLearningPipelineState::label() const164{165return Object::sendMessage<NS::String*>(this, _MTL_PRIVATE_SEL(label));166}167168_MTL_INLINE MTL4::MachineLearningPipelineReflection* MTL4::MachineLearningPipelineState::reflection() const169{170return Object::sendMessage<MTL4::MachineLearningPipelineReflection*>(this, _MTL_PRIVATE_SEL(reflection));171}172173174