icrate 0.1.2

Bindings to Apple's frameworks
Documentation
//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use crate::common::*;
use crate::Foundation::*;
use crate::Metal::*;

ns_enum!(
    #[underlying(NSUInteger)]
    pub enum MTLPurgeableState {
        MTLPurgeableStateKeepCurrent = 1,
        MTLPurgeableStateNonVolatile = 2,
        MTLPurgeableStateVolatile = 3,
        MTLPurgeableStateEmpty = 4,
    }
);

ns_enum!(
    #[underlying(NSUInteger)]
    pub enum MTLCPUCacheMode {
        MTLCPUCacheModeDefaultCache = 0,
        MTLCPUCacheModeWriteCombined = 1,
    }
);

ns_enum!(
    #[underlying(NSUInteger)]
    pub enum MTLStorageMode {
        MTLStorageModeShared = 0,
        MTLStorageModeManaged = 1,
        MTLStorageModePrivate = 2,
        MTLStorageModeMemoryless = 3,
    }
);

ns_enum!(
    #[underlying(NSUInteger)]
    pub enum MTLHazardTrackingMode {
        MTLHazardTrackingModeDefault = 0,
        MTLHazardTrackingModeUntracked = 1,
        MTLHazardTrackingModeTracked = 2,
    }
);

ns_options!(
    #[underlying(NSUInteger)]
    pub enum MTLResourceOptions {
        MTLResourceCPUCacheModeDefaultCache =
            MTLCPUCacheModeDefaultCache << MTLResourceCPUCacheModeShift,
        MTLResourceCPUCacheModeWriteCombined =
            MTLCPUCacheModeWriteCombined << MTLResourceCPUCacheModeShift,
        MTLResourceStorageModeShared = MTLStorageModeShared << MTLResourceStorageModeShift,
        MTLResourceStorageModeManaged = MTLStorageModeManaged << MTLResourceStorageModeShift,
        MTLResourceStorageModePrivate = MTLStorageModePrivate << MTLResourceStorageModeShift,
        MTLResourceStorageModeMemoryless = MTLStorageModeMemoryless << MTLResourceStorageModeShift,
        MTLResourceHazardTrackingModeDefault =
            MTLHazardTrackingModeDefault << MTLResourceHazardTrackingModeShift,
        MTLResourceHazardTrackingModeUntracked =
            MTLHazardTrackingModeUntracked << MTLResourceHazardTrackingModeShift,
        MTLResourceHazardTrackingModeTracked =
            MTLHazardTrackingModeTracked << MTLResourceHazardTrackingModeShift,
        #[deprecated]
        MTLResourceOptionCPUCacheModeDefault = MTLResourceCPUCacheModeDefaultCache,
        #[deprecated]
        MTLResourceOptionCPUCacheModeWriteCombined = MTLResourceCPUCacheModeWriteCombined,
    }
);

extern_protocol!(
    pub unsafe trait MTLResource: NSObjectProtocol {
        #[cfg(feature = "Foundation_NSString")]
        #[method_id(@__retain_semantics Other label)]
        fn label(&self) -> Option<Id<NSString>>;

        #[cfg(feature = "Foundation_NSString")]
        #[method(setLabel:)]
        fn setLabel(&self, label: Option<&NSString>);

        #[method_id(@__retain_semantics Other device)]
        fn device(&self) -> Id<ProtocolObject<dyn MTLDevice>>;

        #[method(cpuCacheMode)]
        fn cpuCacheMode(&self) -> MTLCPUCacheMode;

        #[method(storageMode)]
        fn storageMode(&self) -> MTLStorageMode;

        #[method(hazardTrackingMode)]
        fn hazardTrackingMode(&self) -> MTLHazardTrackingMode;

        #[method(resourceOptions)]
        fn resourceOptions(&self) -> MTLResourceOptions;

        #[method(setPurgeableState:)]
        fn setPurgeableState(&self, state: MTLPurgeableState) -> MTLPurgeableState;

        #[method_id(@__retain_semantics Other heap)]
        fn heap(&self) -> Option<Id<ProtocolObject<dyn MTLHeap>>>;

        #[method(heapOffset)]
        fn heapOffset(&self) -> NSUInteger;

        #[method(allocatedSize)]
        fn allocatedSize(&self) -> NSUInteger;

        #[method(makeAliasable)]
        unsafe fn makeAliasable(&self);

        #[method(isAliasable)]
        fn isAliasable(&self) -> bool;
    }

    unsafe impl ProtocolType for dyn MTLResource {}
);