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