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.2.1 surface

  • Core helpers:
    • supports_mtl_device, preferred_device, hint_temporary_memory_high_water_mark, set_heap_cache_duration
    • Predicate and MpsCommandBuffer
  • Images:
    • 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, ImageAdd, and ImageScaleAndAdd
  • Matrix/vector:
    • MatrixDescriptor, VectorDescriptor, MatrixMultiplicationDescriptor, Matrix, Vector, and MatrixMultiplication
  • NDArray:
    • NDArrayDescriptor, NDArray, NDArrayIdentity, and NDArrayMatrixMultiplication
  • State:
    • State, StateResourceList, StateTextureInfo
    • state_batch_increment_read_count, state_batch_resource_size, state_batch_synchronize
  • Ray tracing / denoising:
    • PolygonAccelerationStructure, RayIntersector, and SVGF
  • Neural / optimizer / RNN:
    • NNImageNode, NNGraph
    • CnnNeuronReluNode, CnnPoolingMaxNode, CnnSoftMaxNode, CnnUpsamplingNearestNode
    • CnnConvolutionDescriptor, CnnConvolution, CnnConvolutionWeightsAndBiasesState
    • NNOptimizerDescriptor, NNOptimizer, NNOptimizerStochasticGradientDescent, NNOptimizerRmsProp, NNOptimizerAdam
    • RnnDescriptor, RnnSingleGateDescriptor, GruDescriptor, LstmDescriptor, RnnImageInferenceLayer, RnnRecurrentImageState
  • Shared constants for MPSKernelOptions, MPSImageEdgeMode, MPSImageFeatureChannelFormat, MPSDataType, MPSDataLayout, plus convolution / optimizer / RNN / state 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_relu
cargo run --example 06_ndarray_matrix_multiplication
cargo run --example 07_optimizer_and_state
cargo run --example 08_cnn_convolution
cargo run --example 09_rnn_image_inference

Re-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::ndarray::NDArrayMatrixMultiplication;
pub use crate::neural::cnn_accumulator_precision_option;
pub use crate::neural::cnn_convolution_flags;
pub use crate::neural::cnn_convolution_weights_layout;
pub use crate::neural::nn_regularization_type;
pub use crate::neural::rnn_bidirectional_combine_mode;
pub use crate::neural::rnn_sequence_direction;
pub use crate::neural::CnnConvolution;
pub use crate::neural::CnnConvolutionDescriptor;
pub use crate::neural::CnnConvolutionWeightsAndBiasesState;
pub use crate::neural::CnnNeuronReluNode;
pub use crate::neural::CnnPoolingMaxNode;
pub use crate::neural::CnnSoftMaxNode;
pub use crate::neural::CnnUpsamplingNearestNode;
pub use crate::neural::GruDescriptor;
pub use crate::neural::LstmDescriptor;
pub use crate::neural::NNGraph;
pub use crate::neural::NNImageNode;
pub use crate::neural::NNOptimizer;
pub use crate::neural::NNOptimizerAdam;
pub use crate::neural::NNOptimizerDescriptor;
pub use crate::neural::NNOptimizerRmsProp;
pub use crate::neural::NNOptimizerStochasticGradientDescent;
pub use crate::neural::RnnDescriptor;
pub use crate::neural::RnnImageInferenceLayer;
pub use crate::neural::RnnRecurrentImageState;
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;
pub use crate::state::state_batch_increment_read_count;
pub use crate::state::state_batch_resource_size;
pub use crate::state::state_batch_synchronize;
pub use crate::state::state_resource_type;
pub use crate::state::State;
pub use crate::state::StateResourceList;
pub use crate::state::StateTextureInfo;

Modules§

core
error
ffi
Raw FFI declarations matching the Swift bridge.
filters
image
matrix
ndarray
neural
ray
state