Expand description
§mps-rs
Safe Rust bindings for Apple’s
MetalPerformanceShaders
framework on macOS.
The GitHub repository is mps-rs; the published crates.io package is
apple-mps because the mps-rs package name is already taken.
§Install
cargo add apple-mps apple-metal§Quick start
use apple_metal::MetalDevice;
use apple_mps::{feature_channel_format, Image, ImageDescriptor, ImageGaussianBlur};
let device = MetalDevice::system_default().expect("no Metal device");
let queue = device.new_command_queue().expect("queue");
let descriptor = ImageDescriptor::new(256, 256, 1, feature_channel_format::FLOAT32);
let src = Image::new(&device, descriptor).expect("source image");
let dst = Image::new(&device, descriptor).expect("destination image");
let blur = ImageGaussianBlur::new(&device, 2.0).expect("gaussian blur");
let command_buffer = queue.new_command_buffer().expect("command buffer");
blur.encode_image(&command_buffer, &src, &dst);§v0.2 surface
- Core helpers:
supports_mtl_device,preferred_device,hint_temporary_memory_high_water_mark,set_heap_cache_durationPredicateandMpsCommandBuffer
- Images:
ImageDescriptor+Imagefor lazily allocated MPS images or texture-backed images- Float32 image read/write helpers plus raw byte transfer with
MPSDataLayout - Unary image filters:
ImageGaussianBlurImageBoxImageSobelImageMedianImageConvolutionImageBilinearScaleImageLanczosScaleImageThresholdBinaryImageStatisticsMinAndMaxImageStatisticsMeanImageReduceRowMin,ImageReduceRowMax,ImageReduceRowMean,ImageReduceRowSum
ImageHistogram,ImageAdd, andImageScaleAndAdd
- Matrix/vector:
MatrixDescriptor,VectorDescriptor,MatrixMultiplicationDescriptor,Matrix,Vector, andMatrixMultiplication
NDArray:NDArrayDescriptor,NDArray, andNDArrayIdentity
- Ray tracing / denoising:
PolygonAccelerationStructure,RayIntersector, andSVGF
- Neural graph / descriptors:
NNImageNode,NNGraphCnnNeuronReluNode,CnnPoolingMaxNode,CnnSoftMaxNode,CnnUpsamplingNearestNodeCnnConvolutionDescriptor,RnnSingleGateDescriptor
- Shared constants for
MPSKernelOptions,MPSImageEdgeMode,MPSImageFeatureChannelFormat,MPSDataType,MPSDataLayout, and new ray/RNN enums
See COVERAGE.md for the Wave-C audit and the implemented/partial matrix.
§Validation
cargo test
cargo run --example 01_blur_image
cargo run --example 02_matrix_multiply
cargo run --example 03_ndarray_identity
cargo run --example 04_ray_intersection
cargo run --example 05_nn_graph_reluRe-exports§
pub use crate::core::device_options;pub use crate::core::hint_temporary_memory_high_water_mark;pub use crate::core::preferred_device;pub use crate::core::set_heap_cache_duration;pub use crate::core::supports_mtl_device;pub use crate::core::CommandBuffer as MpsCommandBuffer;pub use crate::core::Predicate;pub use crate::core::PreferredDevice;pub use crate::error::Error;pub use crate::error::Result;pub use crate::filters::HistogramInfo;pub use crate::filters::ImageAdd;pub use crate::filters::ImageBilinearScale;pub use crate::filters::ImageBox;pub use crate::filters::ImageConvolution;pub use crate::filters::ImageGaussianBlur;pub use crate::filters::ImageHistogram;pub use crate::filters::ImageLanczosScale;pub use crate::filters::ImageMedian;pub use crate::filters::ImageReduceRowMax;pub use crate::filters::ImageReduceRowMean;pub use crate::filters::ImageReduceRowMin;pub use crate::filters::ImageReduceRowSum;pub use crate::filters::ImageScaleAndAdd;pub use crate::filters::ImageSobel;pub use crate::filters::ImageStatisticsMean;pub use crate::filters::ImageStatisticsMinAndMax;pub use crate::filters::ImageThresholdBinary;pub use crate::filters::ScaleTransform;pub use crate::image::feature_channel_format;pub use crate::image::image_edge_mode;pub use crate::image::image_layout;pub use crate::image::kernel_options;pub use crate::image::Image;pub use crate::image::ImageDescriptor;pub use crate::image::ImageReadWriteParams;pub use crate::image::ImageRegion;pub use crate::matrix::data_type;pub use crate::matrix::data_type_size;pub use crate::matrix::Matrix;pub use crate::matrix::MatrixDescriptor;pub use crate::matrix::MatrixMultiplication;pub use crate::matrix::MatrixMultiplicationDescriptor;pub use crate::matrix::Vector;pub use crate::matrix::VectorDescriptor;pub use crate::ndarray::NDArray;pub use crate::ndarray::NDArrayDescriptor;pub use crate::ndarray::NDArrayIdentity;pub use crate::neural::rnn_sequence_direction;pub use crate::neural::CnnConvolutionDescriptor;pub use crate::neural::CnnNeuronReluNode;pub use crate::neural::CnnPoolingMaxNode;pub use crate::neural::CnnSoftMaxNode;pub use crate::neural::CnnUpsamplingNearestNode;pub use crate::neural::NNGraph;pub use crate::neural::NNImageNode;pub use crate::neural::RnnSingleGateDescriptor;pub use crate::ray::acceleration_structure_status;pub use crate::ray::acceleration_structure_usage;pub use crate::ray::cull_mode;pub use crate::ray::intersection_data_type;pub use crate::ray::intersection_type;pub use crate::ray::polygon_type;pub use crate::ray::ray_data_type;pub use crate::ray::winding;pub use crate::ray::PolygonAccelerationStructure;pub use crate::ray::RayIntersector;pub use crate::ray::SVGF;