|  | // | 
|  | // Copyright 2016 The ANGLE Project Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  | // | 
|  |  | 
|  | // driver_utils.h : provides more information about current driver. | 
|  |  | 
|  | #ifndef LIBANGLE_RENDERER_DRIVER_UTILS_H_ | 
|  | #define LIBANGLE_RENDERER_DRIVER_UTILS_H_ | 
|  |  | 
|  | #include "common/platform.h" | 
|  | #include "libANGLE/angletypes.h" | 
|  |  | 
|  | namespace rx | 
|  | { | 
|  |  | 
|  | enum VendorID : uint32_t | 
|  | { | 
|  | VENDOR_ID_UNKNOWN = 0x0, | 
|  | VENDOR_ID_AMD     = 0x1002, | 
|  | VENDOR_ID_ARM     = 0x13B5, | 
|  | VENDOR_ID_GOOGLE  = 0x1AE0, | 
|  | VENDOR_ID_INTEL   = 0x8086, | 
|  | VENDOR_ID_NVIDIA  = 0x10DE, | 
|  | // This is Qualcomm PCI Vendor ID. | 
|  | // Android doesn't have a PCI bus, but all we need is a unique id. | 
|  | VENDOR_ID_QUALCOMM = 0x5143, | 
|  | }; | 
|  |  | 
|  | enum AndroidDeviceID : uint32_t | 
|  | { | 
|  | ANDROID_DEVICE_ID_UNKNOWN  = 0x0, | 
|  | ANDROID_DEVICE_ID_NEXUS5X  = 0x4010800, | 
|  | ANDROID_DEVICE_ID_PIXEL1XL = 0x5040001, | 
|  | ANDROID_DEVICE_ID_PIXEL2   = 0x5030004, | 
|  | }; | 
|  |  | 
|  | inline bool IsAMD(uint32_t vendorId) | 
|  | { | 
|  | return vendorId == VENDOR_ID_AMD; | 
|  | } | 
|  |  | 
|  | inline bool IsARM(uint32_t vendorId) | 
|  | { | 
|  | return vendorId == VENDOR_ID_ARM; | 
|  | } | 
|  |  | 
|  | inline bool IsIntel(uint32_t vendorId) | 
|  | { | 
|  | return vendorId == VENDOR_ID_INTEL; | 
|  | } | 
|  |  | 
|  | inline bool IsNvidia(uint32_t vendorId) | 
|  | { | 
|  | return vendorId == VENDOR_ID_NVIDIA; | 
|  | } | 
|  |  | 
|  | inline bool IsQualcomm(uint32_t vendorId) | 
|  | { | 
|  | return vendorId == VENDOR_ID_QUALCOMM; | 
|  | } | 
|  |  | 
|  | inline bool IsNexus5X(uint32_t vendorId, uint32_t deviceId) | 
|  | { | 
|  | return IsQualcomm(vendorId) && deviceId == ANDROID_DEVICE_ID_NEXUS5X; | 
|  | } | 
|  |  | 
|  | inline bool IsPixel1XL(uint32_t vendorId, uint32_t deviceId) | 
|  | { | 
|  | return IsQualcomm(vendorId) && deviceId == ANDROID_DEVICE_ID_PIXEL1XL; | 
|  | } | 
|  |  | 
|  | inline bool IsPixel2(uint32_t vendorId, uint32_t deviceId) | 
|  | { | 
|  | return IsQualcomm(vendorId) && deviceId == ANDROID_DEVICE_ID_PIXEL2; | 
|  | } | 
|  |  | 
|  | const char *GetVendorString(uint32_t vendorId); | 
|  |  | 
|  | // Intel | 
|  | class IntelDriverVersion | 
|  | { | 
|  | public: | 
|  | // Currently, We only provide the constructor with one parameter. It mainly used in Intel | 
|  | // version number on windows. If you want to use this class on other platforms, it's easy to | 
|  | // be extended. | 
|  | IntelDriverVersion(uint16_t lastPart); | 
|  | bool operator==(const IntelDriverVersion &); | 
|  | bool operator!=(const IntelDriverVersion &); | 
|  | bool operator<(const IntelDriverVersion &); | 
|  | bool operator>=(const IntelDriverVersion &); | 
|  |  | 
|  | private: | 
|  | uint16_t mVersionPart; | 
|  | }; | 
|  |  | 
|  | bool IsIvyBridge(uint32_t DeviceId); | 
|  | bool IsHaswell(uint32_t DeviceId); | 
|  | bool IsBroadwell(uint32_t DeviceId); | 
|  | bool IsCherryView(uint32_t DeviceId); | 
|  | bool IsSkylake(uint32_t DeviceId); | 
|  | bool IsBroxton(uint32_t DeviceId); | 
|  | bool IsKabylake(uint32_t DeviceId); | 
|  |  | 
|  | // Platform helpers | 
|  | inline bool IsWindows() | 
|  | { | 
|  | #if defined(ANGLE_PLATFORM_WINDOWS) | 
|  | return true; | 
|  | #else | 
|  | return false; | 
|  | #endif | 
|  | } | 
|  |  | 
|  | inline bool IsLinux() | 
|  | { | 
|  | #if defined(ANGLE_PLATFORM_LINUX) | 
|  | return true; | 
|  | #else | 
|  | return false; | 
|  | #endif | 
|  | } | 
|  |  | 
|  | inline bool IsApple() | 
|  | { | 
|  | #if defined(ANGLE_PLATFORM_APPLE) | 
|  | return true; | 
|  | #else | 
|  | return false; | 
|  | #endif | 
|  | } | 
|  |  | 
|  | struct OSVersion | 
|  | { | 
|  | OSVersion(); | 
|  | OSVersion(int major, int minor, int patch); | 
|  |  | 
|  | int majorVersion = 0; | 
|  | int minorVersion = 0; | 
|  | int patchVersion = 0; | 
|  | }; | 
|  | bool operator==(const OSVersion &a, const OSVersion &b); | 
|  | bool operator!=(const OSVersion &a, const OSVersion &b); | 
|  | bool operator<(const OSVersion &a, const OSVersion &b); | 
|  | bool operator>=(const OSVersion &a, const OSVersion &b); | 
|  |  | 
|  | OSVersion GetMacOSVersion(); | 
|  |  | 
|  | inline bool IsAndroid() | 
|  | { | 
|  | #if defined(ANGLE_PLATFORM_ANDROID) | 
|  | return true; | 
|  | #else | 
|  | return false; | 
|  | #endif | 
|  | } | 
|  |  | 
|  | int GetAndroidSDKVersion(); | 
|  |  | 
|  | }  // namespace rx | 
|  | #endif  // LIBANGLE_RENDERER_DRIVER_UTILS_H_ |