1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2016 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker
7*8975f5c5SAndroid Build Coastguard Worker // driver_utils.h : provides more information about current driver.
8*8975f5c5SAndroid Build Coastguard Worker
9*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_DRIVER_UTILS_H_
10*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_DRIVER_UTILS_H_
11*8975f5c5SAndroid Build Coastguard Worker
12*8975f5c5SAndroid Build Coastguard Worker #include "common/platform.h"
13*8975f5c5SAndroid Build Coastguard Worker #include "common/platform_helpers.h"
14*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/angletypes.h"
15*8975f5c5SAndroid Build Coastguard Worker
16*8975f5c5SAndroid Build Coastguard Worker namespace rx
17*8975f5c5SAndroid Build Coastguard Worker {
18*8975f5c5SAndroid Build Coastguard Worker
19*8975f5c5SAndroid Build Coastguard Worker enum VendorID : uint32_t
20*8975f5c5SAndroid Build Coastguard Worker {
21*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_UNKNOWN = 0x0,
22*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_AMD = 0x1002,
23*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_APPLE = 0x106B,
24*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_ARM = 0x13B5,
25*8975f5c5SAndroid Build Coastguard Worker // Broadcom devices won't use PCI, but this is their Vulkan vendor id.
26*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_BROADCOM = 0x14E4,
27*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_GOOGLE = 0x1AE0,
28*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_INTEL = 0x8086,
29*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_MESA = 0x10005,
30*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_MICROSOFT = 0x1414,
31*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_NVIDIA = 0x10DE,
32*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_POWERVR = 0x1010,
33*8975f5c5SAndroid Build Coastguard Worker #if defined(ANGLE_PLATFORM_WINDOWS)
34*8975f5c5SAndroid Build Coastguard Worker // Qualcomm devices on Windows are ACPI, and use a different vendor ID than Android.
35*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_QUALCOMM = 0x4D4F4351,
36*8975f5c5SAndroid Build Coastguard Worker #else
37*8975f5c5SAndroid Build Coastguard Worker // This is Qualcomm PCI Vendor ID.
38*8975f5c5SAndroid Build Coastguard Worker // Android doesn't have a PCI bus, but all we need is a unique id.
39*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_QUALCOMM = 0x5143,
40*8975f5c5SAndroid Build Coastguard Worker #endif
41*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_SAMSUNG = 0x144D,
42*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_VIVANTE = 0x9999,
43*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_VMWARE = 0x15AD,
44*8975f5c5SAndroid Build Coastguard Worker VENDOR_ID_VIRTIO = 0x1AF4,
45*8975f5c5SAndroid Build Coastguard Worker };
46*8975f5c5SAndroid Build Coastguard Worker
47*8975f5c5SAndroid Build Coastguard Worker enum AndroidDeviceID : uint32_t
48*8975f5c5SAndroid Build Coastguard Worker {
49*8975f5c5SAndroid Build Coastguard Worker ANDROID_DEVICE_ID_UNKNOWN = 0x0,
50*8975f5c5SAndroid Build Coastguard Worker ANDROID_DEVICE_ID_NEXUS5X = 0x4010800,
51*8975f5c5SAndroid Build Coastguard Worker ANDROID_DEVICE_ID_PIXEL2 = 0x5040001,
52*8975f5c5SAndroid Build Coastguard Worker ANDROID_DEVICE_ID_PIXEL1XL = 0x5030004,
53*8975f5c5SAndroid Build Coastguard Worker ANDROID_DEVICE_ID_PIXEL4 = 0x6040001,
54*8975f5c5SAndroid Build Coastguard Worker ANDROID_DEVICE_ID_GALAXYA23 = 0x6010901,
55*8975f5c5SAndroid Build Coastguard Worker ANDROID_DEVICE_ID_GALAXYS23 = 0x43050A01,
56*8975f5c5SAndroid Build Coastguard Worker ANDROID_DEVICE_ID_SWIFTSHADER = 0xC0DE,
57*8975f5c5SAndroid Build Coastguard Worker };
58*8975f5c5SAndroid Build Coastguard Worker
IsAMD(uint32_t vendorId)59*8975f5c5SAndroid Build Coastguard Worker inline bool IsAMD(uint32_t vendorId)
60*8975f5c5SAndroid Build Coastguard Worker {
61*8975f5c5SAndroid Build Coastguard Worker return vendorId == VENDOR_ID_AMD;
62*8975f5c5SAndroid Build Coastguard Worker }
63*8975f5c5SAndroid Build Coastguard Worker
IsAppleGPU(uint32_t vendorId)64*8975f5c5SAndroid Build Coastguard Worker inline bool IsAppleGPU(uint32_t vendorId)
65*8975f5c5SAndroid Build Coastguard Worker {
66*8975f5c5SAndroid Build Coastguard Worker return vendorId == VENDOR_ID_APPLE;
67*8975f5c5SAndroid Build Coastguard Worker }
68*8975f5c5SAndroid Build Coastguard Worker
IsARM(uint32_t vendorId)69*8975f5c5SAndroid Build Coastguard Worker inline bool IsARM(uint32_t vendorId)
70*8975f5c5SAndroid Build Coastguard Worker {
71*8975f5c5SAndroid Build Coastguard Worker return vendorId == VENDOR_ID_ARM;
72*8975f5c5SAndroid Build Coastguard Worker }
73*8975f5c5SAndroid Build Coastguard Worker
IsBroadcom(uint32_t vendorId)74*8975f5c5SAndroid Build Coastguard Worker inline bool IsBroadcom(uint32_t vendorId)
75*8975f5c5SAndroid Build Coastguard Worker {
76*8975f5c5SAndroid Build Coastguard Worker return vendorId == VENDOR_ID_BROADCOM;
77*8975f5c5SAndroid Build Coastguard Worker }
78*8975f5c5SAndroid Build Coastguard Worker
IsIntel(uint32_t vendorId)79*8975f5c5SAndroid Build Coastguard Worker inline bool IsIntel(uint32_t vendorId)
80*8975f5c5SAndroid Build Coastguard Worker {
81*8975f5c5SAndroid Build Coastguard Worker return vendorId == VENDOR_ID_INTEL;
82*8975f5c5SAndroid Build Coastguard Worker }
83*8975f5c5SAndroid Build Coastguard Worker
IsGoogle(uint32_t vendorId)84*8975f5c5SAndroid Build Coastguard Worker inline bool IsGoogle(uint32_t vendorId)
85*8975f5c5SAndroid Build Coastguard Worker {
86*8975f5c5SAndroid Build Coastguard Worker return vendorId == VENDOR_ID_GOOGLE;
87*8975f5c5SAndroid Build Coastguard Worker }
88*8975f5c5SAndroid Build Coastguard Worker
IsMicrosoft(uint32_t vendorId)89*8975f5c5SAndroid Build Coastguard Worker inline bool IsMicrosoft(uint32_t vendorId)
90*8975f5c5SAndroid Build Coastguard Worker {
91*8975f5c5SAndroid Build Coastguard Worker return vendorId == VENDOR_ID_MICROSOFT;
92*8975f5c5SAndroid Build Coastguard Worker }
93*8975f5c5SAndroid Build Coastguard Worker
IsNvidia(uint32_t vendorId)94*8975f5c5SAndroid Build Coastguard Worker inline bool IsNvidia(uint32_t vendorId)
95*8975f5c5SAndroid Build Coastguard Worker {
96*8975f5c5SAndroid Build Coastguard Worker return vendorId == VENDOR_ID_NVIDIA;
97*8975f5c5SAndroid Build Coastguard Worker }
98*8975f5c5SAndroid Build Coastguard Worker
IsPowerVR(uint32_t vendorId)99*8975f5c5SAndroid Build Coastguard Worker inline bool IsPowerVR(uint32_t vendorId)
100*8975f5c5SAndroid Build Coastguard Worker {
101*8975f5c5SAndroid Build Coastguard Worker return vendorId == VENDOR_ID_POWERVR;
102*8975f5c5SAndroid Build Coastguard Worker }
103*8975f5c5SAndroid Build Coastguard Worker
IsQualcomm(uint32_t vendorId)104*8975f5c5SAndroid Build Coastguard Worker inline bool IsQualcomm(uint32_t vendorId)
105*8975f5c5SAndroid Build Coastguard Worker {
106*8975f5c5SAndroid Build Coastguard Worker return vendorId == VENDOR_ID_QUALCOMM;
107*8975f5c5SAndroid Build Coastguard Worker }
108*8975f5c5SAndroid Build Coastguard Worker
IsSamsung(uint32_t vendorId)109*8975f5c5SAndroid Build Coastguard Worker inline bool IsSamsung(uint32_t vendorId)
110*8975f5c5SAndroid Build Coastguard Worker {
111*8975f5c5SAndroid Build Coastguard Worker return vendorId == VENDOR_ID_SAMSUNG;
112*8975f5c5SAndroid Build Coastguard Worker }
113*8975f5c5SAndroid Build Coastguard Worker
IsVivante(uint32_t vendorId)114*8975f5c5SAndroid Build Coastguard Worker inline bool IsVivante(uint32_t vendorId)
115*8975f5c5SAndroid Build Coastguard Worker {
116*8975f5c5SAndroid Build Coastguard Worker return vendorId == VENDOR_ID_VIVANTE;
117*8975f5c5SAndroid Build Coastguard Worker }
118*8975f5c5SAndroid Build Coastguard Worker
IsVMWare(uint32_t vendorId)119*8975f5c5SAndroid Build Coastguard Worker inline bool IsVMWare(uint32_t vendorId)
120*8975f5c5SAndroid Build Coastguard Worker {
121*8975f5c5SAndroid Build Coastguard Worker return vendorId == VENDOR_ID_VMWARE;
122*8975f5c5SAndroid Build Coastguard Worker }
123*8975f5c5SAndroid Build Coastguard Worker
IsVirtIO(uint32_t vendorId)124*8975f5c5SAndroid Build Coastguard Worker inline bool IsVirtIO(uint32_t vendorId)
125*8975f5c5SAndroid Build Coastguard Worker {
126*8975f5c5SAndroid Build Coastguard Worker return vendorId == VENDOR_ID_VIRTIO;
127*8975f5c5SAndroid Build Coastguard Worker }
128*8975f5c5SAndroid Build Coastguard Worker
IsNexus5X(uint32_t vendorId,uint32_t deviceId)129*8975f5c5SAndroid Build Coastguard Worker inline bool IsNexus5X(uint32_t vendorId, uint32_t deviceId)
130*8975f5c5SAndroid Build Coastguard Worker {
131*8975f5c5SAndroid Build Coastguard Worker return IsQualcomm(vendorId) && deviceId == ANDROID_DEVICE_ID_NEXUS5X;
132*8975f5c5SAndroid Build Coastguard Worker }
133*8975f5c5SAndroid Build Coastguard Worker
IsPixel1XL(uint32_t vendorId,uint32_t deviceId)134*8975f5c5SAndroid Build Coastguard Worker inline bool IsPixel1XL(uint32_t vendorId, uint32_t deviceId)
135*8975f5c5SAndroid Build Coastguard Worker {
136*8975f5c5SAndroid Build Coastguard Worker return IsQualcomm(vendorId) && deviceId == ANDROID_DEVICE_ID_PIXEL1XL;
137*8975f5c5SAndroid Build Coastguard Worker }
138*8975f5c5SAndroid Build Coastguard Worker
IsPixel2(uint32_t vendorId,uint32_t deviceId)139*8975f5c5SAndroid Build Coastguard Worker inline bool IsPixel2(uint32_t vendorId, uint32_t deviceId)
140*8975f5c5SAndroid Build Coastguard Worker {
141*8975f5c5SAndroid Build Coastguard Worker return IsQualcomm(vendorId) && deviceId == ANDROID_DEVICE_ID_PIXEL2;
142*8975f5c5SAndroid Build Coastguard Worker }
143*8975f5c5SAndroid Build Coastguard Worker
IsPixel4(uint32_t vendorId,uint32_t deviceId)144*8975f5c5SAndroid Build Coastguard Worker inline bool IsPixel4(uint32_t vendorId, uint32_t deviceId)
145*8975f5c5SAndroid Build Coastguard Worker {
146*8975f5c5SAndroid Build Coastguard Worker return IsQualcomm(vendorId) && deviceId == ANDROID_DEVICE_ID_PIXEL4;
147*8975f5c5SAndroid Build Coastguard Worker }
148*8975f5c5SAndroid Build Coastguard Worker
IsGalaxyA23(uint32_t vendorId,uint32_t deviceId)149*8975f5c5SAndroid Build Coastguard Worker inline bool IsGalaxyA23(uint32_t vendorId, uint32_t deviceId)
150*8975f5c5SAndroid Build Coastguard Worker {
151*8975f5c5SAndroid Build Coastguard Worker return IsQualcomm(vendorId) && deviceId == ANDROID_DEVICE_ID_GALAXYA23;
152*8975f5c5SAndroid Build Coastguard Worker }
153*8975f5c5SAndroid Build Coastguard Worker
IsGalaxyS23(uint32_t vendorId,uint32_t deviceId)154*8975f5c5SAndroid Build Coastguard Worker inline bool IsGalaxyS23(uint32_t vendorId, uint32_t deviceId)
155*8975f5c5SAndroid Build Coastguard Worker {
156*8975f5c5SAndroid Build Coastguard Worker return IsQualcomm(vendorId) && deviceId == ANDROID_DEVICE_ID_GALAXYS23;
157*8975f5c5SAndroid Build Coastguard Worker }
158*8975f5c5SAndroid Build Coastguard Worker
IsSwiftshader(uint32_t vendorId,uint32_t deviceId)159*8975f5c5SAndroid Build Coastguard Worker inline bool IsSwiftshader(uint32_t vendorId, uint32_t deviceId)
160*8975f5c5SAndroid Build Coastguard Worker {
161*8975f5c5SAndroid Build Coastguard Worker return IsGoogle(vendorId) && deviceId == ANDROID_DEVICE_ID_SWIFTSHADER;
162*8975f5c5SAndroid Build Coastguard Worker }
163*8975f5c5SAndroid Build Coastguard Worker
164*8975f5c5SAndroid Build Coastguard Worker std::string GetVendorString(uint32_t vendorId);
165*8975f5c5SAndroid Build Coastguard Worker
166*8975f5c5SAndroid Build Coastguard Worker // For Linux, Intel graphics driver version is the Mesa version. The version number has three
167*8975f5c5SAndroid Build Coastguard Worker // fields: major revision, minor revision and release number.
168*8975f5c5SAndroid Build Coastguard Worker // For Windows, The version number includes 3rd and 4th fields. Please refer the details at
169*8975f5c5SAndroid Build Coastguard Worker // http://www.intel.com/content/www/us/en/support/graphics-drivers/000005654.html.
170*8975f5c5SAndroid Build Coastguard Worker // Current implementation only supports Windows.
171*8975f5c5SAndroid Build Coastguard Worker class IntelDriverVersion
172*8975f5c5SAndroid Build Coastguard Worker {
173*8975f5c5SAndroid Build Coastguard Worker public:
174*8975f5c5SAndroid Build Coastguard Worker IntelDriverVersion(uint32_t buildNumber);
175*8975f5c5SAndroid Build Coastguard Worker IntelDriverVersion(uint32_t majorVersion, uint32_t minorVersion);
176*8975f5c5SAndroid Build Coastguard Worker bool operator==(const IntelDriverVersion &) const;
177*8975f5c5SAndroid Build Coastguard Worker bool operator!=(const IntelDriverVersion &) const;
178*8975f5c5SAndroid Build Coastguard Worker bool operator<(const IntelDriverVersion &) const;
179*8975f5c5SAndroid Build Coastguard Worker bool operator>=(const IntelDriverVersion &) const;
180*8975f5c5SAndroid Build Coastguard Worker
181*8975f5c5SAndroid Build Coastguard Worker private:
182*8975f5c5SAndroid Build Coastguard Worker uint32_t mBuildNumber;
183*8975f5c5SAndroid Build Coastguard Worker };
184*8975f5c5SAndroid Build Coastguard Worker
185*8975f5c5SAndroid Build Coastguard Worker IntelDriverVersion ParseIntelWindowsDriverVersion(uint32_t driverVersion);
186*8975f5c5SAndroid Build Coastguard Worker
187*8975f5c5SAndroid Build Coastguard Worker bool IsSandyBridge(uint32_t DeviceId);
188*8975f5c5SAndroid Build Coastguard Worker bool IsIvyBridge(uint32_t DeviceId);
189*8975f5c5SAndroid Build Coastguard Worker bool IsHaswell(uint32_t DeviceId);
190*8975f5c5SAndroid Build Coastguard Worker bool IsBroadwell(uint32_t DeviceId);
191*8975f5c5SAndroid Build Coastguard Worker bool IsCherryView(uint32_t DeviceId);
192*8975f5c5SAndroid Build Coastguard Worker bool IsSkylake(uint32_t DeviceId);
193*8975f5c5SAndroid Build Coastguard Worker bool IsBroxton(uint32_t DeviceId);
194*8975f5c5SAndroid Build Coastguard Worker bool IsKabyLake(uint32_t DeviceId);
195*8975f5c5SAndroid Build Coastguard Worker bool IsGeminiLake(uint32_t DeviceId);
196*8975f5c5SAndroid Build Coastguard Worker bool IsCoffeeLake(uint32_t DeviceId);
197*8975f5c5SAndroid Build Coastguard Worker bool IsMeteorLake(uint32_t DeviceId);
198*8975f5c5SAndroid Build Coastguard Worker bool Is9thGenIntel(uint32_t DeviceId);
199*8975f5c5SAndroid Build Coastguard Worker bool Is11thGenIntel(uint32_t DeviceId);
200*8975f5c5SAndroid Build Coastguard Worker bool Is12thGenIntel(uint32_t DeviceId);
201*8975f5c5SAndroid Build Coastguard Worker
202*8975f5c5SAndroid Build Coastguard Worker using ARMDriverVersion = angle::VersionTriple;
203*8975f5c5SAndroid Build Coastguard Worker ARMDriverVersion ParseARMVulkanDriverVersion(uint32_t driverVersion);
204*8975f5c5SAndroid Build Coastguard Worker
205*8975f5c5SAndroid Build Coastguard Worker using QualcommDriverVersion = angle::VersionTriple;
206*8975f5c5SAndroid Build Coastguard Worker QualcommDriverVersion ParseQualcommVulkanDriverVersion(uint32_t driverVersion);
207*8975f5c5SAndroid Build Coastguard Worker
208*8975f5c5SAndroid Build Coastguard Worker // Platform helpers
209*8975f5c5SAndroid Build Coastguard Worker using angle::IsAndroid;
210*8975f5c5SAndroid Build Coastguard Worker using angle::IsApple;
211*8975f5c5SAndroid Build Coastguard Worker using angle::IsChromeOS;
212*8975f5c5SAndroid Build Coastguard Worker using angle::IsFuchsia;
213*8975f5c5SAndroid Build Coastguard Worker using angle::IsIOS;
214*8975f5c5SAndroid Build Coastguard Worker using angle::IsLinux;
215*8975f5c5SAndroid Build Coastguard Worker using angle::IsMac;
216*8975f5c5SAndroid Build Coastguard Worker using angle::IsWindows;
217*8975f5c5SAndroid Build Coastguard Worker using angle::IsWindows10OrLater;
218*8975f5c5SAndroid Build Coastguard Worker using angle::IsWindows8OrLater;
219*8975f5c5SAndroid Build Coastguard Worker using angle::IsWindowsVistaOrLater;
220*8975f5c5SAndroid Build Coastguard Worker
221*8975f5c5SAndroid Build Coastguard Worker bool IsWayland();
222*8975f5c5SAndroid Build Coastguard Worker
223*8975f5c5SAndroid Build Coastguard Worker using OSVersion = angle::VersionTriple;
224*8975f5c5SAndroid Build Coastguard Worker
225*8975f5c5SAndroid Build Coastguard Worker OSVersion GetMacOSVersion();
226*8975f5c5SAndroid Build Coastguard Worker
227*8975f5c5SAndroid Build Coastguard Worker OSVersion GetiOSVersion();
228*8975f5c5SAndroid Build Coastguard Worker
229*8975f5c5SAndroid Build Coastguard Worker OSVersion GetLinuxOSVersion();
230*8975f5c5SAndroid Build Coastguard Worker
231*8975f5c5SAndroid Build Coastguard Worker int GetAndroidSDKVersion();
232*8975f5c5SAndroid Build Coastguard Worker
233*8975f5c5SAndroid Build Coastguard Worker } // namespace rx
234*8975f5c5SAndroid Build Coastguard Worker #endif // LIBANGLE_RENDERER_DRIVER_UTILS_H_
235