SPB Git

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%
11.2 KB · 281 lines cpp
Raw Blame History
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