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/MTL4RenderPass.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"27#include "MTLRenderPass.hpp"2829namespace MTL430{31class RenderPassDescriptor;32}3334namespace MTL35{36class Buffer;37class RasterizationRateMap;38class RenderPassColorAttachmentDescriptorArray;39class RenderPassDepthAttachmentDescriptor;40class RenderPassStencilAttachmentDescriptor;41struct SamplePosition;42}4344namespace MTL445{46class RenderPassDescriptor : public NS::Copying<RenderPassDescriptor>47{48public:49 static RenderPassDescriptor* alloc();5051 MTL::RenderPassColorAttachmentDescriptorArray* colorAttachments() const;5253 NS::UInteger defaultRasterSampleCount() const;5455 MTL::RenderPassDepthAttachmentDescriptor* depthAttachment() const;5657 NS::UInteger getSamplePositions(MTL::SamplePosition* positions, NS::UInteger count);5859 NS::UInteger imageblockSampleLength() const;6061 RenderPassDescriptor* init();6263 MTL::RasterizationRateMap* rasterizationRateMap() const;6465 NS::UInteger renderTargetArrayLength() const;6667 NS::UInteger renderTargetHeight() const;6869 NS::UInteger renderTargetWidth() const;7071 void setDefaultRasterSampleCount(NS::UInteger defaultRasterSampleCount);7273 void setDepthAttachment(const MTL::RenderPassDepthAttachmentDescriptor* depthAttachment);7475 void setImageblockSampleLength(NS::UInteger imageblockSampleLength);7677 void setRasterizationRateMap(const MTL::RasterizationRateMap* rasterizationRateMap);7879 void setRenderTargetArrayLength(NS::UInteger renderTargetArrayLength);8081 void setRenderTargetHeight(NS::UInteger renderTargetHeight);8283 void setRenderTargetWidth(NS::UInteger renderTargetWidth);8485 void setSamplePositions(const MTL::SamplePosition* positions, NS::UInteger count);8687 void setStencilAttachment(const MTL::RenderPassStencilAttachmentDescriptor* stencilAttachment);8889 void setSupportColorAttachmentMapping(bool supportColorAttachmentMapping);9091 void setThreadgroupMemoryLength(NS::UInteger threadgroupMemoryLength);9293 void setTileHeight(NS::UInteger tileHeight);9495 void setTileWidth(NS::UInteger tileWidth);9697 void setVisibilityResultBuffer(const MTL::Buffer* visibilityResultBuffer);9899 void setVisibilityResultType(MTL::VisibilityResultType visibilityResultType);100101 MTL::RenderPassStencilAttachmentDescriptor* stencilAttachment() const;102103 bool supportColorAttachmentMapping() const;104105 NS::UInteger threadgroupMemoryLength() const;106107 NS::UInteger tileHeight() const;108109 NS::UInteger tileWidth() const;110111 MTL::Buffer* visibilityResultBuffer() const;112113 MTL::VisibilityResultType visibilityResultType() const;114};115116}117_MTL_INLINE MTL4::RenderPassDescriptor* MTL4::RenderPassDescriptor::alloc()118{119 return NS::Object::alloc<MTL4::RenderPassDescriptor>(_MTL_PRIVATE_CLS(MTL4RenderPassDescriptor));120}121122_MTL_INLINE MTL::RenderPassColorAttachmentDescriptorArray* MTL4::RenderPassDescriptor::colorAttachments() const123{124 return Object::sendMessage<MTL::RenderPassColorAttachmentDescriptorArray*>(this, _MTL_PRIVATE_SEL(colorAttachments));125}126127_MTL_INLINE NS::UInteger MTL4::RenderPassDescriptor::defaultRasterSampleCount() const128{129 return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(defaultRasterSampleCount));130}131132_MTL_INLINE MTL::RenderPassDepthAttachmentDescriptor* MTL4::RenderPassDescriptor::depthAttachment() const133{134 return Object::sendMessage<MTL::RenderPassDepthAttachmentDescriptor*>(this, _MTL_PRIVATE_SEL(depthAttachment));135}136137_MTL_INLINE NS::UInteger MTL4::RenderPassDescriptor::getSamplePositions(MTL::SamplePosition* positions, NS::UInteger count)138{139 return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(getSamplePositions_count_), positions, count);140}141142_MTL_INLINE NS::UInteger MTL4::RenderPassDescriptor::imageblockSampleLength() const143{144 return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(imageblockSampleLength));145}146147_MTL_INLINE MTL4::RenderPassDescriptor* MTL4::RenderPassDescriptor::init()148{149 return NS::Object::init<MTL4::RenderPassDescriptor>();150}151152_MTL_INLINE MTL::RasterizationRateMap* MTL4::RenderPassDescriptor::rasterizationRateMap() const153{154 return Object::sendMessage<MTL::RasterizationRateMap*>(this, _MTL_PRIVATE_SEL(rasterizationRateMap));155}156157_MTL_INLINE NS::UInteger MTL4::RenderPassDescriptor::renderTargetArrayLength() const158{159 return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(renderTargetArrayLength));160}161162_MTL_INLINE NS::UInteger MTL4::RenderPassDescriptor::renderTargetHeight() const163{164 return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(renderTargetHeight));165}166167_MTL_INLINE NS::UInteger MTL4::RenderPassDescriptor::renderTargetWidth() const168{169 return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(renderTargetWidth));170}171172_MTL_INLINE void MTL4::RenderPassDescriptor::setDefaultRasterSampleCount(NS::UInteger defaultRasterSampleCount)173{174 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setDefaultRasterSampleCount_), defaultRasterSampleCount);175}176177_MTL_INLINE void MTL4::RenderPassDescriptor::setDepthAttachment(const MTL::RenderPassDepthAttachmentDescriptor* depthAttachment)178{179 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setDepthAttachment_), depthAttachment);180}181182_MTL_INLINE void MTL4::RenderPassDescriptor::setImageblockSampleLength(NS::UInteger imageblockSampleLength)183{184 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setImageblockSampleLength_), imageblockSampleLength);185}186187_MTL_INLINE void MTL4::RenderPassDescriptor::setRasterizationRateMap(const MTL::RasterizationRateMap* rasterizationRateMap)188{189 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setRasterizationRateMap_), rasterizationRateMap);190}191192_MTL_INLINE void MTL4::RenderPassDescriptor::setRenderTargetArrayLength(NS::UInteger renderTargetArrayLength)193{194 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setRenderTargetArrayLength_), renderTargetArrayLength);195}196197_MTL_INLINE void MTL4::RenderPassDescriptor::setRenderTargetHeight(NS::UInteger renderTargetHeight)198{199 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setRenderTargetHeight_), renderTargetHeight);200}201202_MTL_INLINE void MTL4::RenderPassDescriptor::setRenderTargetWidth(NS::UInteger renderTargetWidth)203{204 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setRenderTargetWidth_), renderTargetWidth);205}206207_MTL_INLINE void MTL4::RenderPassDescriptor::setSamplePositions(const MTL::SamplePosition* positions, NS::UInteger count)208{209 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setSamplePositions_count_), positions, count);210}211212_MTL_INLINE void MTL4::RenderPassDescriptor::setStencilAttachment(const MTL::RenderPassStencilAttachmentDescriptor* stencilAttachment)213{214 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setStencilAttachment_), stencilAttachment);215}216217_MTL_INLINE void MTL4::RenderPassDescriptor::setSupportColorAttachmentMapping(bool supportColorAttachmentMapping)218{219 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setSupportColorAttachmentMapping_), supportColorAttachmentMapping);220}221222_MTL_INLINE void MTL4::RenderPassDescriptor::setThreadgroupMemoryLength(NS::UInteger threadgroupMemoryLength)223{224 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setThreadgroupMemoryLength_), threadgroupMemoryLength);225}226227_MTL_INLINE void MTL4::RenderPassDescriptor::setTileHeight(NS::UInteger tileHeight)228{229 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setTileHeight_), tileHeight);230}231232_MTL_INLINE void MTL4::RenderPassDescriptor::setTileWidth(NS::UInteger tileWidth)233{234 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setTileWidth_), tileWidth);235}236237_MTL_INLINE void MTL4::RenderPassDescriptor::setVisibilityResultBuffer(const MTL::Buffer* visibilityResultBuffer)238{239 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setVisibilityResultBuffer_), visibilityResultBuffer);240}241242_MTL_INLINE void MTL4::RenderPassDescriptor::setVisibilityResultType(MTL::VisibilityResultType visibilityResultType)243{244 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setVisibilityResultType_), visibilityResultType);245}246247_MTL_INLINE MTL::RenderPassStencilAttachmentDescriptor* MTL4::RenderPassDescriptor::stencilAttachment() const248{249 return Object::sendMessage<MTL::RenderPassStencilAttachmentDescriptor*>(this, _MTL_PRIVATE_SEL(stencilAttachment));250}251252_MTL_INLINE bool MTL4::RenderPassDescriptor::supportColorAttachmentMapping() const253{254 return Object::sendMessageSafe<bool>(this, _MTL_PRIVATE_SEL(supportColorAttachmentMapping));255}256257_MTL_INLINE NS::UInteger MTL4::RenderPassDescriptor::threadgroupMemoryLength() const258{259 return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(threadgroupMemoryLength));260}261262_MTL_INLINE NS::UInteger MTL4::RenderPassDescriptor::tileHeight() const263{264 return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(tileHeight));265}266267_MTL_INLINE NS::UInteger MTL4::RenderPassDescriptor::tileWidth() const268{269 return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(tileWidth));270}271272_MTL_INLINE MTL::Buffer* MTL4::RenderPassDescriptor::visibilityResultBuffer() const273{274 return Object::sendMessage<MTL::Buffer*>(this, _MTL_PRIVATE_SEL(visibilityResultBuffer));275}276277_MTL_INLINE MTL::VisibilityResultType MTL4::RenderPassDescriptor::visibilityResultType() const278{279 return Object::sendMessage<MTL::VisibilityResultType>(this, _MTL_PRIVATE_SEL(visibilityResultType));280}281