/ include / Metal / MTLAccelerationStructureCommandEncoder.hpp
MTLAccelerationStructureCommandEncoder.hpp
  1  //-------------------------------------------------------------------------------------------------------------------------------------------------------------
  2  //
  3  // Metal/MTLAccelerationStructureCommandEncoder.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 "MTLAccelerationStructureCommandEncoder.hpp"
 30  #include "MTLArgument.hpp"
 31  #include "MTLCommandEncoder.hpp"
 32  
 33  namespace MTL
 34  {
 35  _MTL_OPTIONS(NS::UInteger, AccelerationStructureRefitOptions) {
 36      AccelerationStructureRefitOptionVertexData = 1,
 37      AccelerationStructureRefitOptionPerPrimitiveData = 2,
 38  };
 39  
 40  class AccelerationStructureCommandEncoder : public NS::Referencing<AccelerationStructureCommandEncoder, CommandEncoder>
 41  {
 42  public:
 43      void buildAccelerationStructure(const class AccelerationStructure* accelerationStructure, const class AccelerationStructureDescriptor* descriptor, const class Buffer* scratchBuffer, NS::UInteger scratchBufferOffset);
 44  
 45      void refitAccelerationStructure(const class AccelerationStructure* sourceAccelerationStructure, const class AccelerationStructureDescriptor* descriptor, const class AccelerationStructure* destinationAccelerationStructure, const class Buffer* scratchBuffer, NS::UInteger scratchBufferOffset);
 46  
 47      void refitAccelerationStructure(const class AccelerationStructure* sourceAccelerationStructure, const class AccelerationStructureDescriptor* descriptor, const class AccelerationStructure* destinationAccelerationStructure, const class Buffer* scratchBuffer, NS::UInteger scratchBufferOffset, MTL::AccelerationStructureRefitOptions options);
 48  
 49      void copyAccelerationStructure(const class AccelerationStructure* sourceAccelerationStructure, const class AccelerationStructure* destinationAccelerationStructure);
 50  
 51      void writeCompactedAccelerationStructureSize(const class AccelerationStructure* accelerationStructure, const class Buffer* buffer, NS::UInteger offset);
 52  
 53      void writeCompactedAccelerationStructureSize(const class AccelerationStructure* accelerationStructure, const class Buffer* buffer, NS::UInteger offset, MTL::DataType sizeDataType);
 54  
 55      void copyAndCompactAccelerationStructure(const class AccelerationStructure* sourceAccelerationStructure, const class AccelerationStructure* destinationAccelerationStructure);
 56  
 57      void updateFence(const class Fence* fence);
 58  
 59      void waitForFence(const class Fence* fence);
 60  
 61      void useResource(const class Resource* resource, MTL::ResourceUsage usage);
 62  
 63      void useResources(const class Resource* const resources[], NS::UInteger count, MTL::ResourceUsage usage);
 64  
 65      void useHeap(const class Heap* heap);
 66  
 67      void useHeaps(const class Heap* const heaps[], NS::UInteger count);
 68  
 69      void sampleCountersInBuffer(const class CounterSampleBuffer* sampleBuffer, NS::UInteger sampleIndex, bool barrier);
 70  };
 71  
 72  class AccelerationStructurePassSampleBufferAttachmentDescriptor : public NS::Copying<AccelerationStructurePassSampleBufferAttachmentDescriptor>
 73  {
 74  public:
 75      static class AccelerationStructurePassSampleBufferAttachmentDescriptor* alloc();
 76  
 77      class AccelerationStructurePassSampleBufferAttachmentDescriptor*        init();
 78  
 79      class CounterSampleBuffer*                                              sampleBuffer() const;
 80      void                                                                    setSampleBuffer(const class CounterSampleBuffer* sampleBuffer);
 81  
 82      NS::UInteger                                                            startOfEncoderSampleIndex() const;
 83      void                                                                    setStartOfEncoderSampleIndex(NS::UInteger startOfEncoderSampleIndex);
 84  
 85      NS::UInteger                                                            endOfEncoderSampleIndex() const;
 86      void                                                                    setEndOfEncoderSampleIndex(NS::UInteger endOfEncoderSampleIndex);
 87  };
 88  
 89  class AccelerationStructurePassSampleBufferAttachmentDescriptorArray : public NS::Referencing<AccelerationStructurePassSampleBufferAttachmentDescriptorArray>
 90  {
 91  public:
 92      static class AccelerationStructurePassSampleBufferAttachmentDescriptorArray* alloc();
 93  
 94      class AccelerationStructurePassSampleBufferAttachmentDescriptorArray*        init();
 95  
 96      class AccelerationStructurePassSampleBufferAttachmentDescriptor*             object(NS::UInteger attachmentIndex);
 97  
 98      void                                                                         setObject(const class AccelerationStructurePassSampleBufferAttachmentDescriptor* attachment, NS::UInteger attachmentIndex);
 99  };
100  
101  class AccelerationStructurePassDescriptor : public NS::Copying<AccelerationStructurePassDescriptor>
102  {
103  public:
104      static class AccelerationStructurePassDescriptor*                     alloc();
105  
106      class AccelerationStructurePassDescriptor*                            init();
107  
108      static class AccelerationStructurePassDescriptor*                     accelerationStructurePassDescriptor();
109  
110      class AccelerationStructurePassSampleBufferAttachmentDescriptorArray* sampleBufferAttachments() const;
111  };
112  
113  }
114  
115  // method: buildAccelerationStructure:descriptor:scratchBuffer:scratchBufferOffset:
116  _MTL_INLINE void MTL::AccelerationStructureCommandEncoder::buildAccelerationStructure(const MTL::AccelerationStructure* accelerationStructure, const MTL::AccelerationStructureDescriptor* descriptor, const MTL::Buffer* scratchBuffer, NS::UInteger scratchBufferOffset)
117  {
118      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(buildAccelerationStructure_descriptor_scratchBuffer_scratchBufferOffset_), accelerationStructure, descriptor, scratchBuffer, scratchBufferOffset);
119  }
120  
121  // method: refitAccelerationStructure:descriptor:destination:scratchBuffer:scratchBufferOffset:
122  _MTL_INLINE void MTL::AccelerationStructureCommandEncoder::refitAccelerationStructure(const MTL::AccelerationStructure* sourceAccelerationStructure, const MTL::AccelerationStructureDescriptor* descriptor, const MTL::AccelerationStructure* destinationAccelerationStructure, const MTL::Buffer* scratchBuffer, NS::UInteger scratchBufferOffset)
123  {
124      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(refitAccelerationStructure_descriptor_destination_scratchBuffer_scratchBufferOffset_), sourceAccelerationStructure, descriptor, destinationAccelerationStructure, scratchBuffer, scratchBufferOffset);
125  }
126  
127  // method: refitAccelerationStructure:descriptor:destination:scratchBuffer:scratchBufferOffset:options:
128  _MTL_INLINE void MTL::AccelerationStructureCommandEncoder::refitAccelerationStructure(const MTL::AccelerationStructure* sourceAccelerationStructure, const MTL::AccelerationStructureDescriptor* descriptor, const MTL::AccelerationStructure* destinationAccelerationStructure, const MTL::Buffer* scratchBuffer, NS::UInteger scratchBufferOffset, MTL::AccelerationStructureRefitOptions options)
129  {
130      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(refitAccelerationStructure_descriptor_destination_scratchBuffer_scratchBufferOffset_options_), sourceAccelerationStructure, descriptor, destinationAccelerationStructure, scratchBuffer, scratchBufferOffset, options);
131  }
132  
133  // method: copyAccelerationStructure:toAccelerationStructure:
134  _MTL_INLINE void MTL::AccelerationStructureCommandEncoder::copyAccelerationStructure(const MTL::AccelerationStructure* sourceAccelerationStructure, const MTL::AccelerationStructure* destinationAccelerationStructure)
135  {
136      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(copyAccelerationStructure_toAccelerationStructure_), sourceAccelerationStructure, destinationAccelerationStructure);
137  }
138  
139  // method: writeCompactedAccelerationStructureSize:toBuffer:offset:
140  _MTL_INLINE void MTL::AccelerationStructureCommandEncoder::writeCompactedAccelerationStructureSize(const MTL::AccelerationStructure* accelerationStructure, const MTL::Buffer* buffer, NS::UInteger offset)
141  {
142      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(writeCompactedAccelerationStructureSize_toBuffer_offset_), accelerationStructure, buffer, offset);
143  }
144  
145  // method: writeCompactedAccelerationStructureSize:toBuffer:offset:sizeDataType:
146  _MTL_INLINE void MTL::AccelerationStructureCommandEncoder::writeCompactedAccelerationStructureSize(const MTL::AccelerationStructure* accelerationStructure, const MTL::Buffer* buffer, NS::UInteger offset, MTL::DataType sizeDataType)
147  {
148      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(writeCompactedAccelerationStructureSize_toBuffer_offset_sizeDataType_), accelerationStructure, buffer, offset, sizeDataType);
149  }
150  
151  // method: copyAndCompactAccelerationStructure:toAccelerationStructure:
152  _MTL_INLINE void MTL::AccelerationStructureCommandEncoder::copyAndCompactAccelerationStructure(const MTL::AccelerationStructure* sourceAccelerationStructure, const MTL::AccelerationStructure* destinationAccelerationStructure)
153  {
154      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(copyAndCompactAccelerationStructure_toAccelerationStructure_), sourceAccelerationStructure, destinationAccelerationStructure);
155  }
156  
157  // method: updateFence:
158  _MTL_INLINE void MTL::AccelerationStructureCommandEncoder::updateFence(const MTL::Fence* fence)
159  {
160      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(updateFence_), fence);
161  }
162  
163  // method: waitForFence:
164  _MTL_INLINE void MTL::AccelerationStructureCommandEncoder::waitForFence(const MTL::Fence* fence)
165  {
166      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(waitForFence_), fence);
167  }
168  
169  // method: useResource:usage:
170  _MTL_INLINE void MTL::AccelerationStructureCommandEncoder::useResource(const MTL::Resource* resource, MTL::ResourceUsage usage)
171  {
172      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(useResource_usage_), resource, usage);
173  }
174  
175  // method: useResources:count:usage:
176  _MTL_INLINE void MTL::AccelerationStructureCommandEncoder::useResources(const MTL::Resource* const resources[], NS::UInteger count, MTL::ResourceUsage usage)
177  {
178      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(useResources_count_usage_), resources, count, usage);
179  }
180  
181  // method: useHeap:
182  _MTL_INLINE void MTL::AccelerationStructureCommandEncoder::useHeap(const MTL::Heap* heap)
183  {
184      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(useHeap_), heap);
185  }
186  
187  // method: useHeaps:count:
188  _MTL_INLINE void MTL::AccelerationStructureCommandEncoder::useHeaps(const MTL::Heap* const heaps[], NS::UInteger count)
189  {
190      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(useHeaps_count_), heaps, count);
191  }
192  
193  // method: sampleCountersInBuffer:atSampleIndex:withBarrier:
194  _MTL_INLINE void MTL::AccelerationStructureCommandEncoder::sampleCountersInBuffer(const MTL::CounterSampleBuffer* sampleBuffer, NS::UInteger sampleIndex, bool barrier)
195  {
196      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(sampleCountersInBuffer_atSampleIndex_withBarrier_), sampleBuffer, sampleIndex, barrier);
197  }
198  
199  // static method: alloc
200  _MTL_INLINE MTL::AccelerationStructurePassSampleBufferAttachmentDescriptor* MTL::AccelerationStructurePassSampleBufferAttachmentDescriptor::alloc()
201  {
202      return NS::Object::alloc<MTL::AccelerationStructurePassSampleBufferAttachmentDescriptor>(_MTL_PRIVATE_CLS(MTLAccelerationStructurePassSampleBufferAttachmentDescriptor));
203  }
204  
205  // method: init
206  _MTL_INLINE MTL::AccelerationStructurePassSampleBufferAttachmentDescriptor* MTL::AccelerationStructurePassSampleBufferAttachmentDescriptor::init()
207  {
208      return NS::Object::init<MTL::AccelerationStructurePassSampleBufferAttachmentDescriptor>();
209  }
210  
211  // property: sampleBuffer
212  _MTL_INLINE MTL::CounterSampleBuffer* MTL::AccelerationStructurePassSampleBufferAttachmentDescriptor::sampleBuffer() const
213  {
214      return Object::sendMessage<MTL::CounterSampleBuffer*>(this, _MTL_PRIVATE_SEL(sampleBuffer));
215  }
216  
217  _MTL_INLINE void MTL::AccelerationStructurePassSampleBufferAttachmentDescriptor::setSampleBuffer(const MTL::CounterSampleBuffer* sampleBuffer)
218  {
219      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setSampleBuffer_), sampleBuffer);
220  }
221  
222  // property: startOfEncoderSampleIndex
223  _MTL_INLINE NS::UInteger MTL::AccelerationStructurePassSampleBufferAttachmentDescriptor::startOfEncoderSampleIndex() const
224  {
225      return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(startOfEncoderSampleIndex));
226  }
227  
228  _MTL_INLINE void MTL::AccelerationStructurePassSampleBufferAttachmentDescriptor::setStartOfEncoderSampleIndex(NS::UInteger startOfEncoderSampleIndex)
229  {
230      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setStartOfEncoderSampleIndex_), startOfEncoderSampleIndex);
231  }
232  
233  // property: endOfEncoderSampleIndex
234  _MTL_INLINE NS::UInteger MTL::AccelerationStructurePassSampleBufferAttachmentDescriptor::endOfEncoderSampleIndex() const
235  {
236      return Object::sendMessage<NS::UInteger>(this, _MTL_PRIVATE_SEL(endOfEncoderSampleIndex));
237  }
238  
239  _MTL_INLINE void MTL::AccelerationStructurePassSampleBufferAttachmentDescriptor::setEndOfEncoderSampleIndex(NS::UInteger endOfEncoderSampleIndex)
240  {
241      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setEndOfEncoderSampleIndex_), endOfEncoderSampleIndex);
242  }
243  
244  // static method: alloc
245  _MTL_INLINE MTL::AccelerationStructurePassSampleBufferAttachmentDescriptorArray* MTL::AccelerationStructurePassSampleBufferAttachmentDescriptorArray::alloc()
246  {
247      return NS::Object::alloc<MTL::AccelerationStructurePassSampleBufferAttachmentDescriptorArray>(_MTL_PRIVATE_CLS(MTLAccelerationStructurePassSampleBufferAttachmentDescriptorArray));
248  }
249  
250  // method: init
251  _MTL_INLINE MTL::AccelerationStructurePassSampleBufferAttachmentDescriptorArray* MTL::AccelerationStructurePassSampleBufferAttachmentDescriptorArray::init()
252  {
253      return NS::Object::init<MTL::AccelerationStructurePassSampleBufferAttachmentDescriptorArray>();
254  }
255  
256  // method: objectAtIndexedSubscript:
257  _MTL_INLINE MTL::AccelerationStructurePassSampleBufferAttachmentDescriptor* MTL::AccelerationStructurePassSampleBufferAttachmentDescriptorArray::object(NS::UInteger attachmentIndex)
258  {
259      return Object::sendMessage<MTL::AccelerationStructurePassSampleBufferAttachmentDescriptor*>(this, _MTL_PRIVATE_SEL(objectAtIndexedSubscript_), attachmentIndex);
260  }
261  
262  // method: setObject:atIndexedSubscript:
263  _MTL_INLINE void MTL::AccelerationStructurePassSampleBufferAttachmentDescriptorArray::setObject(const MTL::AccelerationStructurePassSampleBufferAttachmentDescriptor* attachment, NS::UInteger attachmentIndex)
264  {
265      Object::sendMessage<void>(this, _MTL_PRIVATE_SEL(setObject_atIndexedSubscript_), attachment, attachmentIndex);
266  }
267  
268  // static method: alloc
269  _MTL_INLINE MTL::AccelerationStructurePassDescriptor* MTL::AccelerationStructurePassDescriptor::alloc()
270  {
271      return NS::Object::alloc<MTL::AccelerationStructurePassDescriptor>(_MTL_PRIVATE_CLS(MTLAccelerationStructurePassDescriptor));
272  }
273  
274  // method: init
275  _MTL_INLINE MTL::AccelerationStructurePassDescriptor* MTL::AccelerationStructurePassDescriptor::init()
276  {
277      return NS::Object::init<MTL::AccelerationStructurePassDescriptor>();
278  }
279  
280  // static method: accelerationStructurePassDescriptor
281  _MTL_INLINE MTL::AccelerationStructurePassDescriptor* MTL::AccelerationStructurePassDescriptor::accelerationStructurePassDescriptor()
282  {
283      return Object::sendMessage<MTL::AccelerationStructurePassDescriptor*>(_MTL_PRIVATE_CLS(MTLAccelerationStructurePassDescriptor), _MTL_PRIVATE_SEL(accelerationStructurePassDescriptor));
284  }
285  
286  // property: sampleBufferAttachments
287  _MTL_INLINE MTL::AccelerationStructurePassSampleBufferAttachmentDescriptorArray* MTL::AccelerationStructurePassDescriptor::sampleBufferAttachments() const
288  {
289      return Object::sendMessage<MTL::AccelerationStructurePassSampleBufferAttachmentDescriptorArray*>(this, _MTL_PRIVATE_SEL(sampleBufferAttachments));
290  }