Skip to main content

Crate mtl_gpu

Crate mtl_gpu 

Source
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 flags
  • device - GPU device interface and creation functions
  • buffer - Buffer resources for data storage
  • texture - Texture resources for image data
  • command_queue - Command queue for command buffer scheduling
  • command_buffer - Command buffer for GPU command encoding
  • sampler - Sampler state for texture sampling
  • depth_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::SharedTextureHandle;
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 sync::SharedEvent;
pub use sync::SharedEventHandle;
pub use sync::SharedEventListener;
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.

Type Aliases§

Integer
Signed integer type (pointer-sized).
UInteger
Unsigned integer type (pointer-sized).