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%
31.7 KB · 793 lines cpp
Raw Blame History
1//-------------------------------------------------------------------------------------------------------------------------------------------------------------2//3// Metal/MTLRenderPass.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 <cstdint>2829namespace MTL30{31class Buffer;32class CounterSampleBuffer;33class RasterizationRateMap;34class RenderPassAttachmentDescriptor;35class RenderPassColorAttachmentDescriptor;36class RenderPassColorAttachmentDescriptorArray;37class RenderPassDepthAttachmentDescriptor;38class RenderPassDescriptor;39class RenderPassSampleBufferAttachmentDescriptor;40class RenderPassSampleBufferAttachmentDescriptorArray;41class RenderPassStencilAttachmentDescriptor;42struct SamplePosition;43class Texture;44_MTL_ENUM(NS::UInteger, LoadAction) {45    LoadActionDontCare = 0,46    LoadActionLoad = 1,47    LoadActionClear = 2,48};4950_MTL_ENUM(NS::UInteger, StoreAction) {51    StoreActionDontCare = 0,52    StoreActionStore = 1,53    StoreActionMultisampleResolve = 2,54    StoreActionStoreAndMultisampleResolve = 3,55    StoreActionUnknown = 4,56    StoreActionCustomSampleDepthStore = 5,57};5859_MTL_ENUM(NS::Integer, VisibilityResultType) {60    VisibilityResultTypeReset = 0,61    VisibilityResultTypeAccumulate = 1,62};6364_MTL_ENUM(NS::UInteger, MultisampleDepthResolveFilter) {65    MultisampleDepthResolveFilterSample0 = 0,66    MultisampleDepthResolveFilterMin = 1,67    MultisampleDepthResolveFilterMax = 2,68};6970_MTL_ENUM(NS::UInteger, MultisampleStencilResolveFilter) {71    MultisampleStencilResolveFilterSample0 = 0,72    MultisampleStencilResolveFilterDepthResolvedSample = 1,73};7475_MTL_OPTIONS(NS::UInteger, StoreActionOptions) {76    StoreActionOptionNone = 0,77    StoreActionOptionCustomSamplePositions = 1,78    StoreActionOptionValidMask = 1,79};8081struct ClearColor82{83    ClearColor() = default;8485    ClearColor(double red, double green, double blue, double alpha);8687    static ClearColor Make(double red, double green, double blue, double alpha);8889    double            red;90    double            green;91    double            blue;92    double            alpha;93} _MTL_PACKED;9495class RenderPassAttachmentDescriptor : public NS::Copying<RenderPassAttachmentDescriptor>96{97public:98    static RenderPassAttachmentDescriptor* alloc();99100    NS::UInteger                           depthPlane() const;101102    RenderPassAttachmentDescriptor*        init();103104    NS::UInteger                           level() const;105106    LoadAction                             loadAction() const;107108    NS::UInteger                           resolveDepthPlane() const;109110    NS::UInteger                           resolveLevel() const;111112    NS::UInteger                           resolveSlice() const;113114    Texture*                               resolveTexture() const;115116    void                                   setDepthPlane(NS::UInteger depthPlane);117118    void                                   setLevel(NS::UInteger level);119120    void                                   setLoadAction(MTL::LoadAction loadAction);121122    void                                   setResolveDepthPlane(NS::UInteger resolveDepthPlane);123124    void                                   setResolveLevel(NS::UInteger resolveLevel);125126    void                                   setResolveSlice(NS::UInteger resolveSlice);127128    void                                   setResolveTexture(const MTL::Texture* resolveTexture);129130    void                                   setSlice(NS::UInteger slice);131132    void                                   setStoreAction(MTL::StoreAction storeAction);133    void                                   setStoreActionOptions(MTL::StoreActionOptions storeActionOptions);134135    void                                   setTexture(const MTL::Texture* texture);136137    NS::UInteger                           slice() const;138139    StoreAction                            storeAction() const;140    StoreActionOptions                     storeActionOptions() const;141142    Texture*                               texture() const;143};144class RenderPassColorAttachmentDescriptor : public NS::Copying<RenderPassColorAttachmentDescriptor, RenderPassAttachmentDescriptor>145{146public:147    static RenderPassColorAttachmentDescriptor* alloc();148149    ClearColor                                  clearColor() const;150151    RenderPassColorAttachmentDescriptor*        init();152153    void                                        setClearColor(MTL::ClearColor clearColor);154};155class RenderPassDepthAttachmentDescriptor : public NS::Copying<RenderPassDepthAttachmentDescriptor, RenderPassAttachmentDescriptor>156{157public:158    static RenderPassDepthAttachmentDescriptor* alloc();159160    double                                      clearDepth() const;161162    MultisampleDepthResolveFilter               depthResolveFilter() const;163164    RenderPassDepthAttachmentDescriptor*        init();165166    void                                        setClearDepth(double clearDepth);167168    void                                        setDepthResolveFilter(MTL::MultisampleDepthResolveFilter depthResolveFilter);169};170class RenderPassStencilAttachmentDescriptor : public NS::Copying<RenderPassStencilAttachmentDescriptor, RenderPassAttachmentDescriptor>171{172public:173    static RenderPassStencilAttachmentDescriptor* alloc();174175    uint32_t                                      clearStencil() const;176177    RenderPassStencilAttachmentDescriptor*        init();178179    void                                          setClearStencil(uint32_t clearStencil);180181    void                                          setStencilResolveFilter(MTL::MultisampleStencilResolveFilter stencilResolveFilter);182    MultisampleStencilResolveFilter               stencilResolveFilter() const;183};184class RenderPassColorAttachmentDescriptorArray : public NS::Referencing<RenderPassColorAttachmentDescriptorArray>185{186public:187    static RenderPassColorAttachmentDescriptorArray* alloc();188189    RenderPassColorAttachmentDescriptorArray*        init();190191    RenderPassColorAttachmentDescriptor*             object(NS::UInteger attachmentIndex);192    void                                             setObject(const MTL::RenderPassColorAttachmentDescriptor* attachment, NS::UInteger attachmentIndex);193};194class RenderPassSampleBufferAttachmentDescriptor : public NS::Copying<RenderPassSampleBufferAttachmentDescriptor>195{196public:197    static RenderPassSampleBufferAttachmentDescriptor* alloc();198199    NS::UInteger                                       endOfFragmentSampleIndex() const;200201    NS::UInteger                                       endOfVertexSampleIndex() const;202203    RenderPassSampleBufferAttachmentDescriptor*        init();204205    CounterSampleBuffer*                               sampleBuffer() const;206207    void                                               setEndOfFragmentSampleIndex(NS::UInteger endOfFragmentSampleIndex);208209    void                                               setEndOfVertexSampleIndex(NS::UInteger endOfVertexSampleIndex);210211    void                                               setSampleBuffer(const MTL::CounterSampleBuffer* sampleBuffer);212213    void                                               setStartOfFragmentSampleIndex(NS::UInteger startOfFragmentSampleIndex);214215    void                                               setStartOfVertexSampleIndex(NS::UInteger startOfVertexSampleIndex);216217    NS::UInteger                                       startOfFragmentSampleIndex() const;218219    NS::UInteger                                       startOfVertexSampleIndex() const;220};221class RenderPassSampleBufferAttachmentDescriptorArray : public NS::Referencing<RenderPassSampleBufferAttachmentDescriptorArray>222{223public:224    static RenderPassSampleBufferAttachmentDescriptorArray* alloc();225226    RenderPassSampleBufferAttachmentDescriptorArray*        init();227228    RenderPassSampleBufferAttachmentDescriptor*             object(NS::UInteger attachmentIndex);229    void                                                    setObject(const MTL::RenderPassSampleBufferAttachmentDescriptor* attachment, NS::UInteger attachmentIndex);230};231class RenderPassDescriptor : public NS::Copying<RenderPassDescriptor>232{233public:234    static RenderPassDescriptor*                     alloc();235236    RenderPassColorAttachmentDescriptorArray*        colorAttachments() const;237238    NS::UInteger                                     defaultRasterSampleCount() const;239240    RenderPassDepthAttachmentDescriptor*             depthAttachment() const;241242    NS::UInteger                                     getSamplePositions(MTL::SamplePosition* positions, NS::UInteger count);243244    NS::UInteger                                     imageblockSampleLength() const;245246    RenderPassDescriptor*                            init();247248    RasterizationRateMap*                            rasterizationRateMap() const;249250    static RenderPassDescriptor*                     renderPassDescriptor();251252    NS::UInteger                                     renderTargetArrayLength() const;253254    NS::UInteger                                     renderTargetHeight() const;255256    NS::UInteger                                     renderTargetWidth() const;257258    RenderPassSampleBufferAttachmentDescriptorArray* sampleBufferAttachments() const;259260    void                                             setDefaultRasterSampleCount(NS::UInteger defaultRasterSampleCount);261262    void                                             setDepthAttachment(const MTL::RenderPassDepthAttachmentDescriptor* depthAttachment);263264    void                                             setImageblockSampleLength(NS::UInteger imageblockSampleLength);265266    void                                             setRasterizationRateMap(const MTL::RasterizationRateMap* rasterizationRateMap);267268    void                                             setRenderTargetArrayLength(NS::UInteger renderTargetArrayLength);269270    void                                             setRenderTargetHeight(NS::UInteger renderTargetHeight);271272    void                                             setRenderTargetWidth(NS::UInteger renderTargetWidth);273274    void                                             setSamplePositions(const MTL::SamplePosition* positions, NS::UInteger count);275276    void                                             setStencilAttachment(const MTL::RenderPassStencilAttachmentDescriptor* stencilAttachment);277278    void                                             setSupportColorAttachmentMapping(bool supportColorAttachmentMapping);279280    void                                             setThreadgroupMemoryLength(NS::UInteger threadgroupMemoryLength);281282    void                                             setTileHeight(NS::UInteger tileHeight);283284    void                                             setTileWidth(NS::UInteger tileWidth);285286    void                                             setVisibilityResultBuffer(const MTL::Buffer* visibilityResultBuffer);287288    void                                             setVisibilityResultType(MTL::VisibilityResultType visibilityResultType);289290    RenderPassStencilAttachmentDescriptor*           stencilAttachment() const;291292    bool                                             supportColorAttachmentMapping() const;293294    NS::UInteger                                     threadgroupMemoryLength() const;295296    NS::UInteger                                     tileHeight() const;297298    NS::UInteger                                     tileWidth() const;299300    Buffer*                                          visibilityResultBuffer() const;301302    VisibilityResultType                             visibilityResultType() const;303};304305}306_MTL_INLINE MTL::ClearColor::ClearColor(double red, double green, double blue, double alpha)307    : red(red)308    , green(green)309    , blue(blue)310    , alpha(alpha)311{312}313314_MTL_INLINE MTL::ClearColor MTL::ClearColor::Make(double red, double green, double blue, double alpha)315{316    return ClearColor(red, green, blue, alpha);317}318319_MTL_INLINE MTL::RenderPassAttachmentDescriptor* MTL::RenderPassAttachmentDescriptor::alloc()320{321    return NS::Object::alloc<MTL::RenderPassAttachmentDescriptor>(_MTL_PRIVATE_CLS(MTLRenderPassAttachmentDescriptor));322}323324_MTL_INLINE NS::UInteger MTL::RenderPassAttachmentDescriptor::depthPlane() const325{326    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(depthPlane));327}328329_MTL_INLINE MTL::RenderPassAttachmentDescriptor* MTL::RenderPassAttachmentDescriptor::init()330{331    return NS::Object::init<MTL::RenderPassAttachmentDescriptor>();332}333334_MTL_INLINE NS::UInteger MTL::RenderPassAttachmentDescriptor::level() const335{336    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(level));337}338339_MTL_INLINE MTL::LoadAction MTL::RenderPassAttachmentDescriptor::loadAction() const340{341    return Object::sendMessage<MTL::LoadAction>(this, _MTL_PRIVATE_SEL(loadAction));342}343344_MTL_INLINE NS::UInteger MTL::RenderPassAttachmentDescriptor::resolveDepthPlane() const345{346    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(resolveDepthPlane));347}348349_MTL_INLINE NS::UInteger MTL::RenderPassAttachmentDescriptor::resolveLevel() const350{351    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(resolveLevel));352}353354_MTL_INLINE NS::UInteger MTL::RenderPassAttachmentDescriptor::resolveSlice() const355{356    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(resolveSlice));357}358359_MTL_INLINE MTL::Texture* MTL::RenderPassAttachmentDescriptor::resolveTexture() const360{361    return Object::sendMessage<MTL::Texture*>(this, _MTL_PRIVATE_SEL(resolveTexture));362}363364_MTL_INLINE void MTL::RenderPassAttachmentDescriptor::setDepthPlane(NS::UInteger depthPlane)365{366    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setDepthPlane_), depthPlane);367}368369_MTL_INLINE void MTL::RenderPassAttachmentDescriptor::setLevel(NS::UInteger level)370{371    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setLevel_), level);372}373374_MTL_INLINE void MTL::RenderPassAttachmentDescriptor::setLoadAction(MTL::LoadAction loadAction)375{376    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setLoadAction_), loadAction);377}378379_MTL_INLINE void MTL::RenderPassAttachmentDescriptor::setResolveDepthPlane(NS::UInteger resolveDepthPlane)380{381    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setResolveDepthPlane_), resolveDepthPlane);382}383384_MTL_INLINE void MTL::RenderPassAttachmentDescriptor::setResolveLevel(NS::UInteger resolveLevel)385{386    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setResolveLevel_), resolveLevel);387}388389_MTL_INLINE void MTL::RenderPassAttachmentDescriptor::setResolveSlice(NS::UInteger resolveSlice)390{391    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setResolveSlice_), resolveSlice);392}393394_MTL_INLINE void MTL::RenderPassAttachmentDescriptor::setResolveTexture(const MTL::Texture* resolveTexture)395{396    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setResolveTexture_), resolveTexture);397}398399_MTL_INLINE void MTL::RenderPassAttachmentDescriptor::setSlice(NS::UInteger slice)400{401    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setSlice_), slice);402}403404_MTL_INLINE void MTL::RenderPassAttachmentDescriptor::setStoreAction(MTL::StoreAction storeAction)405{406    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setStoreAction_), storeAction);407}408409_MTL_INLINE void MTL::RenderPassAttachmentDescriptor::setStoreActionOptions(MTL::StoreActionOptions storeActionOptions)410{411    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setStoreActionOptions_), storeActionOptions);412}413414_MTL_INLINE void MTL::RenderPassAttachmentDescriptor::setTexture(const MTL::Texture* texture)415{416    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setTexture_), texture);417}418419_MTL_INLINE NS::UInteger MTL::RenderPassAttachmentDescriptor::slice() const420{421    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(slice));422}423424_MTL_INLINE MTL::StoreAction MTL::RenderPassAttachmentDescriptor::storeAction() const425{426    return Object::sendMessage<MTL::StoreAction>(this, _MTL_PRIVATE_SEL(storeAction));427}428429_MTL_INLINE MTL::StoreActionOptions MTL::RenderPassAttachmentDescriptor::storeActionOptions() const430{431    return Object::sendMessage<MTL::StoreActionOptions>(this, _MTL_PRIVATE_SEL(storeActionOptions));432}433434_MTL_INLINE MTL::Texture* MTL::RenderPassAttachmentDescriptor::texture() const435{436    return Object::sendMessage<MTL::Texture*>(this, _MTL_PRIVATE_SEL(texture));437}438439_MTL_INLINE MTL::RenderPassColorAttachmentDescriptor* MTL::RenderPassColorAttachmentDescriptor::alloc()440{441    return NS::Object::alloc<MTL::RenderPassColorAttachmentDescriptor>(_MTL_PRIVATE_CLS(MTLRenderPassColorAttachmentDescriptor));442}443444_MTL_INLINE MTL::ClearColor MTL::RenderPassColorAttachmentDescriptor::clearColor() const445{446    return Object::sendMessage<MTL::ClearColor>(this, _MTL_PRIVATE_SEL(clearColor));447}448449_MTL_INLINE MTL::RenderPassColorAttachmentDescriptor* MTL::RenderPassColorAttachmentDescriptor::init()450{451    return NS::Object::init<MTL::RenderPassColorAttachmentDescriptor>();452}453454_MTL_INLINE void MTL::RenderPassColorAttachmentDescriptor::setClearColor(MTL::ClearColor clearColor)455{456    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setClearColor_), clearColor);457}458459_MTL_INLINE MTL::RenderPassDepthAttachmentDescriptor* MTL::RenderPassDepthAttachmentDescriptor::alloc()460{461    return NS::Object::alloc<MTL::RenderPassDepthAttachmentDescriptor>(_MTL_PRIVATE_CLS(MTLRenderPassDepthAttachmentDescriptor));462}463464_MTL_INLINE double MTL::RenderPassDepthAttachmentDescriptor::clearDepth() const465{466    return Object::sendMessage<double>(this, _MTL_PRIVATE_SEL(clearDepth));467}468469_MTL_INLINE MTL::MultisampleDepthResolveFilter MTL::RenderPassDepthAttachmentDescriptor::depthResolveFilter() const470{471    return Object::sendMessage<MTL::MultisampleDepthResolveFilter>(this, _MTL_PRIVATE_SEL(depthResolveFilter));472}473474_MTL_INLINE MTL::RenderPassDepthAttachmentDescriptor* MTL::RenderPassDepthAttachmentDescriptor::init()475{476    return NS::Object::init<MTL::RenderPassDepthAttachmentDescriptor>();477}478479_MTL_INLINE void MTL::RenderPassDepthAttachmentDescriptor::setClearDepth(double clearDepth)480{481    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setClearDepth_), clearDepth);482}483484_MTL_INLINE void MTL::RenderPassDepthAttachmentDescriptor::setDepthResolveFilter(MTL::MultisampleDepthResolveFilter depthResolveFilter)485{486    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setDepthResolveFilter_), depthResolveFilter);487}488489_MTL_INLINE MTL::RenderPassStencilAttachmentDescriptor* MTL::RenderPassStencilAttachmentDescriptor::alloc()490{491    return NS::Object::alloc<MTL::RenderPassStencilAttachmentDescriptor>(_MTL_PRIVATE_CLS(MTLRenderPassStencilAttachmentDescriptor));492}493494_MTL_INLINE uint32_t MTL::RenderPassStencilAttachmentDescriptor::clearStencil() const495{496    return Object::sendMessage<uint32_t>(this, _MTL_PRIVATE_SEL(clearStencil));497}498499_MTL_INLINE MTL::RenderPassStencilAttachmentDescriptor* MTL::RenderPassStencilAttachmentDescriptor::init()500{501    return NS::Object::init<MTL::RenderPassStencilAttachmentDescriptor>();502}503504_MTL_INLINE void MTL::RenderPassStencilAttachmentDescriptor::setClearStencil(uint32_t clearStencil)505{506    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setClearStencil_), clearStencil);507}508509_MTL_INLINE void MTL::RenderPassStencilAttachmentDescriptor::setStencilResolveFilter(MTL::MultisampleStencilResolveFilter stencilResolveFilter)510{511    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setStencilResolveFilter_), stencilResolveFilter);512}513514_MTL_INLINE MTL::MultisampleStencilResolveFilter MTL::RenderPassStencilAttachmentDescriptor::stencilResolveFilter() const515{516    return Object::sendMessage<MTL::MultisampleStencilResolveFilter>(this, _MTL_PRIVATE_SEL(stencilResolveFilter));517}518519_MTL_INLINE MTL::RenderPassColorAttachmentDescriptorArray* MTL::RenderPassColorAttachmentDescriptorArray::alloc()520{521    return NS::Object::alloc<MTL::RenderPassColorAttachmentDescriptorArray>(_MTL_PRIVATE_CLS(MTLRenderPassColorAttachmentDescriptorArray));522}523524_MTL_INLINE MTL::RenderPassColorAttachmentDescriptorArray* MTL::RenderPassColorAttachmentDescriptorArray::init()525{526    return NS::Object::init<MTL::RenderPassColorAttachmentDescriptorArray>();527}528529_MTL_INLINE MTL::RenderPassColorAttachmentDescriptor* MTL::RenderPassColorAttachmentDescriptorArray::object(NS::UInteger attachmentIndex)530{531    return Object::sendMessage<MTL::RenderPassColorAttachmentDescriptor*>(this, _MTL_PRIVATE_SEL(objectAtIndexedSubscript_), attachmentIndex);532}533534_MTL_INLINE void MTL::RenderPassColorAttachmentDescriptorArray::setObject(const MTL::RenderPassColorAttachmentDescriptor* attachment, NS::UInteger attachmentIndex)535{536    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setObject_atIndexedSubscript_), attachment, attachmentIndex);537}538539_MTL_INLINE MTL::RenderPassSampleBufferAttachmentDescriptor* MTL::RenderPassSampleBufferAttachmentDescriptor::alloc()540{541    return NS::Object::alloc<MTL::RenderPassSampleBufferAttachmentDescriptor>(_MTL_PRIVATE_CLS(MTLRenderPassSampleBufferAttachmentDescriptor));542}543544_MTL_INLINE NS::UInteger MTL::RenderPassSampleBufferAttachmentDescriptor::endOfFragmentSampleIndex() const545{546    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(endOfFragmentSampleIndex));547}548549_MTL_INLINE NS::UInteger MTL::RenderPassSampleBufferAttachmentDescriptor::endOfVertexSampleIndex() const550{551    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(endOfVertexSampleIndex));552}553554_MTL_INLINE MTL::RenderPassSampleBufferAttachmentDescriptor* MTL::RenderPassSampleBufferAttachmentDescriptor::init()555{556    return NS::Object::init<MTL::RenderPassSampleBufferAttachmentDescriptor>();557}558559_MTL_INLINE MTL::CounterSampleBuffer* MTL::RenderPassSampleBufferAttachmentDescriptor::sampleBuffer() const560{561    return Object::sendMessage<MTL::CounterSampleBuffer*>(this, _MTL_PRIVATE_SEL(sampleBuffer));562}563564_MTL_INLINE void MTL::RenderPassSampleBufferAttachmentDescriptor::setEndOfFragmentSampleIndex(NS::UInteger endOfFragmentSampleIndex)565{566    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setEndOfFragmentSampleIndex_), endOfFragmentSampleIndex);567}568569_MTL_INLINE void MTL::RenderPassSampleBufferAttachmentDescriptor::setEndOfVertexSampleIndex(NS::UInteger endOfVertexSampleIndex)570{571    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setEndOfVertexSampleIndex_), endOfVertexSampleIndex);572}573574_MTL_INLINE void MTL::RenderPassSampleBufferAttachmentDescriptor::setSampleBuffer(const MTL::CounterSampleBuffer* sampleBuffer)575{576    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setSampleBuffer_), sampleBuffer);577}578579_MTL_INLINE void MTL::RenderPassSampleBufferAttachmentDescriptor::setStartOfFragmentSampleIndex(NS::UInteger startOfFragmentSampleIndex)580{581    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setStartOfFragmentSampleIndex_), startOfFragmentSampleIndex);582}583584_MTL_INLINE void MTL::RenderPassSampleBufferAttachmentDescriptor::setStartOfVertexSampleIndex(NS::UInteger startOfVertexSampleIndex)585{586    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setStartOfVertexSampleIndex_), startOfVertexSampleIndex);587}588589_MTL_INLINE NS::UInteger MTL::RenderPassSampleBufferAttachmentDescriptor::startOfFragmentSampleIndex() const590{591    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(startOfFragmentSampleIndex));592}593594_MTL_INLINE NS::UInteger MTL::RenderPassSampleBufferAttachmentDescriptor::startOfVertexSampleIndex() const595{596    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(startOfVertexSampleIndex));597}598599_MTL_INLINE MTL::RenderPassSampleBufferAttachmentDescriptorArray* MTL::RenderPassSampleBufferAttachmentDescriptorArray::alloc()600{601    return NS::Object::alloc<MTL::RenderPassSampleBufferAttachmentDescriptorArray>(_MTL_PRIVATE_CLS(MTLRenderPassSampleBufferAttachmentDescriptorArray));602}603604_MTL_INLINE MTL::RenderPassSampleBufferAttachmentDescriptorArray* MTL::RenderPassSampleBufferAttachmentDescriptorArray::init()605{606    return NS::Object::init<MTL::RenderPassSampleBufferAttachmentDescriptorArray>();607}608609_MTL_INLINE MTL::RenderPassSampleBufferAttachmentDescriptor* MTL::RenderPassSampleBufferAttachmentDescriptorArray::object(NS::UInteger attachmentIndex)610{611    return Object::sendMessage<MTL::RenderPassSampleBufferAttachmentDescriptor*>(this, _MTL_PRIVATE_SEL(objectAtIndexedSubscript_), attachmentIndex);612}613614_MTL_INLINE void MTL::RenderPassSampleBufferAttachmentDescriptorArray::setObject(const MTL::RenderPassSampleBufferAttachmentDescriptor* attachment, NS::UInteger attachmentIndex)615{616    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setObject_atIndexedSubscript_), attachment, attachmentIndex);617}618619_MTL_INLINE MTL::RenderPassDescriptor* MTL::RenderPassDescriptor::alloc()620{621    return NS::Object::alloc<MTL::RenderPassDescriptor>(_MTL_PRIVATE_CLS(MTLRenderPassDescriptor));622}623624_MTL_INLINE MTL::RenderPassColorAttachmentDescriptorArray* MTL::RenderPassDescriptor::colorAttachments() const625{626    return Object::sendMessage<MTL::RenderPassColorAttachmentDescriptorArray*>(this, _MTL_PRIVATE_SEL(colorAttachments));627}628629_MTL_INLINE NS::UInteger MTL::RenderPassDescriptor::defaultRasterSampleCount() const630{631    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(defaultRasterSampleCount));632}633634_MTL_INLINE MTL::RenderPassDepthAttachmentDescriptor* MTL::RenderPassDescriptor::depthAttachment() const635{636    return Object::sendMessage<MTL::RenderPassDepthAttachmentDescriptor*>(this, _MTL_PRIVATE_SEL(depthAttachment));637}638639_MTL_INLINE NS::UInteger MTL::RenderPassDescriptor::getSamplePositions(MTL::SamplePosition* positions, NS::UInteger count)640{641    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(getSamplePositions_count_), positions, count);642}643644_MTL_INLINE NS::UInteger MTL::RenderPassDescriptor::imageblockSampleLength() const645{646    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(imageblockSampleLength));647}648649_MTL_INLINE MTL::RenderPassDescriptor* MTL::RenderPassDescriptor::init()650{651    return NS::Object::init<MTL::RenderPassDescriptor>();652}653654_MTL_INLINE MTL::RasterizationRateMap* MTL::RenderPassDescriptor::rasterizationRateMap() const655{656    return Object::sendMessage<MTL::RasterizationRateMap*>(this, _MTL_PRIVATE_SEL(rasterizationRateMap));657}658659_MTL_INLINE MTL::RenderPassDescriptor* MTL::RenderPassDescriptor::renderPassDescriptor()660{661    return Object::sendMessage<MTL::RenderPassDescriptor*>(_MTL_PRIVATE_CLS(MTLRenderPassDescriptor), _MTL_PRIVATE_SEL(renderPassDescriptor));662}663664_MTL_INLINE NS::UInteger MTL::RenderPassDescriptor::renderTargetArrayLength() const665{666    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(renderTargetArrayLength));667}668669_MTL_INLINE NS::UInteger MTL::RenderPassDescriptor::renderTargetHeight() const670{671    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(renderTargetHeight));672}673674_MTL_INLINE NS::UInteger MTL::RenderPassDescriptor::renderTargetWidth() const675{676    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(renderTargetWidth));677}678679_MTL_INLINE MTL::RenderPassSampleBufferAttachmentDescriptorArray* MTL::RenderPassDescriptor::sampleBufferAttachments() const680{681    return Object::sendMessage<MTL::RenderPassSampleBufferAttachmentDescriptorArray*>(this, _MTL_PRIVATE_SEL(sampleBufferAttachments));682}683684_MTL_INLINE void MTL::RenderPassDescriptor::setDefaultRasterSampleCount(NS::UInteger defaultRasterSampleCount)685{686    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setDefaultRasterSampleCount_), defaultRasterSampleCount);687}688689_MTL_INLINE void MTL::RenderPassDescriptor::setDepthAttachment(const MTL::RenderPassDepthAttachmentDescriptor* depthAttachment)690{691    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setDepthAttachment_), depthAttachment);692}693694_MTL_INLINE void MTL::RenderPassDescriptor::setImageblockSampleLength(NS::UInteger imageblockSampleLength)695{696    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setImageblockSampleLength_), imageblockSampleLength);697}698699_MTL_INLINE void MTL::RenderPassDescriptor::setRasterizationRateMap(const MTL::RasterizationRateMap* rasterizationRateMap)700{701    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setRasterizationRateMap_), rasterizationRateMap);702}703704_MTL_INLINE void MTL::RenderPassDescriptor::setRenderTargetArrayLength(NS::UInteger renderTargetArrayLength)705{706    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setRenderTargetArrayLength_), renderTargetArrayLength);707}708709_MTL_INLINE void MTL::RenderPassDescriptor::setRenderTargetHeight(NS::UInteger renderTargetHeight)710{711    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setRenderTargetHeight_), renderTargetHeight);712}713714_MTL_INLINE void MTL::RenderPassDescriptor::setRenderTargetWidth(NS::UInteger renderTargetWidth)715{716    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setRenderTargetWidth_), renderTargetWidth);717}718719_MTL_INLINE void MTL::RenderPassDescriptor::setSamplePositions(const MTL::SamplePosition* positions, NS::UInteger count)720{721    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setSamplePositions_count_), positions, count);722}723724_MTL_INLINE void MTL::RenderPassDescriptor::setStencilAttachment(const MTL::RenderPassStencilAttachmentDescriptor* stencilAttachment)725{726    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setStencilAttachment_), stencilAttachment);727}728729_MTL_INLINE void MTL::RenderPassDescriptor::setSupportColorAttachmentMapping(bool supportColorAttachmentMapping)730{731    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setSupportColorAttachmentMapping_), supportColorAttachmentMapping);732}733734_MTL_INLINE void MTL::RenderPassDescriptor::setThreadgroupMemoryLength(NS::UInteger threadgroupMemoryLength)735{736    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setThreadgroupMemoryLength_), threadgroupMemoryLength);737}738739_MTL_INLINE void MTL::RenderPassDescriptor::setTileHeight(NS::UInteger tileHeight)740{741    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setTileHeight_), tileHeight);742}743744_MTL_INLINE void MTL::RenderPassDescriptor::setTileWidth(NS::UInteger tileWidth)745{746    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setTileWidth_), tileWidth);747}748749_MTL_INLINE void MTL::RenderPassDescriptor::setVisibilityResultBuffer(const MTL::Buffer* visibilityResultBuffer)750{751    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setVisibilityResultBuffer_), visibilityResultBuffer);752}753754_MTL_INLINE void MTL::RenderPassDescriptor::setVisibilityResultType(MTL::VisibilityResultType visibilityResultType)755{756    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setVisibilityResultType_), visibilityResultType);757}758759_MTL_INLINE MTL::RenderPassStencilAttachmentDescriptor* MTL::RenderPassDescriptor::stencilAttachment() const760{761    return Object::sendMessage<MTL::RenderPassStencilAttachmentDescriptor*>(this, _MTL_PRIVATE_SEL(stencilAttachment));762}763764_MTL_INLINE bool MTL::RenderPassDescriptor::supportColorAttachmentMapping() const765{766    return Object::sendMessageSafe<bool>(this, _MTL_PRIVATE_SEL(supportColorAttachmentMapping));767}768769_MTL_INLINE NS::UInteger MTL::RenderPassDescriptor::threadgroupMemoryLength() const770{771    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(threadgroupMemoryLength));772}773774_MTL_INLINE NS::UInteger MTL::RenderPassDescriptor::tileHeight() const775{776    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(tileHeight));777}778779_MTL_INLINE NS::UInteger MTL::RenderPassDescriptor::tileWidth() const780{781    return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(tileWidth));782}783784_MTL_INLINE MTL::Buffer* MTL::RenderPassDescriptor::visibilityResultBuffer() const785{786    return Object::sendMessage<MTL::Buffer*>(this, _MTL_PRIVATE_SEL(visibilityResultBuffer));787}788789_MTL_INLINE MTL::VisibilityResultType MTL::RenderPassDescriptor::visibilityResultType() const790{791    return Object::sendMessage<MTL::VisibilityResultType>(this, _MTL_PRIVATE_SEL(visibilityResultType));792}793