blob: 29d34246cc1bc574554b5e228490134224c0340b [file] [log] [blame]
#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