spb/forge Public MIT
Forge — LLM training from scratch in pure C++20 + Metal on Apple Silicon.
C++ 61.2%
C 23%
Python 7.6%
TeX 7.2%
CMake 1.1%
1//-------------------------------------------------------------------------------------------------------------------------------------------------------------2//3// Metal/MTL4LinkingDescriptor.hpp4//5// Copyright 2020-2025 Apple Inc.6//7// Licensed under the Apache License, Version 2.0 (the "License");8// you may not use this file except in compliance with the License.9// You may obtain a copy of the License at10//11// http://www.apache.org/licenses/LICENSE-2.012//13// Unless required by applicable law or agreed to in writing, software14// distributed under the License is distributed on an "AS IS" BASIS,15// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.16// See the License for the specific language governing permissions and17// limitations under the License.18//19//-------------------------------------------------------------------------------------------------------------------------------------------------------------2021#pragma once2223#include "../Foundation/Foundation.hpp"24#include "MTLDefines.hpp"25#include "MTLHeaderBridge.hpp"26#include "MTLPrivate.hpp"2728namespace MTL429{30class PipelineStageDynamicLinkingDescriptor;31class RenderPipelineDynamicLinkingDescriptor;32class StaticLinkingDescriptor;3334class StaticLinkingDescriptor : public NS::Copying<StaticLinkingDescriptor>35{36public:37 static StaticLinkingDescriptor* alloc();3839 NS::Array* functionDescriptors() const;4041 NS::Dictionary* groups() const;4243 StaticLinkingDescriptor* init();4445 NS::Array* privateFunctionDescriptors() const;4647 void setFunctionDescriptors(const NS::Array* functionDescriptors);4849 void setGroups(const NS::Dictionary* groups);5051 void setPrivateFunctionDescriptors(const NS::Array* privateFunctionDescriptors);52};53class PipelineStageDynamicLinkingDescriptor : public NS::Copying<PipelineStageDynamicLinkingDescriptor>54{55public:56 static PipelineStageDynamicLinkingDescriptor* alloc();5758 NS::Array* binaryLinkedFunctions() const;5960 PipelineStageDynamicLinkingDescriptor* init();6162 NS::UInteger maxCallStackDepth() const;6364 NS::Array* preloadedLibraries() const;6566 void setBinaryLinkedFunctions(const NS::Array* binaryLinkedFunctions);6768 void setMaxCallStackDepth(NS::UInteger maxCallStackDepth);6970 void setPreloadedLibraries(const NS::Array* preloadedLibraries);71};72class RenderPipelineDynamicLinkingDescriptor : public NS::Copying<RenderPipelineDynamicLinkingDescriptor>73{74public:75 static RenderPipelineDynamicLinkingDescriptor* alloc();7677 PipelineStageDynamicLinkingDescriptor* fragmentLinkingDescriptor() const;7879 RenderPipelineDynamicLinkingDescriptor* init();8081 PipelineStageDynamicLinkingDescriptor* meshLinkingDescriptor() const;8283 PipelineStageDynamicLinkingDescriptor* objectLinkingDescriptor() const;8485 PipelineStageDynamicLinkingDescriptor* tileLinkingDescriptor() const;8687 PipelineStageDynamicLinkingDescriptor* vertexLinkingDescriptor() const;88};8990}91_MTL_INLINE MTL4::StaticLinkingDescriptor* MTL4::StaticLinkingDescriptor::alloc()92{93 return NS::Object::alloc<MTL4::StaticLinkingDescriptor>(_MTL_PRIVATE_CLS(MTL4StaticLinkingDescriptor));94}9596_MTL_INLINE NS::Array* MTL4::StaticLinkingDescriptor::functionDescriptors() const97{98 return Object::sendMessage<NS::Array*>(this, _MTL_PRIVATE_SEL(functionDescriptors));99}100101_MTL_INLINE NS::Dictionary* MTL4::StaticLinkingDescriptor::groups() const102{103 return Object::sendMessage<NS::Dictionary*>(this, _MTL_PRIVATE_SEL(groups));104}105106_MTL_INLINE MTL4::StaticLinkingDescriptor* MTL4::StaticLinkingDescriptor::init()107{108 return NS::Object::init<MTL4::StaticLinkingDescriptor>();109}110111_MTL_INLINE NS::Array* MTL4::StaticLinkingDescriptor::privateFunctionDescriptors() const112{113 return Object::sendMessage<NS::Array*>(this, _MTL_PRIVATE_SEL(privateFunctionDescriptors));114}115116_MTL_INLINE void MTL4::StaticLinkingDescriptor::setFunctionDescriptors(const NS::Array* functionDescriptors)117{118 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setFunctionDescriptors_), functionDescriptors);119}120121_MTL_INLINE void MTL4::StaticLinkingDescriptor::setGroups(const NS::Dictionary* groups)122{123 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setGroups_), groups);124}125126_MTL_INLINE void MTL4::StaticLinkingDescriptor::setPrivateFunctionDescriptors(const NS::Array* privateFunctionDescriptors)127{128 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setPrivateFunctionDescriptors_), privateFunctionDescriptors);129}130131_MTL_INLINE MTL4::PipelineStageDynamicLinkingDescriptor* MTL4::PipelineStageDynamicLinkingDescriptor::alloc()132{133 return NS::Object::alloc<MTL4::PipelineStageDynamicLinkingDescriptor>(_MTL_PRIVATE_CLS(MTL4PipelineStageDynamicLinkingDescriptor));134}135136_MTL_INLINE NS::Array* MTL4::PipelineStageDynamicLinkingDescriptor::binaryLinkedFunctions() const137{138 return Object::sendMessage<NS::Array*>(this, _MTL_PRIVATE_SEL(binaryLinkedFunctions));139}140141_MTL_INLINE MTL4::PipelineStageDynamicLinkingDescriptor* MTL4::PipelineStageDynamicLinkingDescriptor::init()142{143 return NS::Object::init<MTL4::PipelineStageDynamicLinkingDescriptor>();144}145146_MTL_INLINE NS::UInteger MTL4::PipelineStageDynamicLinkingDescriptor::maxCallStackDepth() const147{148 return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(maxCallStackDepth));149}150151_MTL_INLINE NS::Array* MTL4::PipelineStageDynamicLinkingDescriptor::preloadedLibraries() const152{153 return Object::sendMessage<NS::Array*>(this, _MTL_PRIVATE_SEL(preloadedLibraries));154}155156_MTL_INLINE void MTL4::PipelineStageDynamicLinkingDescriptor::setBinaryLinkedFunctions(const NS::Array* binaryLinkedFunctions)157{158 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setBinaryLinkedFunctions_), binaryLinkedFunctions);159}160161_MTL_INLINE void MTL4::PipelineStageDynamicLinkingDescriptor::setMaxCallStackDepth(NS::UInteger maxCallStackDepth)162{163 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setMaxCallStackDepth_), maxCallStackDepth);164}165166_MTL_INLINE void MTL4::PipelineStageDynamicLinkingDescriptor::setPreloadedLibraries(const NS::Array* preloadedLibraries)167{168 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setPreloadedLibraries_), preloadedLibraries);169}170171_MTL_INLINE MTL4::RenderPipelineDynamicLinkingDescriptor* MTL4::RenderPipelineDynamicLinkingDescriptor::alloc()172{173 return NS::Object::alloc<MTL4::RenderPipelineDynamicLinkingDescriptor>(_MTL_PRIVATE_CLS(MTL4RenderPipelineDynamicLinkingDescriptor));174}175176_MTL_INLINE MTL4::PipelineStageDynamicLinkingDescriptor* MTL4::RenderPipelineDynamicLinkingDescriptor::fragmentLinkingDescriptor() const177{178 return Object::sendMessage<MTL4::PipelineStageDynamicLinkingDescriptor*>(this, _MTL_PRIVATE_SEL(fragmentLinkingDescriptor));179}180181_MTL_INLINE MTL4::RenderPipelineDynamicLinkingDescriptor* MTL4::RenderPipelineDynamicLinkingDescriptor::init()182{183 return NS::Object::init<MTL4::RenderPipelineDynamicLinkingDescriptor>();184}185186_MTL_INLINE MTL4::PipelineStageDynamicLinkingDescriptor* MTL4::RenderPipelineDynamicLinkingDescriptor::meshLinkingDescriptor() const187{188 return Object::sendMessage<MTL4::PipelineStageDynamicLinkingDescriptor*>(this, _MTL_PRIVATE_SEL(meshLinkingDescriptor));189}190191_MTL_INLINE MTL4::PipelineStageDynamicLinkingDescriptor* MTL4::RenderPipelineDynamicLinkingDescriptor::objectLinkingDescriptor() const192{193 return Object::sendMessage<MTL4::PipelineStageDynamicLinkingDescriptor*>(this, _MTL_PRIVATE_SEL(objectLinkingDescriptor));194}195196_MTL_INLINE MTL4::PipelineStageDynamicLinkingDescriptor* MTL4::RenderPipelineDynamicLinkingDescriptor::tileLinkingDescriptor() const197{198 return Object::sendMessage<MTL4::PipelineStageDynamicLinkingDescriptor*>(this, _MTL_PRIVATE_SEL(tileLinkingDescriptor));199}200201_MTL_INLINE MTL4::PipelineStageDynamicLinkingDescriptor* MTL4::RenderPipelineDynamicLinkingDescriptor::vertexLinkingDescriptor() const202{203 return Object::sendMessage<MTL4::PipelineStageDynamicLinkingDescriptor*>(this, _MTL_PRIVATE_SEL(vertexLinkingDescriptor));204}205