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.1 surface
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
ImageHistogramfor histogram-to-MTLBufferworkloadsImageAddplusImageScaleAndAddconvenience semantics backed byMPSImageAddMatrixDescriptor,VectorDescriptor,MatrixMultiplicationDescriptor,Matrix,Vector, andMatrixMultiplication- Shared constants for
MPSKernelOptions,MPSImageEdgeMode,MPSImageFeatureChannelFormat,MPSDataType, andMPSDataLayout
§Smoke examples
cargo run --example 01_blur_image
cargo run --example 02_matrix_multiplyRe-exports§
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;