diff --git a/src/device.rs b/src/device.rs index 3fb238a..9f27407 100644 --- a/src/device.rs +++ b/src/device.rs @@ -24,6 +24,8 @@ const AMD_DEVICE_ON_APPLE_VENDOR_STRING: &str = "AMD"; const AMD_DEVICE_ON_APPLE_VENDOR_ID: u32 = 0x1021d00; const NVIDIA_DEVICE_VENDOR_STRING: &str = "NVIDIA Corporation"; const NVIDIA_DEVICE_VENDOR_ID: u32 = 0x10de; +const APPLE_DEVICE_VENDOR_ID: u32 = 0x1027F00; +const APPLE_DEVICE_VENDOR_STRING: &str = "Apple"; #[cfg(feature = "cuda")] lazy_static! { @@ -178,6 +180,8 @@ pub enum Vendor { Amd, /// GPU by NVIDIA. Nvidia, + /// GPU by Apple. + Apple, } impl TryFrom<&str> for Vendor { @@ -188,6 +192,7 @@ impl TryFrom<&str> for Vendor { AMD_DEVICE_VENDOR_STRING => Ok(Self::Amd), AMD_DEVICE_ON_APPLE_VENDOR_STRING => Ok(Self::Amd), NVIDIA_DEVICE_VENDOR_STRING => Ok(Self::Nvidia), + APPLE_DEVICE_VENDOR_STRING => Ok(Self::Apple), _ => Err(GPUError::UnsupportedVendor(vendor.to_string())), } } @@ -201,6 +206,7 @@ impl TryFrom for Vendor { AMD_DEVICE_VENDOR_ID => Ok(Self::Amd), AMD_DEVICE_ON_APPLE_VENDOR_ID => Ok(Self::Amd), NVIDIA_DEVICE_VENDOR_ID => Ok(Self::Nvidia), + APPLE_DEVICE_VENDOR_ID => Ok(Self::Apple), _ => Err(GPUError::UnsupportedVendor(format!("0x{:x}", vendor))), } } @@ -211,6 +217,7 @@ impl fmt::Display for Vendor { let vendor = match self { Self::Amd => AMD_DEVICE_VENDOR_STRING, Self::Nvidia => NVIDIA_DEVICE_VENDOR_STRING, + Self::Apple => APPLE_DEVICE_VENDOR_STRING, }; write!(f, "{}", vendor) }