| // |
| // 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_APPLE = 0x106B, |
| VENDOR_ID_ARM = 0x13B5, |
| VENDOR_ID_MICROSOFT = 0x1414, |
| // Broadcom devices won't use PCI, but this is their Vulkan vendor id. |
| VENDOR_ID_BROADCOM = 0x14E4, |
| VENDOR_ID_GOOGLE = 0x1AE0, |
| VENDOR_ID_INTEL = 0x8086, |
| VENDOR_ID_MESA = 0x10005, |
| VENDOR_ID_NVIDIA = 0x10DE, |
| VENDOR_ID_POWERVR = 0x1010, |
| // 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, |
| VENDOR_ID_SAMSUNG = 0x144D, |
| VENDOR_ID_VMWARE = 0x15AD, |
| VENDOR_ID_VIVANTE = 0x9999, |
| }; |
| |
| enum AndroidDeviceID : uint32_t |
| { |
| ANDROID_DEVICE_ID_UNKNOWN = 0x0, |
| ANDROID_DEVICE_ID_NEXUS5X = 0x4010800, |
| ANDROID_DEVICE_ID_PIXEL2 = 0x5040001, |
| ANDROID_DEVICE_ID_PIXEL1XL = 0x5030004, |
| ANDROID_DEVICE_ID_PIXEL4 = 0x6040001, |
| ANDROID_DEVICE_ID_SWIFTSHADER = 0xC0DE, |
| }; |
| |
| inline bool IsAMD(uint32_t vendorId) |
| { |
| return vendorId == VENDOR_ID_AMD; |
| } |
| |
| inline bool IsApple(uint32_t vendorId) |
| { |
| return vendorId == VENDOR_ID_APPLE; |
| } |
| |
| inline bool IsARM(uint32_t vendorId) |
| { |
| return vendorId == VENDOR_ID_ARM; |
| } |
| |
| inline bool IsBroadcom(uint32_t vendorId) |
| { |
| return vendorId == VENDOR_ID_BROADCOM; |
| } |
| |
| inline bool IsIntel(uint32_t vendorId) |
| { |
| return vendorId == VENDOR_ID_INTEL; |
| } |
| |
| inline bool IsGoogle(uint32_t vendorId) |
| { |
| return vendorId == VENDOR_ID_GOOGLE; |
| } |
| |
| inline bool IsNvidia(uint32_t vendorId) |
| { |
| return vendorId == VENDOR_ID_NVIDIA; |
| } |
| |
| inline bool IsPowerVR(uint32_t vendorId) |
| { |
| return vendorId == VENDOR_ID_POWERVR; |
| } |
| |
| inline bool IsQualcomm(uint32_t vendorId) |
| { |
| return vendorId == VENDOR_ID_QUALCOMM; |
| } |
| |
| inline bool IsVMWare(uint32_t vendorId) |
| { |
| return vendorId == VENDOR_ID_VMWARE; |
| } |
| |
| inline bool IsSamsung(uint32_t vendorId) |
| { |
| return vendorId == VENDOR_ID_SAMSUNG; |
| } |
| |
| inline bool IsVivante(uint32_t vendorId) |
| { |
| return vendorId == VENDOR_ID_VIVANTE; |
| } |
| |
| 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; |
| } |
| |
| inline bool IsPixel4(uint32_t vendorId, uint32_t deviceId) |
| { |
| return IsQualcomm(vendorId) && deviceId == ANDROID_DEVICE_ID_PIXEL4; |
| } |
| |
| inline bool IsSwiftshader(uint32_t vendorId, uint32_t deviceId) |
| { |
| return IsGoogle(vendorId) && deviceId == ANDROID_DEVICE_ID_SWIFTSHADER; |
| } |
| |
| const char *GetVendorString(uint32_t vendorId); |
| |
| // For Linux, Intel graphics driver version is the Mesa version. The version number has three |
| // fields: major revision, minor revision and release number. |
| // For Windows, The version number includes 3rd and 4th fields. Please refer the details at |
| // http://www.intel.com/content/www/us/en/support/graphics-drivers/000005654.html. |
| // Current implementation only supports Windows. |
| class IntelDriverVersion |
| { |
| public: |
| IntelDriverVersion(uint32_t buildNumber); |
| bool operator==(const IntelDriverVersion &); |
| bool operator!=(const IntelDriverVersion &); |
| bool operator<(const IntelDriverVersion &); |
| bool operator>=(const IntelDriverVersion &); |
| |
| private: |
| uint32_t mBuildNumber; |
| }; |
| |
| bool IsSandyBridge(uint32_t DeviceId); |
| 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); |
| bool Is9thGenIntel(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 |
| } |
| |
| inline bool IsMac() |
| { |
| #if defined(ANGLE_PLATFORM_APPLE) && defined(ANGLE_PLATFORM_MACOS) |
| return true; |
| #else |
| return false; |
| #endif |
| } |
| |
| inline bool IsFuchsia() |
| { |
| #if defined(ANGLE_PLATFORM_FUCHSIA) |
| return true; |
| #else |
| return false; |
| #endif |
| } |
| |
| inline bool IsIOS() |
| { |
| #if defined(ANGLE_PLATFORM_IOS) |
| return true; |
| #else |
| return false; |
| #endif |
| } |
| |
| bool IsWayland(); |
| bool IsWin10OrGreater(); |
| |
| 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(); |
| |
| OSVersion GetiOSVersion(); |
| |
| OSVersion GetLinuxOSVersion(); |
| |
| inline bool IsAndroid() |
| { |
| #if defined(ANGLE_PLATFORM_ANDROID) |
| return true; |
| #else |
| return false; |
| #endif |
| } |
| |
| int GetAndroidSDKVersion(); |
| |
| } // namespace rx |
| #endif // LIBANGLE_RENDERER_DRIVER_UTILS_H_ |