Expand description
Metal framework bindings for Rust.
This crate provides safe, idiomatic Rust bindings to Apple’s Metal graphics API. It is a 1:1 translation of the official metal-cpp library with zero external dependencies.
§Module Organization
The crate is organized to mirror the Metal framework structure:
types- Core value types (Origin, Size, Region, Viewport, etc.)enums- All Metal enumerations and option flagsdevice- GPU device interface and creation functionsbuffer- Buffer resources for data storagetexture- Texture resources for image datacommand_queue- Command queue for command buffer schedulingcommand_buffer- Command buffer for GPU command encodingsampler- Sampler state for texture samplingdepth_stencil- Depth and stencil testing state
§Example
ⓘ
use mtl_gpu::device;
// Get the default GPU
let device = device::system_default().expect("no Metal device");
println!("Using GPU: {}", device.name());
// Create a command queue
let queue = device.new_command_queue().expect("failed to create queue");
// Create a buffer
let buffer = device.new_buffer(1024, ResourceOptions::STORAGE_MODE_SHARED)
.expect("failed to create buffer");Re-exports§
pub use error::ValidationError;pub use device::Architecture;pub use device::Device;pub use buffer::Buffer;pub use heap::Heap;pub use heap::HeapDescriptor;pub use texture::Texture;pub use texture::TextureDescriptor;pub use texture::TextureViewDescriptor;pub use command_buffer::CommandBuffer;pub use command_buffer::CommandBufferDescriptor;pub use command_queue::CommandQueue;pub use command_queue::CommandQueueDescriptor;pub use depth_stencil::DepthStencilDescriptor;pub use depth_stencil::DepthStencilState;pub use depth_stencil::StencilDescriptor;pub use sampler::SamplerDescriptor;pub use sampler::SamplerState;pub use library::Attribute;pub use library::CompileOptions;pub use library::DynamicLibrary;pub use library::Function;pub use library::FunctionConstant;pub use library::FunctionConstantValues;pub use library::FunctionDescriptor;pub use library::FunctionReflection;pub use library::IntersectionFunctionDescriptor;pub use library::Library;pub use library::LinkedFunctions;pub use library::VertexAttribute;pub use pipeline::ComputePipelineDescriptor;pub use pipeline::ComputePipelineState;pub use pipeline::LogicalToPhysicalColorAttachmentMap;pub use pipeline::MeshRenderPipelineDescriptor;pub use pipeline::PipelineBufferDescriptor;pub use pipeline::PipelineBufferDescriptorArray;pub use pipeline::RenderPipelineColorAttachmentDescriptor;pub use pipeline::RenderPipelineColorAttachmentDescriptorArray;pub use pipeline::RenderPipelineDescriptor;pub use pipeline::RenderPipelineFunctionsDescriptor;pub use pipeline::RenderPipelineReflection;pub use pipeline::RenderPipelineState;pub use pipeline::TileRenderPipelineColorAttachmentDescriptor;pub use pipeline::TileRenderPipelineColorAttachmentDescriptorArray;pub use pipeline::TileRenderPipelineDescriptor;pub use sync::Event;pub use sync::Fence;pub use pass::BlitPassDescriptor;pub use pass::BlitPassSampleBufferAttachmentDescriptor;pub use pass::BlitPassSampleBufferAttachmentDescriptorArray;pub use pass::ComputePassDescriptor;pub use pass::ComputePassSampleBufferAttachmentDescriptor;pub use pass::ComputePassSampleBufferAttachmentDescriptorArray;pub use pass::RenderPassColorAttachmentDescriptor;pub use pass::RenderPassColorAttachmentDescriptorArray;pub use pass::RenderPassDepthAttachmentDescriptor;pub use pass::RenderPassDescriptor;pub use pass::RenderPassSampleBufferAttachmentDescriptor;pub use pass::RenderPassSampleBufferAttachmentDescriptorArray;pub use pass::RenderPassStencilAttachmentDescriptor;pub use pass::ResourceStatePassDescriptor;pub use pass::ResourceStatePassSampleBufferAttachmentDescriptor;pub use pass::ResourceStatePassSampleBufferAttachmentDescriptorArray;pub use acceleration::AccelerationStructure;pub use acceleration::AccelerationStructureBoundingBoxGeometryDescriptor;pub use acceleration::AccelerationStructureCommandEncoder;pub use acceleration::AccelerationStructureCurveGeometryDescriptor;pub use acceleration::AccelerationStructureDescriptor;pub use acceleration::AccelerationStructureGeometryDescriptor;pub use acceleration::AccelerationStructureMotionBoundingBoxGeometryDescriptor;pub use acceleration::AccelerationStructureMotionCurveGeometryDescriptor;pub use acceleration::AccelerationStructureMotionTriangleGeometryDescriptor;pub use acceleration::AccelerationStructurePassDescriptor;pub use acceleration::AccelerationStructurePassSampleBufferAttachmentDescriptor;pub use acceleration::AccelerationStructurePassSampleBufferAttachmentDescriptorArray;pub use acceleration::AccelerationStructureSizes;pub use acceleration::AccelerationStructureTriangleGeometryDescriptor;pub use acceleration::IndirectInstanceAccelerationStructureDescriptor;pub use acceleration::InstanceAccelerationStructureDescriptor;pub use acceleration::MotionKeyframeData;pub use acceleration::PrimitiveAccelerationStructureDescriptor;pub use encoder::BlitCommandEncoder;pub use encoder::ComputeCommandEncoder;pub use encoder::DispatchThreadgroupsIndirectArguments;pub use encoder::DispatchThreadsIndirectArguments;pub use encoder::MapIndirectArguments;pub use encoder::ParallelRenderCommandEncoder;pub use encoder::RenderCommandEncoder;pub use encoder::ResourceStateCommandEncoder;pub use encoder::StageInRegionIndirectArguments;pub use io::IOCommandBuffer;pub use io::IOCommandQueue;pub use io::IOCommandQueueDescriptor;pub use io::IOCompressionContext;pub use io::IOFileHandle;pub use io::IOScratchBuffer;pub use io::IOScratchBufferAllocator;pub use io::io_compression_context_append_data;pub use io::io_compression_context_default_chunk_size;pub use io::io_create_compression_context;pub use io::io_flush_and_destroy_compression_context;pub use argument::ATTRIBUTE_STRIDE_STATIC;pub use argument::Argument;pub use argument::ArgumentEncoder;pub use argument::ArrayType;pub use argument::Binding;pub use argument::BufferBinding;pub use argument::ObjectPayloadBinding;pub use argument::PointerType;pub use argument::StructMember;pub use argument::StructType;pub use argument::TensorBinding;pub use argument::TensorReferenceType;pub use argument::TextureBinding;pub use argument::TextureReferenceType;pub use argument::ThreadgroupBinding;pub use argument::Type;pub use argument_descriptor::ArgumentDescriptor;pub use command_buffer_encoder_info::CommandBufferEncoderInfo;pub use binary_archive::BinaryArchive;pub use binary_archive::BinaryArchiveDescriptor;pub use binary_archive::BinaryArchiveError;pub use function_stitching::FunctionStitchingAttribute;pub use function_stitching::FunctionStitchingAttributeAlwaysInline;pub use function_stitching::FunctionStitchingFunctionNode;pub use function_stitching::FunctionStitchingGraph;pub use function_stitching::FunctionStitchingInputNode;pub use function_stitching::FunctionStitchingNode;pub use function_stitching::StitchedLibraryDescriptor;pub use function_stitching::StitchedLibraryOptions;pub use residency_set::ResidencySet;pub use residency_set::ResidencySetDescriptor;pub use tensor::Tensor;pub use tensor::TensorDescriptor;pub use tensor::TensorExtents;pub use drawable::Drawable;pub use drawable::TimeInterval;pub use capture::CaptureDescriptor;pub use capture::CaptureManager;pub use capture::CaptureScope;pub use counter::COUNTER_DONT_SAMPLE;pub use counter::COUNTER_ERROR_VALUE;pub use counter::Counter;pub use counter::CounterResultStageUtilization;pub use counter::CounterResultStatistic;pub use counter::CounterResultTimestamp;pub use counter::CounterSampleBuffer;pub use counter::CounterSampleBufferDescriptor;pub use counter::CounterSet;pub use indirect::IndirectCommandBuffer;pub use indirect::IndirectCommandBufferDescriptor;pub use indirect::IndirectCommandBufferExecutionRange;pub use indirect::IndirectComputeCommand;pub use indirect::IndirectRenderCommand;pub use vertex::BUFFER_LAYOUT_STRIDE_DYNAMIC;pub use vertex::VertexAttributeDescriptor;pub use vertex::VertexAttributeDescriptorArray;pub use vertex::VertexBufferLayoutDescriptor;pub use vertex::VertexBufferLayoutDescriptorArray;pub use vertex::VertexDescriptor;pub use function_table::FunctionHandle;pub use function_table::IntersectionFunctionBufferArguments;pub use function_table::IntersectionFunctionTable;pub use function_table::IntersectionFunctionTableDescriptor;pub use function_table::VisibleFunctionTable;pub use function_table::VisibleFunctionTableDescriptor;pub use rasterization_rate::RasterizationRateLayerArray;pub use rasterization_rate::RasterizationRateLayerDescriptor;pub use rasterization_rate::RasterizationRateMap;pub use rasterization_rate::RasterizationRateMapDescriptor;pub use rasterization_rate::RasterizationRateSampleArray;pub use log_state::LogState;pub use log_state::LogStateDescriptor;pub use function_log::FunctionLog;pub use function_log::FunctionLogDebugLocation;pub use function_log::LogContainer;pub use texture_view_pool::ResourceViewPoolDescriptor;pub use texture_view_pool::TextureViewPool;pub use allocation::Allocation;pub use resource::Resource;pub use stage_input_output::AttributeDescriptor;pub use stage_input_output::AttributeDescriptorArray;pub use stage_input_output::BufferLayoutDescriptor;pub use stage_input_output::BufferLayoutDescriptorArray;pub use stage_input_output::StageInputOutputDescriptor;pub use enums::*;pub use types::*;
Modules§
- acceleration
- Metal acceleration structures for ray tracing.
- allocation
- Allocation protocol.
- argument
- Metal argument types for reflection.
- argument_
descriptor - Argument descriptor.
- binary_
archive - Metal binary archive for caching compiled pipeline state.
- buffer
- Metal buffer resources.
- capture
- Metal GPU capture facilities for debugging.
- command_
buffer - Metal command buffer.
- command_
buffer_ encoder_ info - Command buffer encoder info.
- command_
queue - Metal command queue.
- counter
- Metal GPU counter facilities for profiling.
- depth_
stencil - Metal depth/stencil state.
- device
- Metal device interface.
- drawable
- Metal drawable interface.
- encoder
- Metal command encoders.
- enums
- Metal enumerations.
- error
- Validation error types for Metal API.
- function_
log - Function log types.
- function_
stitching - Metal function stitching for shader linking.
- function_
table - Function table types.
- heap
- Metal heap resources.
- indirect
- Metal indirect command buffer and command types.
- io
- Metal IO command types.
- library
- Metal shader libraries.
- log_
state - Metal log state types.
- mtl4
- Metal 4 API bindings.
- pass
- Metal pass descriptors.
- pipeline
- Metal pipeline state objects.
- rasterization_
rate - Rasterization rate types for variable rate shading.
- residency_
set - Metal residency set for VRAM management.
- resource
- Resource protocol.
- sampler
- Metal sampler state.
- stage_
input_ output - Stage input/output descriptors.
- sync
- Metal synchronization primitives.
- tensor
- Metal tensor types for ML operations.
- texture
- Metal texture resources.
- texture_
view_ pool - Metal texture view pool types.
- types
- Metal types for Rust.
- vertex
- Vertex descriptor types.