xref: /aosp_15_r20/external/pytorch/aten/src/ATen/native/metal/MetalDevice.h (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1 #ifndef PYTORCH_MOBILE_METAL_DEVICE_H_
2 #define PYTORCH_MOBILE_METAL_DEVICE_H_
3 
4 #import <Metal/Metal.h>
5 
6 #include <string>
7 
8 namespace at::native::metal {
9 
10 struct MetalDeviceInfo {
11   std::string name;
12   MTLLanguageVersion languageVersion;
13 };
14 
createDeviceInfo(id<MTLDevice> device)15 static inline MetalDeviceInfo createDeviceInfo(id<MTLDevice> device) {
16   MetalDeviceInfo device_info;
17   if (device.name != nil) {
18     device_info.name = device.name.UTF8String;
19   }
20   if (@available(macOS 11.0, iOS 14.0, *)) {
21     device_info.languageVersion = MTLLanguageVersion2_3;
22   } else if (@available(macOS 10.15, iOS 13.0, *)) {
23     device_info.languageVersion = MTLLanguageVersion2_2;
24   } else if (@available(macOS 10.14, iOS 12.0, *)) {
25     device_info.languageVersion = MTLLanguageVersion2_1;
26   } else if (@available(macOS 10.13, iOS 11.0, *)) {
27     device_info.languageVersion = MTLLanguageVersion2_0;
28   } else if (@available(macOS 10.12, iOS 10.0, *)) {
29     device_info.languageVersion = MTLLanguageVersion1_2;
30   } else if (@available(macOS 10.11, iOS 9.0, *)) {
31     device_info.languageVersion = MTLLanguageVersion1_1;
32   }
33 #if (                                                    \
34     defined(__IPHONE_9_0) &&                             \
35     __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_9_0) || \
36     (defined(__MAC_10_11) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_11)
37 #else
38 #error "Metal is not available on the current platform."
39 #endif
40   return device_info;
41 }
42 
43 } // namespace at::native::metal
44 
45 #endif
46