MTLVisibleFunctionTable.hpp
1 //------------------------------------------------------------------------------------------------------------------------------------------------------------- 2 // 3 // Metal/MTLVisibleFunctionTable.hpp 4 // 5 // Copyright 2020-2024 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 at 10 // 11 // http://www.apache.org/licenses/LICENSE-2.0 12 // 13 // Unless required by applicable law or agreed to in writing, software 14 // 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 and 17 // limitations under the License. 18 // 19 //------------------------------------------------------------------------------------------------------------------------------------------------------------- 20 21 #pragma once 22 23 #include "MTLDefines.hpp" 24 #include "MTLHeaderBridge.hpp" 25 #include "MTLPrivate.hpp" 26 27 #include <Foundation/Foundation.hpp> 28 29 #include "MTLResource.hpp" 30 #include "MTLTypes.hpp" 31 32 namespace MTL 33 { 34 class VisibleFunctionTableDescriptor : public NS::Copying<VisibleFunctionTableDescriptor> 35 { 36 public: 37 static class VisibleFunctionTableDescriptor* alloc(); 38 39 class VisibleFunctionTableDescriptor* init(); 40 41 static class VisibleFunctionTableDescriptor* visibleFunctionTableDescriptor(); 42 43 NS::UInteger functionCount() const; 44 void setFunctionCount(NS::UInteger functionCount); 45 }; 46 47 class VisibleFunctionTable : public NS::Referencing<VisibleFunctionTable, Resource> 48 { 49 public: 50 MTL::ResourceID gpuResourceID() const; 51 52 void setFunction(const class FunctionHandle* function, NS::UInteger index); 53 54 void setFunctions(const class FunctionHandle* const functions[], NS::Range range); 55 }; 56 57 } 58 59 // static method: alloc 60 _MTL_INLINE MTL::VisibleFunctionTableDescriptor* MTL::VisibleFunctionTableDescriptor::alloc() 61 { 62 return NS::Object::alloc<MTL::VisibleFunctionTableDescriptor>(_MTL_PRIVATE_CLS(MTLVisibleFunctionTableDescriptor)); 63 } 64 65 // method: init 66 _MTL_INLINE MTL::VisibleFunctionTableDescriptor* MTL::VisibleFunctionTableDescriptor::init() 67 { 68 return NS::Object::init<MTL::VisibleFunctionTableDescriptor>(); 69 } 70 71 // static method: visibleFunctionTableDescriptor 72 _MTL_INLINE MTL::VisibleFunctionTableDescriptor* MTL::VisibleFunctionTableDescriptor::visibleFunctionTableDescriptor() 73 { 74 return Object::sendMessage<MTL::VisibleFunctionTableDescriptor*>(_MTL_PRIVATE_CLS(MTLVisibleFunctionTableDescriptor), _MTL_PRIVATE_SEL(visibleFunctionTableDescriptor)); 75 } 76 77 // property: functionCount 78 _MTL_INLINE NS::UInteger MTL::VisibleFunctionTableDescriptor::functionCount() const 79 { 80 return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(functionCount)); 81 } 82 83 _MTL_INLINE void MTL::VisibleFunctionTableDescriptor::setFunctionCount(NS::UInteger functionCount) 84 { 85 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setFunctionCount_), functionCount); 86 } 87 88 // property: gpuResourceID 89 _MTL_INLINE MTL::ResourceID MTL::VisibleFunctionTable::gpuResourceID() const 90 { 91 return Object::sendMessage<MTL::ResourceID>(this, _MTL_PRIVATE_SEL(gpuResourceID)); 92 } 93 94 // method: setFunction:atIndex: 95 _MTL_INLINE void MTL::VisibleFunctionTable::setFunction(const MTL::FunctionHandle* function, NS::UInteger index) 96 { 97 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setFunction_atIndex_), function, index); 98 } 99 100 // method: setFunctions:withRange: 101 _MTL_INLINE void MTL::VisibleFunctionTable::setFunctions(const MTL::FunctionHandle* const functions[], NS::Range range) 102 { 103 Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setFunctions_withRange_), functions, range); 104 }