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%
9.3 KB · 278 lines cpp
Raw Blame History
1//-------------------------------------------------------------------------------------------------------------------------------------------------------------2//3// Metal/MTLDepthStencil.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 "MTLTypes.hpp"28#include <cstdint>2930namespace MTL31{32class DepthStencilDescriptor;33class Device;34class StencilDescriptor;35_MTL_ENUM(NS::UInteger, CompareFunction) {36    CompareFunctionNever = 0,37    CompareFunctionLess = 1,38    CompareFunctionEqual = 2,39    CompareFunctionLessEqual = 3,40    CompareFunctionGreater = 4,41    CompareFunctionNotEqual = 5,42    CompareFunctionGreaterEqual = 6,43    CompareFunctionAlways = 7,44};4546_MTL_ENUM(NS::UInteger, StencilOperation) {47    StencilOperationKeep = 0,48    StencilOperationZero = 1,49    StencilOperationReplace = 2,50    StencilOperationIncrementClamp = 3,51    StencilOperationDecrementClamp = 4,52    StencilOperationInvert = 5,53    StencilOperationIncrementWrap = 6,54    StencilOperationDecrementWrap = 7,55};5657class StencilDescriptor : public NS::Copying<StencilDescriptor>58{59public:60    static StencilDescriptor* alloc();6162    StencilOperation          depthFailureOperation() const;6364    StencilOperation          depthStencilPassOperation() const;6566    StencilDescriptor*        init();6768    uint32_t                  readMask() const;6970    void                      setDepthFailureOperation(MTL::StencilOperation depthFailureOperation);7172    void                      setDepthStencilPassOperation(MTL::StencilOperation depthStencilPassOperation);7374    void                      setReadMask(uint32_t readMask);7576    void                      setStencilCompareFunction(MTL::CompareFunction stencilCompareFunction);7778    void                      setStencilFailureOperation(MTL::StencilOperation stencilFailureOperation);7980    void                      setWriteMask(uint32_t writeMask);8182    CompareFunction           stencilCompareFunction() const;8384    StencilOperation          stencilFailureOperation() const;8586    uint32_t                  writeMask() const;87};88class DepthStencilDescriptor : public NS::Copying<DepthStencilDescriptor>89{90public:91    static DepthStencilDescriptor* alloc();9293    StencilDescriptor*             backFaceStencil() const;9495    CompareFunction                depthCompareFunction() const;9697    [[deprecated("please use isDepthWriteEnabled instead")]]98    bool                    depthWriteEnabled() const;99100    StencilDescriptor*      frontFaceStencil() const;101102    DepthStencilDescriptor* init();103104    bool                    isDepthWriteEnabled() const;105106    NS::String*             label() const;107108    void                    setBackFaceStencil(const MTL::StencilDescriptor* backFaceStencil);109110    void                    setDepthCompareFunction(MTL::CompareFunction depthCompareFunction);111112    void                    setDepthWriteEnabled(bool depthWriteEnabled);113114    void                    setFrontFaceStencil(const MTL::StencilDescriptor* frontFaceStencil);115116    void                    setLabel(const NS::String* label);117};118class DepthStencilState : public NS::Referencing<DepthStencilState>119{120public:121    Device*     device() const;122123    ResourceID  gpuResourceID() const;124125    NS::String* label() const;126};127128}129_MTL_INLINE MTL::StencilDescriptor* MTL::StencilDescriptor::alloc()130{131    return NS::Object::alloc<MTL::StencilDescriptor>(_MTL_PRIVATE_CLS(MTLStencilDescriptor));132}133134_MTL_INLINE MTL::StencilOperation MTL::StencilDescriptor::depthFailureOperation() const135{136    return Object::sendMessage<MTL::StencilOperation>(this, _MTL_PRIVATE_SEL(depthFailureOperation));137}138139_MTL_INLINE MTL::StencilOperation MTL::StencilDescriptor::depthStencilPassOperation() const140{141    return Object::sendMessage<MTL::StencilOperation>(this, _MTL_PRIVATE_SEL(depthStencilPassOperation));142}143144_MTL_INLINE MTL::StencilDescriptor* MTL::StencilDescriptor::init()145{146    return NS::Object::init<MTL::StencilDescriptor>();147}148149_MTL_INLINE uint32_t MTL::StencilDescriptor::readMask() const150{151    return Object::sendMessage<uint32_t>(this, _MTL_PRIVATE_SEL(readMask));152}153154_MTL_INLINE void MTL::StencilDescriptor::setDepthFailureOperation(MTL::StencilOperation depthFailureOperation)155{156    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setDepthFailureOperation_), depthFailureOperation);157}158159_MTL_INLINE void MTL::StencilDescriptor::setDepthStencilPassOperation(MTL::StencilOperation depthStencilPassOperation)160{161    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setDepthStencilPassOperation_), depthStencilPassOperation);162}163164_MTL_INLINE void MTL::StencilDescriptor::setReadMask(uint32_t readMask)165{166    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setReadMask_), readMask);167}168169_MTL_INLINE void MTL::StencilDescriptor::setStencilCompareFunction(MTL::CompareFunction stencilCompareFunction)170{171    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setStencilCompareFunction_), stencilCompareFunction);172}173174_MTL_INLINE void MTL::StencilDescriptor::setStencilFailureOperation(MTL::StencilOperation stencilFailureOperation)175{176    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setStencilFailureOperation_), stencilFailureOperation);177}178179_MTL_INLINE void MTL::StencilDescriptor::setWriteMask(uint32_t writeMask)180{181    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setWriteMask_), writeMask);182}183184_MTL_INLINE MTL::CompareFunction MTL::StencilDescriptor::stencilCompareFunction() const185{186    return Object::sendMessage<MTL::CompareFunction>(this, _MTL_PRIVATE_SEL(stencilCompareFunction));187}188189_MTL_INLINE MTL::StencilOperation MTL::StencilDescriptor::stencilFailureOperation() const190{191    return Object::sendMessage<MTL::StencilOperation>(this, _MTL_PRIVATE_SEL(stencilFailureOperation));192}193194_MTL_INLINE uint32_t MTL::StencilDescriptor::writeMask() const195{196    return Object::sendMessage<uint32_t>(this, _MTL_PRIVATE_SEL(writeMask));197}198199_MTL_INLINE MTL::DepthStencilDescriptor* MTL::DepthStencilDescriptor::alloc()200{201    return NS::Object::alloc<MTL::DepthStencilDescriptor>(_MTL_PRIVATE_CLS(MTLDepthStencilDescriptor));202}203204_MTL_INLINE MTL::StencilDescriptor* MTL::DepthStencilDescriptor::backFaceStencil() const205{206    return Object::sendMessage<MTL::StencilDescriptor*>(this, _MTL_PRIVATE_SEL(backFaceStencil));207}208209_MTL_INLINE MTL::CompareFunction MTL::DepthStencilDescriptor::depthCompareFunction() const210{211    return Object::sendMessage<MTL::CompareFunction>(this, _MTL_PRIVATE_SEL(depthCompareFunction));212}213214_MTL_INLINE bool MTL::DepthStencilDescriptor::depthWriteEnabled() const215{216    return Object::sendMessage<bool>(this, _MTL_PRIVATE_SEL(isDepthWriteEnabled));217}218219_MTL_INLINE MTL::StencilDescriptor* MTL::DepthStencilDescriptor::frontFaceStencil() const220{221    return Object::sendMessage<MTL::StencilDescriptor*>(this, _MTL_PRIVATE_SEL(frontFaceStencil));222}223224_MTL_INLINE MTL::DepthStencilDescriptor* MTL::DepthStencilDescriptor::init()225{226    return NS::Object::init<MTL::DepthStencilDescriptor>();227}228229_MTL_INLINE bool MTL::DepthStencilDescriptor::isDepthWriteEnabled() const230{231    return Object::sendMessage<bool>(this, _MTL_PRIVATE_SEL(isDepthWriteEnabled));232}233234_MTL_INLINE NS::String* MTL::DepthStencilDescriptor::label() const235{236    return Object::sendMessage<NS::String*>(this, _MTL_PRIVATE_SEL(label));237}238239_MTL_INLINE void MTL::DepthStencilDescriptor::setBackFaceStencil(const MTL::StencilDescriptor* backFaceStencil)240{241    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setBackFaceStencil_), backFaceStencil);242}243244_MTL_INLINE void MTL::DepthStencilDescriptor::setDepthCompareFunction(MTL::CompareFunction depthCompareFunction)245{246    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setDepthCompareFunction_), depthCompareFunction);247}248249_MTL_INLINE void MTL::DepthStencilDescriptor::setDepthWriteEnabled(bool depthWriteEnabled)250{251    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setDepthWriteEnabled_), depthWriteEnabled);252}253254_MTL_INLINE void MTL::DepthStencilDescriptor::setFrontFaceStencil(const MTL::StencilDescriptor* frontFaceStencil)255{256    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setFrontFaceStencil_), frontFaceStencil);257}258259_MTL_INLINE void MTL::DepthStencilDescriptor::setLabel(const NS::String* label)260{261    Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setLabel_), label);262}263264_MTL_INLINE MTL::Device* MTL::DepthStencilState::device() const265{266    return Object::sendMessage<MTL::Device*>(this, _MTL_PRIVATE_SEL(device));267}268269_MTL_INLINE MTL::ResourceID MTL::DepthStencilState::gpuResourceID() const270{271    return Object::sendMessage<MTL::ResourceID>(this, _MTL_PRIVATE_SEL(gpuResourceID));272}273274_MTL_INLINE NS::String* MTL::DepthStencilState::label() const275{276    return Object::sendMessage<NS::String*>(this, _MTL_PRIVATE_SEL(label));277}278