objc2-metal-performance-shaders 0.3.2

Bindings to the MetalPerformanceShaders framework
Documentation
//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use core::ffi::*;
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
use objc2_foundation::*;
use objc2_metal::*;

use crate::*;

extern_class!(
    /// Dependencies: This depends on Metal.framework
    ///
    /// MPSMatrixSum performs a pointwise summation of N MPSMatrix
    /// objects and applies an optional bias term and neuron activation
    /// function.
    ///
    /// MPSMatrix A = empty matrix;
    /// for (i = 0; i
    /// <
    /// N; ++i)
    /// A += alpha[i]*B[i];
    ///
    /// if (bias)
    /// A += broadcast(bias);
    ///
    /// if (neuron)
    /// A = applyNeuron(A);
    ///
    /// Where B is the array of MPSMatrix objects, A is the destination
    /// MPSMatrix, alpha is an array of scalar values, bias is a vector
    /// which is broadcast and accumulated across each row of the intermediate
    /// result, and applyNeuron is a neuron activation function.
    ///
    /// Each matrix in the array may have an independent origin.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/metalperformanceshaders/mpsmatrixsum?language=objc)
    #[unsafe(super(MPSKernel, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[cfg(all(feature = "MPSCore", feature = "MPSKernel"))]
    pub struct MPSMatrixSum;
);

#[cfg(all(feature = "MPSCore", feature = "MPSKernel"))]
extern_conformance!(
    unsafe impl NSCoding for MPSMatrixSum {}
);

#[cfg(all(feature = "MPSCore", feature = "MPSKernel"))]
extern_conformance!(
    unsafe impl NSCopying for MPSMatrixSum {}
);

#[cfg(all(feature = "MPSCore", feature = "MPSKernel"))]
unsafe impl CopyingHelper for MPSMatrixSum {
    type Result = Self;
}

#[cfg(all(feature = "MPSCore", feature = "MPSKernel"))]
extern_conformance!(
    unsafe impl NSObjectProtocol for MPSMatrixSum {}
);

#[cfg(all(feature = "MPSCore", feature = "MPSKernel"))]
extern_conformance!(
    unsafe impl NSSecureCoding for MPSMatrixSum {}
);

#[cfg(all(feature = "MPSCore", feature = "MPSKernel"))]
impl MPSMatrixSum {
    extern_methods!(
        #[unsafe(method(initWithDevice:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithDevice(
            this: Allocated<Self>,
            device: &ProtocolObject<dyn MTLDevice>,
        ) -> Retained<Self>;

        /// Initialize a MPSMatrixSum kernel.
        ///
        /// Parameter `device`: The device on which to initialize the kernel.
        ///
        /// Parameter `count`: The number of matrices to be summed.
        ///
        /// Parameter `rows`: The number of rows to use in the input matrices.
        ///
        /// Parameter `columns`: The number of columns to use in the input matrices.
        ///
        /// Parameter `transpose`: If YES the result of the summation is to be transposed
        /// prior to applying the bias and activation.
        #[unsafe(method(initWithDevice:count:rows:columns:transpose:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithDevice_count_rows_columns_transpose(
            this: Allocated<Self>,
            device: &ProtocolObject<dyn MTLDevice>,
            count: NSUInteger,
            rows: NSUInteger,
            columns: NSUInteger,
            transpose: bool,
        ) -> Retained<Self>;

        /// The number of rows to sum.
        #[unsafe(method(rows))]
        #[unsafe(method_family = none)]
        pub unsafe fn rows(&self) -> NSUInteger;

        /// The number of columns to sum.
        #[unsafe(method(columns))]
        #[unsafe(method_family = none)]
        pub unsafe fn columns(&self) -> NSUInteger;

        /// The number of matrices to sum.
        #[unsafe(method(count))]
        #[unsafe(method_family = none)]
        pub unsafe fn count(&self) -> NSUInteger;

        /// The transposition used to initialize the kernel.
        #[unsafe(method(transpose))]
        #[unsafe(method_family = none)]
        pub unsafe fn transpose(&self) -> bool;

        /// The origin, relative to [0, 0] in the result matrix, at which to
        /// start writing results.  This property is modifiable and defaults
        /// to [0, 0] at initialization time.  If a different origin is desired
        /// then this should be modified prior to encoding the kernel.
        #[unsafe(method(resultMatrixOrigin))]
        #[unsafe(method_family = none)]
        pub unsafe fn resultMatrixOrigin(&self) -> MTLOrigin;

        /// Setter for [`resultMatrixOrigin`][Self::resultMatrixOrigin].
        #[unsafe(method(setResultMatrixOrigin:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setResultMatrixOrigin(&self, result_matrix_origin: MTLOrigin);

        #[cfg(feature = "MPSCNNNeuronType")]
        /// Specifies a neuron activation function to be used.
        ///
        ///
        /// This method can be used to add a neuron activation funtion of given type with
        /// associated scalar parameters A, B, and C that are shared across all output values.
        /// Note that this method can only be used to specify neurons which are specified by three (or fewer)
        /// parameters shared across all output values (or channels, in CNN nomenclature). It is an error to call
        /// this method for neuron activation functions like MPSCNNNeuronTypePReLU,
        /// which require per-channel parameter values. An MPSMatrixSum kernel is initialized
        /// with a default neuron function of MPSCNNNeuronTypeNone.
        ///
        ///
        /// Parameter `neuronType`: Type of neuron activation function. For full list see MPSCNNNeuronType.h
        ///
        /// Parameter `parameterA`: parameterA of neuron activation that is shared across all output values.
        ///
        /// Parameter `parameterB`: parameterB of neuron activation that is shared across all output values.
        ///
        /// Parameter `parameterC`: parameterC of neuron activation that is shared across all output values.
        #[unsafe(method(setNeuronType:parameterA:parameterB:parameterC:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setNeuronType_parameterA_parameterB_parameterC(
            &self,
            neuron_type: MPSCNNNeuronType,
            parameter_a: c_float,
            parameter_b: c_float,
            parameter_c: c_float,
        );

        #[cfg(feature = "MPSCNNNeuronType")]
        /// Getter funtion for neuronType set using setNeuronType:parameterA:parameterB:parameterC method
        #[unsafe(method(neuronType))]
        #[unsafe(method_family = none)]
        pub unsafe fn neuronType(&self) -> MPSCNNNeuronType;

        /// Neuron parameter A.
        #[unsafe(method(neuronParameterA))]
        #[unsafe(method_family = none)]
        pub unsafe fn neuronParameterA(&self) -> c_float;

        /// Neuron parameter B.
        #[unsafe(method(neuronParameterB))]
        #[unsafe(method_family = none)]
        pub unsafe fn neuronParameterB(&self) -> c_float;

        /// Neuron parameter C.
        #[unsafe(method(neuronParameterC))]
        #[unsafe(method_family = none)]
        pub unsafe fn neuronParameterC(&self) -> c_float;

        #[cfg(feature = "MPSMatrix")]
        /// Encode the operations to the command buffer
        ///
        /// Parameter `buffer`: The command buffer in which to encode the operation.
        ///
        /// Parameter `sourceMatrices`: A list of matrices from which the matrix data is read.
        ///
        /// Parameter `resultMatrix`: The result matrix.
        ///
        /// Parameter `scaleVector`: A MPSVector of type MPSDataTypeFloat32 containing the list of
        /// scale factors, specified in single precision.
        ///
        /// Parameter `offsetVector`: A MPSVector of type MPSDataTypeUInt32 containing the list of
        /// offsets, stored as a packed array of MPSMatrixOffset values.
        ///
        /// Parameter `biasVector`: A MPSVector containing the bias terms to add to the result
        /// prior to applying the neuron function, if any.  May be nil.
        ///
        /// Parameter `startIndex`: The starting index into the scale and offset vectors.
        #[unsafe(method(encodeToCommandBuffer:sourceMatrices:resultMatrix:scaleVector:offsetVector:biasVector:startIndex:))]
        #[unsafe(method_family = none)]
        pub unsafe fn encodeToCommandBuffer_sourceMatrices_resultMatrix_scaleVector_offsetVector_biasVector_startIndex(
            &self,
            buffer: &ProtocolObject<dyn MTLCommandBuffer>,
            source_matrices: &NSArray<MPSMatrix>,
            result_matrix: &MPSMatrix,
            scale_vector: Option<&MPSVector>,
            offset_vector: Option<&MPSVector>,
            bias_vector: Option<&MPSVector>,
            start_index: NSUInteger,
        );

        /// NSSecureCoding compatability
        ///
        /// See
        /// MPSKernel#initWithCoder.
        /// Parameter `aDecoder`: The NSCoder subclass with your serialized MPSMatrixSum kernel.
        ///
        /// Parameter `device`: The MTLDevice on which to make the MPSMatrixSum object.
        ///
        /// Returns: A new MPSMatrixSum object, or nil if failure.
        ///
        /// # Safety
        ///
        /// `a_decoder` possibly has further requirements.
        #[unsafe(method(initWithCoder:device:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithCoder_device(
            this: Allocated<Self>,
            a_decoder: &NSCoder,
            device: &ProtocolObject<dyn MTLDevice>,
        ) -> Option<Retained<Self>>;
    );
}

/// Methods declared on superclass `MPSKernel`.
#[cfg(all(feature = "MPSCore", feature = "MPSKernel"))]
impl MPSMatrixSum {
    extern_methods!(
        /// Called by NSCoder to decode MPSKernels
        ///
        /// This isn't the right interface to decode a MPSKernel, but
        /// it is the one that NSCoder uses. To enable your NSCoder
        /// (e.g. NSKeyedUnarchiver) to set which device to use
        /// extend the object to adopt the MPSDeviceProvider
        /// protocol. Otherwise, the Metal system default device
        /// will be used.
        ///
        /// # Safety
        ///
        /// `a_decoder` possibly has further requirements.
        #[unsafe(method(initWithCoder:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithCoder(
            this: Allocated<Self>,
            a_decoder: &NSCoder,
        ) -> Option<Retained<Self>>;
    );
}

/// Methods declared on superclass `NSObject`.
#[cfg(all(feature = "MPSCore", feature = "MPSKernel"))]
impl MPSMatrixSum {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;
    );
}