Skip to main content

Crate apple_mps

Crate apple_mps 

Source
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 + Image for lazily allocated MPS images or texture-backed images
  • Float32 image read/write helpers plus raw byte transfer with MPSDataLayout
  • Unary image filters:
    • ImageGaussianBlur
    • ImageBox
    • ImageSobel
    • ImageMedian
    • ImageConvolution
    • ImageBilinearScale
    • ImageLanczosScale
    • ImageThresholdBinary
    • ImageStatisticsMinAndMax
    • ImageStatisticsMean
    • ImageReduceRowMin, ImageReduceRowMax, ImageReduceRowMean, ImageReduceRowSum
  • ImageHistogram for histogram-to-MTLBuffer workloads
  • ImageAdd plus ImageScaleAndAdd convenience semantics backed by MPSImageAdd
  • MatrixDescriptor, VectorDescriptor, MatrixMultiplicationDescriptor, Matrix, Vector, and MatrixMultiplication
  • Shared constants for MPSKernelOptions, MPSImageEdgeMode, MPSImageFeatureChannelFormat, MPSDataType, and MPSDataLayout

§Smoke examples

cargo run --example 01_blur_image
cargo run --example 02_matrix_multiply

Re-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;

Modules§

error
ffi
Raw FFI declarations matching the Swift bridge.
filters
image
matrix