//! This file has been automatically generated by `objc2`'s `header-translator`. //! DO NOT EDIT use core::ffi::*; use core::ptr::NonNull; use objc2::__framework_prelude::*; use objc2_foundation::*; use crate::*; /// Controls the blit operation /// /// See also [Apple's documentation](https://developer.apple.com/documentation/metal/mtlblitoption?language=objc) // NS_OPTIONS #[repr(transparent)] #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct MTLBlitOption(pub NSUInteger); bitflags::bitflags! { impl MTLBlitOption: NSUInteger { #[doc(alias = "MTLBlitOptionNone")] const None = 0; #[doc(alias = "MTLBlitOptionDepthFromDepthStencil")] const DepthFromDepthStencil = 1<<0; #[doc(alias = "MTLBlitOptionStencilFromDepthStencil")] const StencilFromDepthStencil = 1<<1; #[doc(alias = "MTLBlitOptionRowLinearPVRTC")] const RowLinearPVRTC = 1<<2; } } unsafe impl Encode for MTLBlitOption { const ENCODING: Encoding = NSUInteger::ENCODING; } unsafe impl RefEncode for MTLBlitOption { const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING); } extern_protocol!( /// A command encoder that performs basic copies and blits between buffers and textures. /// /// See also [Apple's documentation](https://developer.apple.com/documentation/metal/mtlblitcommandencoder?language=objc) #[cfg(feature = "MTLCommandEncoder")] pub unsafe trait MTLBlitCommandEncoder: MTLCommandEncoder { #[cfg(all(feature = "MTLAllocation", feature = "MTLResource"))] /// Flush any copy of this resource from the device's caches, and invalidate any CPU caches if needed. /// /// Parameter `resource`: The resource to page off. /// /// When the device writes to a resource with a storage mode of MTLResourceStorageModeManaged, those writes may be cached (for example, in VRAM or on chip renderer cache), /// making any CPU access (either MTLBuffer.contents or -[MTLTexture getBytes:...] and -[MTLTexture replaceRegion:]) produce undefined results. To allow the CPU to see what the device /// has written, a CommandBuffer containing this synchronization must be executed. After completion of the CommandBuffer, the CPU can access the contents of the resource safely. #[unsafe(method(synchronizeResource:))] #[unsafe(method_family = none)] fn synchronizeResource(&self, resource: &ProtocolObject); #[cfg(all( feature = "MTLAllocation", feature = "MTLResource", feature = "MTLTexture" ))] /// Flush any copy of this image from the device's caches, and invalidate CPU caches if needed. /// /// Parameter `texture`: The texture to page off. /// /// Parameter `slice`: The slice of the texture to page off. /// /// Parameter `level`: The mipmap level of the texture to flush. /// /// See the discussion of -synchronizeResource. -synchronizeTexture:slice:mipmapLevel performs the same role, except it may flush only a subset of the texture storage, rather than the entire texture. /// /// # Safety /// /// - `texture` may need to be synchronized. /// - `texture` may be unretained, you must ensure it is kept alive while in use. #[unsafe(method(synchronizeTexture:slice:level:))] #[unsafe(method_family = none)] unsafe fn synchronizeTexture_slice_level( &self, texture: &ProtocolObject, slice: NSUInteger, level: NSUInteger, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLResource", feature = "MTLTexture", feature = "MTLTypes" ))] /// Copy a rectangle of pixels between textures. /// /// # Safety /// /// - `source_texture` may need to be synchronized. /// - `source_texture` may be unretained, you must ensure it is kept alive while in use. /// - `sourceSize` might not be bounds-checked. /// - `destination_texture` may need to be synchronized. /// - `destination_texture` may be unretained, you must ensure it is kept alive while in use. #[unsafe(method(copyFromTexture:sourceSlice:sourceLevel:sourceOrigin:sourceSize:toTexture:destinationSlice:destinationLevel:destinationOrigin:))] #[unsafe(method_family = none)] unsafe fn copyFromTexture_sourceSlice_sourceLevel_sourceOrigin_sourceSize_toTexture_destinationSlice_destinationLevel_destinationOrigin( &self, source_texture: &ProtocolObject, source_slice: NSUInteger, source_level: NSUInteger, source_origin: MTLOrigin, source_size: MTLSize, destination_texture: &ProtocolObject, destination_slice: NSUInteger, destination_level: NSUInteger, destination_origin: MTLOrigin, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLBuffer", feature = "MTLResource", feature = "MTLTexture", feature = "MTLTypes" ))] /// Copy an image from a buffer into a texture. /// /// # Safety /// /// - `source_buffer` may need to be synchronized. /// - `source_buffer` may be unretained, you must ensure it is kept alive while in use. /// - `source_buffer` contents should be of the correct type. /// - `sourceOffset` might not be bounds-checked. /// - `sourceSize` might not be bounds-checked. /// - `destination_texture` may need to be synchronized. /// - `destination_texture` may be unretained, you must ensure it is kept alive while in use. #[unsafe(method(copyFromBuffer:sourceOffset:sourceBytesPerRow:sourceBytesPerImage:sourceSize:toTexture:destinationSlice:destinationLevel:destinationOrigin:))] #[unsafe(method_family = none)] unsafe fn copyFromBuffer_sourceOffset_sourceBytesPerRow_sourceBytesPerImage_sourceSize_toTexture_destinationSlice_destinationLevel_destinationOrigin( &self, source_buffer: &ProtocolObject, source_offset: NSUInteger, source_bytes_per_row: NSUInteger, source_bytes_per_image: NSUInteger, source_size: MTLSize, destination_texture: &ProtocolObject, destination_slice: NSUInteger, destination_level: NSUInteger, destination_origin: MTLOrigin, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLBuffer", feature = "MTLResource", feature = "MTLTexture", feature = "MTLTypes" ))] /// Copy an image from a buffer into a texture. /// /// # Safety /// /// - `source_buffer` may need to be synchronized. /// - `source_buffer` may be unretained, you must ensure it is kept alive while in use. /// - `source_buffer` contents should be of the correct type. /// - `sourceOffset` might not be bounds-checked. /// - `sourceSize` might not be bounds-checked. /// - `destination_texture` may need to be synchronized. /// - `destination_texture` may be unretained, you must ensure it is kept alive while in use. #[unsafe(method(copyFromBuffer:sourceOffset:sourceBytesPerRow:sourceBytesPerImage:sourceSize:toTexture:destinationSlice:destinationLevel:destinationOrigin:options:))] #[unsafe(method_family = none)] unsafe fn copyFromBuffer_sourceOffset_sourceBytesPerRow_sourceBytesPerImage_sourceSize_toTexture_destinationSlice_destinationLevel_destinationOrigin_options( &self, source_buffer: &ProtocolObject, source_offset: NSUInteger, source_bytes_per_row: NSUInteger, source_bytes_per_image: NSUInteger, source_size: MTLSize, destination_texture: &ProtocolObject, destination_slice: NSUInteger, destination_level: NSUInteger, destination_origin: MTLOrigin, options: MTLBlitOption, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLBuffer", feature = "MTLResource", feature = "MTLTexture", feature = "MTLTypes" ))] /// Copy an image from a texture into a buffer. /// /// # Safety /// /// - `source_texture` may need to be synchronized. /// - `source_texture` may be unretained, you must ensure it is kept alive while in use. /// - `sourceSize` might not be bounds-checked. /// - `destination_buffer` may need to be synchronized. /// - `destination_buffer` may be unretained, you must ensure it is kept alive while in use. /// - `destination_buffer` contents should be of the correct type. /// - `destinationOffset` might not be bounds-checked. #[unsafe(method(copyFromTexture:sourceSlice:sourceLevel:sourceOrigin:sourceSize:toBuffer:destinationOffset:destinationBytesPerRow:destinationBytesPerImage:))] #[unsafe(method_family = none)] unsafe fn copyFromTexture_sourceSlice_sourceLevel_sourceOrigin_sourceSize_toBuffer_destinationOffset_destinationBytesPerRow_destinationBytesPerImage( &self, source_texture: &ProtocolObject, source_slice: NSUInteger, source_level: NSUInteger, source_origin: MTLOrigin, source_size: MTLSize, destination_buffer: &ProtocolObject, destination_offset: NSUInteger, destination_bytes_per_row: NSUInteger, destination_bytes_per_image: NSUInteger, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLBuffer", feature = "MTLResource", feature = "MTLTexture", feature = "MTLTypes" ))] /// Copy an image from a texture into a buffer. /// /// # Safety /// /// - `source_texture` may need to be synchronized. /// - `source_texture` may be unretained, you must ensure it is kept alive while in use. /// - `sourceSize` might not be bounds-checked. /// - `destination_buffer` may need to be synchronized. /// - `destination_buffer` may be unretained, you must ensure it is kept alive while in use. /// - `destination_buffer` contents should be of the correct type. /// - `destinationOffset` might not be bounds-checked. #[unsafe(method(copyFromTexture:sourceSlice:sourceLevel:sourceOrigin:sourceSize:toBuffer:destinationOffset:destinationBytesPerRow:destinationBytesPerImage:options:))] #[unsafe(method_family = none)] unsafe fn copyFromTexture_sourceSlice_sourceLevel_sourceOrigin_sourceSize_toBuffer_destinationOffset_destinationBytesPerRow_destinationBytesPerImage_options( &self, source_texture: &ProtocolObject, source_slice: NSUInteger, source_level: NSUInteger, source_origin: MTLOrigin, source_size: MTLSize, destination_buffer: &ProtocolObject, destination_offset: NSUInteger, destination_bytes_per_row: NSUInteger, destination_bytes_per_image: NSUInteger, options: MTLBlitOption, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLResource", feature = "MTLTexture" ))] /// Generate mipmaps for a texture from the base level up to the max level. #[unsafe(method(generateMipmapsForTexture:))] #[unsafe(method_family = none)] fn generateMipmapsForTexture(&self, texture: &ProtocolObject); #[cfg(all( feature = "MTLAllocation", feature = "MTLBuffer", feature = "MTLResource" ))] /// Fill a buffer with a fixed value in each byte. #[unsafe(method(fillBuffer:range:value:))] #[unsafe(method_family = none)] fn fillBuffer_range_value( &self, buffer: &ProtocolObject, range: NSRange, value: u8, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLResource", feature = "MTLTexture" ))] /// Copy whole surfaces between textures. /// /// Convenience function to copy sliceCount * levelCount whole surfaces between textures /// The source and destination pixel format must be identical. /// The source and destination sample count must be identical. /// The sourceLevel mip in sourceTexture must have the same dimension as the destinationLevel mip in destinationTexture. /// The sourceTexture must have at least sourceLevel + levelCount mips /// The destinationTexture must have at least destinationLevel + levelCount mips /// The sourceTexture must have at least sourceSlice + sliceCount array slices /// The destinationTexture must have at least destinationSlice + sliceCount array slices /// /// # Safety /// /// - `source_texture` may need to be synchronized. /// - `source_texture` may be unretained, you must ensure it is kept alive while in use. /// - `destination_texture` may need to be synchronized. /// - `destination_texture` may be unretained, you must ensure it is kept alive while in use. /// - `sliceCount` might not be bounds-checked. /// - `levelCount` might not be bounds-checked. #[unsafe(method(copyFromTexture:sourceSlice:sourceLevel:toTexture:destinationSlice:destinationLevel:sliceCount:levelCount:))] #[unsafe(method_family = none)] unsafe fn copyFromTexture_sourceSlice_sourceLevel_toTexture_destinationSlice_destinationLevel_sliceCount_levelCount( &self, source_texture: &ProtocolObject, source_slice: NSUInteger, source_level: NSUInteger, destination_texture: &ProtocolObject, destination_slice: NSUInteger, destination_level: NSUInteger, slice_count: NSUInteger, level_count: NSUInteger, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLResource", feature = "MTLTexture" ))] /// Copy as many whole surfaces as possible between textures. /// /// Convenience function that calls copyFromTexture:sourceSlice:sourceLevel:toTexture:destinationSlice:destinationLevel:sliceCount:levelCount: /// The source and destination pixel format must be identical. /// The source and destination sample count must be identical. /// Either: /// - sourceTexture must have a mip M with identical dimensions as the first mip of destinationTexture: sourceLevel = M, destinationLevel = 0 /// - destinationTexture must have a mip M with identical dimensions as the first mip of sourceTexture: sourceLevel = 0, destinationLevel = M /// Computes: levelCount = min(sourceTexture.mipmapLevelCount - sourceLevel, destinationTexture.mipmapLevelCount - destinationLevel) /// sliceCount = min(sourceTexture.arrayLength, destinationTexture.arrayLength) /// Then invokes the method above using the computed parameters. /// /// # Safety /// /// - `source_texture` may need to be synchronized. /// - `source_texture` may be unretained, you must ensure it is kept alive while in use. /// - `destination_texture` may need to be synchronized. /// - `destination_texture` may be unretained, you must ensure it is kept alive while in use. #[unsafe(method(copyFromTexture:toTexture:))] #[unsafe(method_family = none)] unsafe fn copyFromTexture_toTexture( &self, source_texture: &ProtocolObject, destination_texture: &ProtocolObject, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLBuffer", feature = "MTLResource" ))] /// Basic memory copy between buffers. /// /// # Safety /// /// - `source_buffer` may need to be synchronized. /// - `source_buffer` may be unretained, you must ensure it is kept alive while in use. /// - `source_buffer` contents should be of the correct type. /// - `sourceOffset` might not be bounds-checked. /// - `destination_buffer` may need to be synchronized. /// - `destination_buffer` may be unretained, you must ensure it is kept alive while in use. /// - `destination_buffer` contents should be of the correct type. /// - `destinationOffset` might not be bounds-checked. /// - `size` might not be bounds-checked. #[unsafe(method(copyFromBuffer:sourceOffset:toBuffer:destinationOffset:size:))] #[unsafe(method_family = none)] unsafe fn copyFromBuffer_sourceOffset_toBuffer_destinationOffset_size( &self, source_buffer: &ProtocolObject, source_offset: NSUInteger, destination_buffer: &ProtocolObject, destination_offset: NSUInteger, size: NSUInteger, ); #[cfg(feature = "MTLFence")] /// Update the fence to capture all GPU work so far enqueued by this encoder. /// /// The fence is updated at kernel submission to maintain global order and prevent deadlock. /// Drivers may delay fence updates until the end of the encoder. Drivers may also wait on fences at the beginning of an encoder. It is therefore illegal to wait on a fence after it has been updated in the same encoder. #[unsafe(method(updateFence:))] #[unsafe(method_family = none)] fn updateFence(&self, fence: &ProtocolObject); #[cfg(feature = "MTLFence")] /// Prevent further GPU work until the fence is reached. /// /// The fence is evaluated at kernel submission to maintain global order and prevent deadlock. /// Drivers may delay fence updates until the end of the encoder. Drivers may also wait on fences at the beginning of an encoder. It is therefore illegal to wait on a fence after it has been updated in the same encoder. #[unsafe(method(waitForFence:))] #[unsafe(method_family = none)] fn waitForFence(&self, fence: &ProtocolObject); #[cfg(all( feature = "MTLAllocation", feature = "MTLBuffer", feature = "MTLResource", feature = "MTLTexture", feature = "MTLTypes" ))] /// Copies tile access counters within specified region into provided buffer /// /// # Safety /// /// - `texture` may need to be synchronized. /// - `texture` may be unretained, you must ensure it is kept alive while in use. /// - `counters_buffer` may need to be synchronized. /// - `counters_buffer` may be unretained, you must ensure it is kept alive while in use. /// - `counters_buffer` contents should be of the correct type. /// - `countersBufferOffset` might not be bounds-checked. #[optional] #[unsafe(method(getTextureAccessCounters:region:mipLevel:slice:resetCounters:countersBuffer:countersBufferOffset:))] #[unsafe(method_family = none)] unsafe fn getTextureAccessCounters_region_mipLevel_slice_resetCounters_countersBuffer_countersBufferOffset( &self, texture: &ProtocolObject, region: MTLRegion, mip_level: NSUInteger, slice: NSUInteger, reset_counters: bool, counters_buffer: &ProtocolObject, counters_buffer_offset: NSUInteger, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLResource", feature = "MTLTexture", feature = "MTLTypes" ))] /// Resets tile access counters within specified region /// /// # Safety /// /// - `texture` may need to be synchronized. /// - `texture` may be unretained, you must ensure it is kept alive while in use. /// - This might not be bounds-checked. #[optional] #[unsafe(method(resetTextureAccessCounters:region:mipLevel:slice:))] #[unsafe(method_family = none)] unsafe fn resetTextureAccessCounters_region_mipLevel_slice( &self, texture: &ProtocolObject, region: MTLRegion, mip_level: NSUInteger, slice: NSUInteger, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLResource", feature = "MTLTexture" ))] /// Optimizes the texture data to ensure the best possible performance when accessing content on the GPU at the expense of CPU-access performance. #[unsafe(method(optimizeContentsForGPUAccess:))] #[unsafe(method_family = none)] fn optimizeContentsForGPUAccess(&self, texture: &ProtocolObject); #[cfg(all( feature = "MTLAllocation", feature = "MTLResource", feature = "MTLTexture" ))] /// Optimizes a subset of the texture data to ensure the best possible performance when accessing content on the GPU at the expense of CPU-access performance. /// /// # Safety /// /// - `texture` may need to be synchronized. /// - `texture` may be unretained, you must ensure it is kept alive while in use. #[unsafe(method(optimizeContentsForGPUAccess:slice:level:))] #[unsafe(method_family = none)] unsafe fn optimizeContentsForGPUAccess_slice_level( &self, texture: &ProtocolObject, slice: NSUInteger, level: NSUInteger, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLResource", feature = "MTLTexture" ))] /// Optimizes the texture data to ensure the best possible performance when accessing content on the CPU at the expense of GPU-access performance. /// /// # Safety /// /// - `texture` may need to be synchronized. /// - `texture` may be unretained, you must ensure it is kept alive while in use. #[unsafe(method(optimizeContentsForCPUAccess:))] #[unsafe(method_family = none)] unsafe fn optimizeContentsForCPUAccess(&self, texture: &ProtocolObject); #[cfg(all( feature = "MTLAllocation", feature = "MTLResource", feature = "MTLTexture" ))] /// Optimizes a subset of the texture data to ensure the best possible performance when accessing content on the CPU at the expense of GPU-access performance. /// /// # Safety /// /// - `texture` may need to be synchronized. /// - `texture` may be unretained, you must ensure it is kept alive while in use. #[unsafe(method(optimizeContentsForCPUAccess:slice:level:))] #[unsafe(method_family = none)] unsafe fn optimizeContentsForCPUAccess_slice_level( &self, texture: &ProtocolObject, slice: NSUInteger, level: NSUInteger, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLIndirectCommandBuffer", feature = "MTLResource" ))] /// reset commands in a indirect command buffer using the GPU /// /// # Safety /// /// - `buffer` may need to be synchronized. /// - `buffer` may be unretained, you must ensure it is kept alive while in use. /// - `range` might not be bounds-checked. #[unsafe(method(resetCommandsInBuffer:withRange:))] #[unsafe(method_family = none)] unsafe fn resetCommandsInBuffer_withRange( &self, buffer: &ProtocolObject, range: NSRange, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLIndirectCommandBuffer", feature = "MTLResource" ))] /// copy a region of a buffer into a destination buffer starting at destinationIndex using the GPU /// /// # Safety /// /// - `source` may need to be synchronized. /// - `source` may be unretained, you must ensure it is kept alive while in use. /// - `sourceRange` might not be bounds-checked. /// - `destination` may need to be synchronized. /// - `destination` may be unretained, you must ensure it is kept alive while in use. /// - `destinationIndex` might not be bounds-checked. #[unsafe(method(copyIndirectCommandBuffer:sourceRange:destination:destinationIndex:))] #[unsafe(method_family = none)] unsafe fn copyIndirectCommandBuffer_sourceRange_destination_destinationIndex( &self, source: &ProtocolObject, source_range: NSRange, destination: &ProtocolObject, destination_index: NSUInteger, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLIndirectCommandBuffer", feature = "MTLResource" ))] /// Encodes a command that can improve the performance of a range of commands within an indirect command buffer. /// /// # Safety /// /// - `indirect_command_buffer` may need to be synchronized. /// - `indirect_command_buffer` may be unretained, you must ensure it is kept alive while in use. /// - `range` might not be bounds-checked. #[unsafe(method(optimizeIndirectCommandBuffer:withRange:))] #[unsafe(method_family = none)] unsafe fn optimizeIndirectCommandBuffer_withRange( &self, indirect_command_buffer: &ProtocolObject, range: NSRange, ); #[cfg(feature = "MTLCounters")] /// Sample hardware counters at this point in the blit encoder and /// store the counter sample into the sample buffer at the specified index. /// /// Parameter `sampleBuffer`: The sample buffer to sample into /// /// Parameter `sampleIndex`: The index into the counter buffer to write the sample. /// /// Parameter `barrier`: Insert a barrier before taking the sample. Passing /// YES will ensure that all work encoded before this operation in the encoder is /// complete but does not isolate the work with respect to other encoders. Passing /// NO will allow the sample to be taken concurrently with other operations in this /// encoder. /// In general, passing YES will lead to more repeatable counter results but /// may negatively impact performance. Passing NO will generally be higher performance /// but counter results may not be repeatable. /// /// On devices where MTLCounterSamplingPointAtBlitBoundary is unsupported, /// this method is not available and will generate an error if called. /// /// # Safety /// /// `sampleIndex` might not be bounds-checked. #[unsafe(method(sampleCountersInBuffer:atSampleIndex:withBarrier:))] #[unsafe(method_family = none)] unsafe fn sampleCountersInBuffer_atSampleIndex_withBarrier( &self, sample_buffer: &ProtocolObject, sample_index: NSUInteger, barrier: bool, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLBuffer", feature = "MTLCounters", feature = "MTLResource" ))] /// Parameter `sampleBuffer`: The sample buffer to resolve. /// /// Parameter `range`: The range of indices to resolve. /// /// Parameter `destinationBuffer`: The buffer to resolve values into. /// /// Parameter `destinationOffset`: The offset to begin writing values out to. This must be a multiple of /// the minimum constant buffer alignment. /// /// Resolve the counters from the raw buffer to a processed buffer. /// /// Samples that encountered an error during resolve will be set to /// MTLCounterErrorValue. /// /// # Safety /// /// - `range` might not be bounds-checked. /// - `destination_buffer` may need to be synchronized. /// - `destination_buffer` may be unretained, you must ensure it is kept alive while in use. /// - `destination_buffer` contents should be of the correct type. /// - `destinationOffset` might not be bounds-checked. #[unsafe(method(resolveCounters:inRange:destinationBuffer:destinationOffset:))] #[unsafe(method_family = none)] unsafe fn resolveCounters_inRange_destinationBuffer_destinationOffset( &self, sample_buffer: &ProtocolObject, range: NSRange, destination_buffer: &ProtocolObject, destination_offset: NSUInteger, ); #[cfg(all( feature = "MTLAllocation", feature = "MTLResource", feature = "MTLTensor" ))] /// Encodes a command to copy data from a slice of one tensor into a slice of another tensor. /// /// This command applies reshapes if `sourceTensor` and `destinationTensor` are not aliasable. /// - Parameters: /// - sourceTensor: A tensor instance that this command copies data from. /// - sourceOrigin: An array of offsets, in elements, to the first element of the slice of `sourceTensor` that this command copies data from. /// - sourceDimensions: An array of sizes, in elements, of the slice `sourceTensor` that this command copies data from. /// - destinationTensor: A tensor instance that this command copies data to. /// - destinationOrigin: An array of offsets, in elements, to the first element of the slice of `destinationTensor` that this command copies data to. /// - destinationDimensions: An array of sizes, in elements, of the slice of `destinationTensor` that this command copies data to. /// /// # Safety /// /// - `source_tensor` may need to be synchronized. /// - `source_tensor` may be unretained, you must ensure it is kept alive while in use. /// - `destination_tensor` may need to be synchronized. /// - `destination_tensor` may be unretained, you must ensure it is kept alive while in use. #[unsafe(method(copyFromTensor:sourceOrigin:sourceDimensions:toTensor:destinationOrigin:destinationDimensions:))] #[unsafe(method_family = none)] unsafe fn copyFromTensor_sourceOrigin_sourceDimensions_toTensor_destinationOrigin_destinationDimensions( &self, source_tensor: &ProtocolObject, source_origin: &MTLTensorExtents, source_dimensions: &MTLTensorExtents, destination_tensor: &ProtocolObject, destination_origin: &MTLTensorExtents, destination_dimensions: &MTLTensorExtents, ); } );