xref: /aosp_15_r20/external/angle/src/tests/test_expectations/GPUTestConfig.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker 
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2019 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 #include "GPUTestConfig.h"
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker #include <stdint.h>
10*8975f5c5SAndroid Build Coastguard Worker #include <iostream>
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker #include "common/angleutils.h"
13*8975f5c5SAndroid Build Coastguard Worker #include "common/debug.h"
14*8975f5c5SAndroid Build Coastguard Worker #include "common/platform_helpers.h"
15*8975f5c5SAndroid Build Coastguard Worker #include "common/string_utils.h"
16*8975f5c5SAndroid Build Coastguard Worker #include "gpu_info_util/SystemInfo.h"
17*8975f5c5SAndroid Build Coastguard Worker 
18*8975f5c5SAndroid Build Coastguard Worker #if defined(ANGLE_PLATFORM_APPLE)
19*8975f5c5SAndroid Build Coastguard Worker #    include "GPUTestConfig_mac.h"
20*8975f5c5SAndroid Build Coastguard Worker #endif
21*8975f5c5SAndroid Build Coastguard Worker 
22*8975f5c5SAndroid Build Coastguard Worker namespace angle
23*8975f5c5SAndroid Build Coastguard Worker {
24*8975f5c5SAndroid Build Coastguard Worker 
25*8975f5c5SAndroid Build Coastguard Worker namespace
26*8975f5c5SAndroid Build Coastguard Worker {
27*8975f5c5SAndroid Build Coastguard Worker 
28*8975f5c5SAndroid Build Coastguard Worker #if defined(ANGLE_PLATFORM_MACOS)
29*8975f5c5SAndroid Build Coastguard Worker // Generic function call to get the OS version information from any platform
30*8975f5c5SAndroid Build Coastguard Worker // defined below. This function will also cache the OS version info in static
31*8975f5c5SAndroid Build Coastguard Worker // variables.
OperatingSystemVersionNumbers(int32_t * majorVersion,int32_t * minorVersion)32*8975f5c5SAndroid Build Coastguard Worker inline bool OperatingSystemVersionNumbers(int32_t *majorVersion, int32_t *minorVersion)
33*8975f5c5SAndroid Build Coastguard Worker {
34*8975f5c5SAndroid Build Coastguard Worker     static int32_t sSavedMajorVersion = -1;
35*8975f5c5SAndroid Build Coastguard Worker     static int32_t sSavedMinorVersion = -1;
36*8975f5c5SAndroid Build Coastguard Worker     bool ret                          = false;
37*8975f5c5SAndroid Build Coastguard Worker     if (sSavedMajorVersion == -1 || sSavedMinorVersion == -1)
38*8975f5c5SAndroid Build Coastguard Worker     {
39*8975f5c5SAndroid Build Coastguard Worker         GetOperatingSystemVersionNumbers(&sSavedMajorVersion, &sSavedMinorVersion);
40*8975f5c5SAndroid Build Coastguard Worker         *majorVersion = sSavedMajorVersion;
41*8975f5c5SAndroid Build Coastguard Worker         *minorVersion = sSavedMinorVersion;
42*8975f5c5SAndroid Build Coastguard Worker         ret           = true;
43*8975f5c5SAndroid Build Coastguard Worker     }
44*8975f5c5SAndroid Build Coastguard Worker     else
45*8975f5c5SAndroid Build Coastguard Worker     {
46*8975f5c5SAndroid Build Coastguard Worker         ret = true;
47*8975f5c5SAndroid Build Coastguard Worker     }
48*8975f5c5SAndroid Build Coastguard Worker     *majorVersion = sSavedMajorVersion;
49*8975f5c5SAndroid Build Coastguard Worker     *minorVersion = sSavedMinorVersion;
50*8975f5c5SAndroid Build Coastguard Worker     return ret;
51*8975f5c5SAndroid Build Coastguard Worker }
52*8975f5c5SAndroid Build Coastguard Worker #endif
53*8975f5c5SAndroid Build Coastguard Worker 
54*8975f5c5SAndroid Build Coastguard Worker // Check if the OS is a specific major and minor version of OSX
IsMacVersion(const int32_t majorVersion,const int32_t minorVersion)55*8975f5c5SAndroid Build Coastguard Worker inline bool IsMacVersion(const int32_t majorVersion, const int32_t minorVersion)
56*8975f5c5SAndroid Build Coastguard Worker {
57*8975f5c5SAndroid Build Coastguard Worker #if defined(ANGLE_PLATFORM_MACOS)
58*8975f5c5SAndroid Build Coastguard Worker     int32_t currentMajorVersion = 0;
59*8975f5c5SAndroid Build Coastguard Worker     int32_t currentMinorVersion = 0;
60*8975f5c5SAndroid Build Coastguard Worker     if (OperatingSystemVersionNumbers(&currentMajorVersion, &currentMinorVersion))
61*8975f5c5SAndroid Build Coastguard Worker     {
62*8975f5c5SAndroid Build Coastguard Worker         if (currentMajorVersion == majorVersion && currentMinorVersion == minorVersion)
63*8975f5c5SAndroid Build Coastguard Worker         {
64*8975f5c5SAndroid Build Coastguard Worker             return true;
65*8975f5c5SAndroid Build Coastguard Worker         }
66*8975f5c5SAndroid Build Coastguard Worker     }
67*8975f5c5SAndroid Build Coastguard Worker #endif
68*8975f5c5SAndroid Build Coastguard Worker     return false;
69*8975f5c5SAndroid Build Coastguard Worker }
70*8975f5c5SAndroid Build Coastguard Worker 
71*8975f5c5SAndroid Build Coastguard Worker // Check if the OS is OSX Leopard
IsMacLeopard()72*8975f5c5SAndroid Build Coastguard Worker inline bool IsMacLeopard()
73*8975f5c5SAndroid Build Coastguard Worker {
74*8975f5c5SAndroid Build Coastguard Worker     if (IsMacVersion(10, 5))
75*8975f5c5SAndroid Build Coastguard Worker     {
76*8975f5c5SAndroid Build Coastguard Worker         return true;
77*8975f5c5SAndroid Build Coastguard Worker     }
78*8975f5c5SAndroid Build Coastguard Worker     return false;
79*8975f5c5SAndroid Build Coastguard Worker }
80*8975f5c5SAndroid Build Coastguard Worker 
81*8975f5c5SAndroid Build Coastguard Worker // Check if the OS is OSX Snow Leopard
IsMacSnowLeopard()82*8975f5c5SAndroid Build Coastguard Worker inline bool IsMacSnowLeopard()
83*8975f5c5SAndroid Build Coastguard Worker {
84*8975f5c5SAndroid Build Coastguard Worker     if (IsMacVersion(10, 6))
85*8975f5c5SAndroid Build Coastguard Worker     {
86*8975f5c5SAndroid Build Coastguard Worker         return true;
87*8975f5c5SAndroid Build Coastguard Worker     }
88*8975f5c5SAndroid Build Coastguard Worker     return false;
89*8975f5c5SAndroid Build Coastguard Worker }
90*8975f5c5SAndroid Build Coastguard Worker 
91*8975f5c5SAndroid Build Coastguard Worker // Check if the OS is OSX Lion
IsMacLion()92*8975f5c5SAndroid Build Coastguard Worker inline bool IsMacLion()
93*8975f5c5SAndroid Build Coastguard Worker {
94*8975f5c5SAndroid Build Coastguard Worker     if (IsMacVersion(10, 7))
95*8975f5c5SAndroid Build Coastguard Worker     {
96*8975f5c5SAndroid Build Coastguard Worker         return true;
97*8975f5c5SAndroid Build Coastguard Worker     }
98*8975f5c5SAndroid Build Coastguard Worker     return false;
99*8975f5c5SAndroid Build Coastguard Worker }
100*8975f5c5SAndroid Build Coastguard Worker 
101*8975f5c5SAndroid Build Coastguard Worker // Check if the OS is OSX Mountain Lion
IsMacMountainLion()102*8975f5c5SAndroid Build Coastguard Worker inline bool IsMacMountainLion()
103*8975f5c5SAndroid Build Coastguard Worker {
104*8975f5c5SAndroid Build Coastguard Worker     if (IsMacVersion(10, 8))
105*8975f5c5SAndroid Build Coastguard Worker     {
106*8975f5c5SAndroid Build Coastguard Worker         return true;
107*8975f5c5SAndroid Build Coastguard Worker     }
108*8975f5c5SAndroid Build Coastguard Worker     return false;
109*8975f5c5SAndroid Build Coastguard Worker }
110*8975f5c5SAndroid Build Coastguard Worker 
111*8975f5c5SAndroid Build Coastguard Worker // Check if the OS is OSX Mavericks
IsMacMavericks()112*8975f5c5SAndroid Build Coastguard Worker inline bool IsMacMavericks()
113*8975f5c5SAndroid Build Coastguard Worker {
114*8975f5c5SAndroid Build Coastguard Worker     if (IsMacVersion(10, 9))
115*8975f5c5SAndroid Build Coastguard Worker     {
116*8975f5c5SAndroid Build Coastguard Worker         return true;
117*8975f5c5SAndroid Build Coastguard Worker     }
118*8975f5c5SAndroid Build Coastguard Worker     return false;
119*8975f5c5SAndroid Build Coastguard Worker }
120*8975f5c5SAndroid Build Coastguard Worker 
121*8975f5c5SAndroid Build Coastguard Worker // Check if the OS is OSX Yosemite
IsMacYosemite()122*8975f5c5SAndroid Build Coastguard Worker inline bool IsMacYosemite()
123*8975f5c5SAndroid Build Coastguard Worker {
124*8975f5c5SAndroid Build Coastguard Worker     if (IsMacVersion(10, 10))
125*8975f5c5SAndroid Build Coastguard Worker     {
126*8975f5c5SAndroid Build Coastguard Worker         return true;
127*8975f5c5SAndroid Build Coastguard Worker     }
128*8975f5c5SAndroid Build Coastguard Worker     return false;
129*8975f5c5SAndroid Build Coastguard Worker }
130*8975f5c5SAndroid Build Coastguard Worker 
131*8975f5c5SAndroid Build Coastguard Worker // Check if the OS is OSX El Capitan
IsMacElCapitan()132*8975f5c5SAndroid Build Coastguard Worker inline bool IsMacElCapitan()
133*8975f5c5SAndroid Build Coastguard Worker {
134*8975f5c5SAndroid Build Coastguard Worker     if (IsMacVersion(10, 11))
135*8975f5c5SAndroid Build Coastguard Worker     {
136*8975f5c5SAndroid Build Coastguard Worker         return true;
137*8975f5c5SAndroid Build Coastguard Worker     }
138*8975f5c5SAndroid Build Coastguard Worker     return false;
139*8975f5c5SAndroid Build Coastguard Worker }
140*8975f5c5SAndroid Build Coastguard Worker 
141*8975f5c5SAndroid Build Coastguard Worker // Check if the OS is OSX Sierra
IsMacSierra()142*8975f5c5SAndroid Build Coastguard Worker inline bool IsMacSierra()
143*8975f5c5SAndroid Build Coastguard Worker {
144*8975f5c5SAndroid Build Coastguard Worker     if (IsMacVersion(10, 12))
145*8975f5c5SAndroid Build Coastguard Worker     {
146*8975f5c5SAndroid Build Coastguard Worker         return true;
147*8975f5c5SAndroid Build Coastguard Worker     }
148*8975f5c5SAndroid Build Coastguard Worker     return false;
149*8975f5c5SAndroid Build Coastguard Worker }
150*8975f5c5SAndroid Build Coastguard Worker 
151*8975f5c5SAndroid Build Coastguard Worker // Check if the OS is OSX High Sierra
IsMacHighSierra()152*8975f5c5SAndroid Build Coastguard Worker inline bool IsMacHighSierra()
153*8975f5c5SAndroid Build Coastguard Worker {
154*8975f5c5SAndroid Build Coastguard Worker     if (IsMacVersion(10, 13))
155*8975f5c5SAndroid Build Coastguard Worker     {
156*8975f5c5SAndroid Build Coastguard Worker         return true;
157*8975f5c5SAndroid Build Coastguard Worker     }
158*8975f5c5SAndroid Build Coastguard Worker     return false;
159*8975f5c5SAndroid Build Coastguard Worker }
160*8975f5c5SAndroid Build Coastguard Worker 
161*8975f5c5SAndroid Build Coastguard Worker // Check if the OS is OSX Mojave
IsMacMojave()162*8975f5c5SAndroid Build Coastguard Worker inline bool IsMacMojave()
163*8975f5c5SAndroid Build Coastguard Worker {
164*8975f5c5SAndroid Build Coastguard Worker     if (IsMacVersion(10, 14))
165*8975f5c5SAndroid Build Coastguard Worker     {
166*8975f5c5SAndroid Build Coastguard Worker         return true;
167*8975f5c5SAndroid Build Coastguard Worker     }
168*8975f5c5SAndroid Build Coastguard Worker     return false;
169*8975f5c5SAndroid Build Coastguard Worker }
170*8975f5c5SAndroid Build Coastguard Worker 
171*8975f5c5SAndroid Build Coastguard Worker // Generic function call to populate the SystemInfo struct. This function will
172*8975f5c5SAndroid Build Coastguard Worker // also cache the SystemInfo struct for future calls. Returns false if the
173*8975f5c5SAndroid Build Coastguard Worker // struct was not fully populated. Guaranteed to set sysInfo to a valid pointer
GetGPUTestSystemInfo(SystemInfo ** sysInfo)174*8975f5c5SAndroid Build Coastguard Worker inline bool GetGPUTestSystemInfo(SystemInfo **sysInfo)
175*8975f5c5SAndroid Build Coastguard Worker {
176*8975f5c5SAndroid Build Coastguard Worker     static SystemInfo *sSystemInfo = nullptr;
177*8975f5c5SAndroid Build Coastguard Worker     static bool sPopulated         = false;
178*8975f5c5SAndroid Build Coastguard Worker     if (sSystemInfo == nullptr)
179*8975f5c5SAndroid Build Coastguard Worker     {
180*8975f5c5SAndroid Build Coastguard Worker         sSystemInfo = new SystemInfo;
181*8975f5c5SAndroid Build Coastguard Worker         if (!GetSystemInfo(sSystemInfo))
182*8975f5c5SAndroid Build Coastguard Worker         {
183*8975f5c5SAndroid Build Coastguard Worker             std::cout << "Error populating SystemInfo." << std::endl;
184*8975f5c5SAndroid Build Coastguard Worker         }
185*8975f5c5SAndroid Build Coastguard Worker         else
186*8975f5c5SAndroid Build Coastguard Worker         {
187*8975f5c5SAndroid Build Coastguard Worker             // On dual-GPU Macs we want the active GPU to always appear to be the
188*8975f5c5SAndroid Build Coastguard Worker             // high-performance GPU for tests.
189*8975f5c5SAndroid Build Coastguard Worker             // We can call the generic GPU info collector which selects the
190*8975f5c5SAndroid Build Coastguard Worker             // non-Intel GPU as the active one on dual-GPU machines.
191*8975f5c5SAndroid Build Coastguard Worker             // See https://anglebug.com/40096612.
192*8975f5c5SAndroid Build Coastguard Worker             if (IsMac())
193*8975f5c5SAndroid Build Coastguard Worker             {
194*8975f5c5SAndroid Build Coastguard Worker                 GetDualGPUInfo(sSystemInfo);
195*8975f5c5SAndroid Build Coastguard Worker             }
196*8975f5c5SAndroid Build Coastguard Worker             sPopulated = true;
197*8975f5c5SAndroid Build Coastguard Worker         }
198*8975f5c5SAndroid Build Coastguard Worker     }
199*8975f5c5SAndroid Build Coastguard Worker     *sysInfo = sSystemInfo;
200*8975f5c5SAndroid Build Coastguard Worker     ASSERT(*sysInfo != nullptr);
201*8975f5c5SAndroid Build Coastguard Worker     return sPopulated;
202*8975f5c5SAndroid Build Coastguard Worker }
203*8975f5c5SAndroid Build Coastguard Worker 
204*8975f5c5SAndroid Build Coastguard Worker // Get the active GPUDeviceInfo from the SystemInfo struct.
205*8975f5c5SAndroid Build Coastguard Worker // Returns false if devInfo is not guaranteed to be set to the active device.
GetActiveGPU(GPUDeviceInfo ** devInfo)206*8975f5c5SAndroid Build Coastguard Worker inline bool GetActiveGPU(GPUDeviceInfo **devInfo)
207*8975f5c5SAndroid Build Coastguard Worker {
208*8975f5c5SAndroid Build Coastguard Worker     SystemInfo *systemInfo = nullptr;
209*8975f5c5SAndroid Build Coastguard Worker     GetGPUTestSystemInfo(&systemInfo);
210*8975f5c5SAndroid Build Coastguard Worker     if (systemInfo->gpus.size() <= 0)
211*8975f5c5SAndroid Build Coastguard Worker     {
212*8975f5c5SAndroid Build Coastguard Worker         return false;
213*8975f5c5SAndroid Build Coastguard Worker     }
214*8975f5c5SAndroid Build Coastguard Worker     uint32_t index = systemInfo->activeGPUIndex;
215*8975f5c5SAndroid Build Coastguard Worker     ASSERT(index < systemInfo->gpus.size());
216*8975f5c5SAndroid Build Coastguard Worker     *devInfo = &(systemInfo->gpus[index]);
217*8975f5c5SAndroid Build Coastguard Worker     return true;
218*8975f5c5SAndroid Build Coastguard Worker }
219*8975f5c5SAndroid Build Coastguard Worker 
220*8975f5c5SAndroid Build Coastguard Worker // Get the vendor ID of the active GPU from the SystemInfo struct.
221*8975f5c5SAndroid Build Coastguard Worker // Returns 0 if there is an error.
GetActiveGPUVendorID()222*8975f5c5SAndroid Build Coastguard Worker inline VendorID GetActiveGPUVendorID()
223*8975f5c5SAndroid Build Coastguard Worker {
224*8975f5c5SAndroid Build Coastguard Worker     GPUDeviceInfo *activeGPU = nullptr;
225*8975f5c5SAndroid Build Coastguard Worker     if (GetActiveGPU(&activeGPU))
226*8975f5c5SAndroid Build Coastguard Worker     {
227*8975f5c5SAndroid Build Coastguard Worker         return activeGPU->vendorId;
228*8975f5c5SAndroid Build Coastguard Worker     }
229*8975f5c5SAndroid Build Coastguard Worker     else
230*8975f5c5SAndroid Build Coastguard Worker     {
231*8975f5c5SAndroid Build Coastguard Worker         return static_cast<VendorID>(0);
232*8975f5c5SAndroid Build Coastguard Worker     }
233*8975f5c5SAndroid Build Coastguard Worker }
234*8975f5c5SAndroid Build Coastguard Worker 
235*8975f5c5SAndroid Build Coastguard Worker // Get the device ID of the active GPU from the SystemInfo struct.
236*8975f5c5SAndroid Build Coastguard Worker // Returns 0 if there is an error.
GetActiveGPUDeviceID()237*8975f5c5SAndroid Build Coastguard Worker inline DeviceID GetActiveGPUDeviceID()
238*8975f5c5SAndroid Build Coastguard Worker {
239*8975f5c5SAndroid Build Coastguard Worker     GPUDeviceInfo *activeGPU = nullptr;
240*8975f5c5SAndroid Build Coastguard Worker     if (GetActiveGPU(&activeGPU))
241*8975f5c5SAndroid Build Coastguard Worker     {
242*8975f5c5SAndroid Build Coastguard Worker         return activeGPU->deviceId;
243*8975f5c5SAndroid Build Coastguard Worker     }
244*8975f5c5SAndroid Build Coastguard Worker     else
245*8975f5c5SAndroid Build Coastguard Worker     {
246*8975f5c5SAndroid Build Coastguard Worker         return static_cast<DeviceID>(0);
247*8975f5c5SAndroid Build Coastguard Worker     }
248*8975f5c5SAndroid Build Coastguard Worker }
249*8975f5c5SAndroid Build Coastguard Worker 
250*8975f5c5SAndroid Build Coastguard Worker // Check whether the active GPU is NVIDIA.
IsNVIDIA()251*8975f5c5SAndroid Build Coastguard Worker inline bool IsNVIDIA()
252*8975f5c5SAndroid Build Coastguard Worker {
253*8975f5c5SAndroid Build Coastguard Worker     return angle::IsNVIDIA(GetActiveGPUVendorID());
254*8975f5c5SAndroid Build Coastguard Worker }
255*8975f5c5SAndroid Build Coastguard Worker 
256*8975f5c5SAndroid Build Coastguard Worker // Check whether the active GPU is AMD.
IsAMD()257*8975f5c5SAndroid Build Coastguard Worker inline bool IsAMD()
258*8975f5c5SAndroid Build Coastguard Worker {
259*8975f5c5SAndroid Build Coastguard Worker     return angle::IsAMD(GetActiveGPUVendorID());
260*8975f5c5SAndroid Build Coastguard Worker }
261*8975f5c5SAndroid Build Coastguard Worker 
262*8975f5c5SAndroid Build Coastguard Worker // Check whether the active GPU is Intel.
IsIntel()263*8975f5c5SAndroid Build Coastguard Worker inline bool IsIntel()
264*8975f5c5SAndroid Build Coastguard Worker {
265*8975f5c5SAndroid Build Coastguard Worker     return angle::IsIntel(GetActiveGPUVendorID());
266*8975f5c5SAndroid Build Coastguard Worker }
267*8975f5c5SAndroid Build Coastguard Worker 
268*8975f5c5SAndroid Build Coastguard Worker // Check whether the active GPU is VMWare.
IsVMWare()269*8975f5c5SAndroid Build Coastguard Worker inline bool IsVMWare()
270*8975f5c5SAndroid Build Coastguard Worker {
271*8975f5c5SAndroid Build Coastguard Worker     return angle::IsVMWare(GetActiveGPUVendorID());
272*8975f5c5SAndroid Build Coastguard Worker }
273*8975f5c5SAndroid Build Coastguard Worker 
274*8975f5c5SAndroid Build Coastguard Worker // Check whether the active GPU is Apple.
IsAppleGPU()275*8975f5c5SAndroid Build Coastguard Worker inline bool IsAppleGPU()
276*8975f5c5SAndroid Build Coastguard Worker {
277*8975f5c5SAndroid Build Coastguard Worker     return angle::IsAppleGPU(GetActiveGPUVendorID());
278*8975f5c5SAndroid Build Coastguard Worker }
279*8975f5c5SAndroid Build Coastguard Worker 
280*8975f5c5SAndroid Build Coastguard Worker // Check whether this is a debug build.
IsDebug()281*8975f5c5SAndroid Build Coastguard Worker inline bool IsDebug()
282*8975f5c5SAndroid Build Coastguard Worker {
283*8975f5c5SAndroid Build Coastguard Worker #if !defined(NDEBUG)
284*8975f5c5SAndroid Build Coastguard Worker     return true;
285*8975f5c5SAndroid Build Coastguard Worker #else
286*8975f5c5SAndroid Build Coastguard Worker     return false;
287*8975f5c5SAndroid Build Coastguard Worker #endif
288*8975f5c5SAndroid Build Coastguard Worker }
289*8975f5c5SAndroid Build Coastguard Worker 
290*8975f5c5SAndroid Build Coastguard Worker // Check whether this is a release build.
IsRelease()291*8975f5c5SAndroid Build Coastguard Worker inline bool IsRelease()
292*8975f5c5SAndroid Build Coastguard Worker {
293*8975f5c5SAndroid Build Coastguard Worker     return !IsDebug();
294*8975f5c5SAndroid Build Coastguard Worker }
295*8975f5c5SAndroid Build Coastguard Worker 
296*8975f5c5SAndroid Build Coastguard Worker // Check whether the system is a specific Android device based on the name.
IsAndroidDevice(const std::string & deviceName)297*8975f5c5SAndroid Build Coastguard Worker inline bool IsAndroidDevice(const std::string &deviceName)
298*8975f5c5SAndroid Build Coastguard Worker {
299*8975f5c5SAndroid Build Coastguard Worker     if (!IsAndroid())
300*8975f5c5SAndroid Build Coastguard Worker     {
301*8975f5c5SAndroid Build Coastguard Worker         return false;
302*8975f5c5SAndroid Build Coastguard Worker     }
303*8975f5c5SAndroid Build Coastguard Worker     SystemInfo *systemInfo = nullptr;
304*8975f5c5SAndroid Build Coastguard Worker     GetGPUTestSystemInfo(&systemInfo);
305*8975f5c5SAndroid Build Coastguard Worker     if (systemInfo->machineModelName == deviceName)
306*8975f5c5SAndroid Build Coastguard Worker     {
307*8975f5c5SAndroid Build Coastguard Worker         return true;
308*8975f5c5SAndroid Build Coastguard Worker     }
309*8975f5c5SAndroid Build Coastguard Worker     return false;
310*8975f5c5SAndroid Build Coastguard Worker }
311*8975f5c5SAndroid Build Coastguard Worker 
312*8975f5c5SAndroid Build Coastguard Worker // Check whether the system is a Nexus 5X device.
IsNexus5X()313*8975f5c5SAndroid Build Coastguard Worker inline bool IsNexus5X()
314*8975f5c5SAndroid Build Coastguard Worker {
315*8975f5c5SAndroid Build Coastguard Worker     return IsAndroidDevice("Nexus 5X");
316*8975f5c5SAndroid Build Coastguard Worker }
317*8975f5c5SAndroid Build Coastguard Worker 
318*8975f5c5SAndroid Build Coastguard Worker // Check whether the system is a Pixel 2 device.
IsPixel2()319*8975f5c5SAndroid Build Coastguard Worker inline bool IsPixel2()
320*8975f5c5SAndroid Build Coastguard Worker {
321*8975f5c5SAndroid Build Coastguard Worker     return IsAndroidDevice("Pixel 2");
322*8975f5c5SAndroid Build Coastguard Worker }
323*8975f5c5SAndroid Build Coastguard Worker 
324*8975f5c5SAndroid Build Coastguard Worker // Check whether the system is a Pixel 2XL device.
IsPixel2XL()325*8975f5c5SAndroid Build Coastguard Worker inline bool IsPixel2XL()
326*8975f5c5SAndroid Build Coastguard Worker {
327*8975f5c5SAndroid Build Coastguard Worker     return IsAndroidDevice("Pixel 2 XL");
328*8975f5c5SAndroid Build Coastguard Worker }
329*8975f5c5SAndroid Build Coastguard Worker 
IsPixel4()330*8975f5c5SAndroid Build Coastguard Worker inline bool IsPixel4()
331*8975f5c5SAndroid Build Coastguard Worker {
332*8975f5c5SAndroid Build Coastguard Worker     return IsAndroidDevice("Pixel 4");
333*8975f5c5SAndroid Build Coastguard Worker }
334*8975f5c5SAndroid Build Coastguard Worker 
IsPixel4XL()335*8975f5c5SAndroid Build Coastguard Worker inline bool IsPixel4XL()
336*8975f5c5SAndroid Build Coastguard Worker {
337*8975f5c5SAndroid Build Coastguard Worker     return IsAndroidDevice("Pixel 4 XL");
338*8975f5c5SAndroid Build Coastguard Worker }
339*8975f5c5SAndroid Build Coastguard Worker 
IsPixel6()340*8975f5c5SAndroid Build Coastguard Worker inline bool IsPixel6()
341*8975f5c5SAndroid Build Coastguard Worker {
342*8975f5c5SAndroid Build Coastguard Worker     return IsAndroidDevice("Pixel 6");
343*8975f5c5SAndroid Build Coastguard Worker }
344*8975f5c5SAndroid Build Coastguard Worker 
IsPixel7()345*8975f5c5SAndroid Build Coastguard Worker inline bool IsPixel7()
346*8975f5c5SAndroid Build Coastguard Worker {
347*8975f5c5SAndroid Build Coastguard Worker     return IsAndroidDevice("Pixel 7");
348*8975f5c5SAndroid Build Coastguard Worker }
349*8975f5c5SAndroid Build Coastguard Worker 
IsOppoFlipN2()350*8975f5c5SAndroid Build Coastguard Worker inline bool IsOppoFlipN2()
351*8975f5c5SAndroid Build Coastguard Worker {
352*8975f5c5SAndroid Build Coastguard Worker     return IsAndroidDevice("CPH2437");
353*8975f5c5SAndroid Build Coastguard Worker }
354*8975f5c5SAndroid Build Coastguard Worker 
IsMaliG710()355*8975f5c5SAndroid Build Coastguard Worker inline bool IsMaliG710()
356*8975f5c5SAndroid Build Coastguard Worker {
357*8975f5c5SAndroid Build Coastguard Worker     return IsPixel7() || IsOppoFlipN2();
358*8975f5c5SAndroid Build Coastguard Worker }
359*8975f5c5SAndroid Build Coastguard Worker 
IsGalaxyA23()360*8975f5c5SAndroid Build Coastguard Worker inline bool IsGalaxyA23()
361*8975f5c5SAndroid Build Coastguard Worker {
362*8975f5c5SAndroid Build Coastguard Worker     return IsAndroidDevice("SM-A236U1");
363*8975f5c5SAndroid Build Coastguard Worker }
364*8975f5c5SAndroid Build Coastguard Worker 
IsGalaxyA34()365*8975f5c5SAndroid Build Coastguard Worker inline bool IsGalaxyA34()
366*8975f5c5SAndroid Build Coastguard Worker {
367*8975f5c5SAndroid Build Coastguard Worker     return IsAndroidDevice("SM-A346M");
368*8975f5c5SAndroid Build Coastguard Worker }
369*8975f5c5SAndroid Build Coastguard Worker 
IsGalaxyA54()370*8975f5c5SAndroid Build Coastguard Worker inline bool IsGalaxyA54()
371*8975f5c5SAndroid Build Coastguard Worker {
372*8975f5c5SAndroid Build Coastguard Worker     return IsAndroidDevice("SM-A546E");
373*8975f5c5SAndroid Build Coastguard Worker }
374*8975f5c5SAndroid Build Coastguard Worker 
IsGalaxyS22()375*8975f5c5SAndroid Build Coastguard Worker inline bool IsGalaxyS22()
376*8975f5c5SAndroid Build Coastguard Worker {
377*8975f5c5SAndroid Build Coastguard Worker     return IsAndroidDevice("SM-S901B");
378*8975f5c5SAndroid Build Coastguard Worker }
379*8975f5c5SAndroid Build Coastguard Worker 
IsGalaxyS23()380*8975f5c5SAndroid Build Coastguard Worker inline bool IsGalaxyS23()
381*8975f5c5SAndroid Build Coastguard Worker {
382*8975f5c5SAndroid Build Coastguard Worker     return IsAndroidDevice("SM-S911U1");
383*8975f5c5SAndroid Build Coastguard Worker }
384*8975f5c5SAndroid Build Coastguard Worker 
IsGalaxyS24()385*8975f5c5SAndroid Build Coastguard Worker inline bool IsGalaxyS24()
386*8975f5c5SAndroid Build Coastguard Worker {
387*8975f5c5SAndroid Build Coastguard Worker     return IsAndroidDevice("SM-S926B");
388*8975f5c5SAndroid Build Coastguard Worker }
389*8975f5c5SAndroid Build Coastguard Worker 
IsGalaxyQualcomm()390*8975f5c5SAndroid Build Coastguard Worker inline bool IsGalaxyQualcomm()
391*8975f5c5SAndroid Build Coastguard Worker {
392*8975f5c5SAndroid Build Coastguard Worker     return IsGalaxyA23() || IsGalaxyS23();
393*8975f5c5SAndroid Build Coastguard Worker }
394*8975f5c5SAndroid Build Coastguard Worker 
IsFindX6()395*8975f5c5SAndroid Build Coastguard Worker inline bool IsFindX6()
396*8975f5c5SAndroid Build Coastguard Worker {
397*8975f5c5SAndroid Build Coastguard Worker     return IsAndroidDevice("PGFM10");
398*8975f5c5SAndroid Build Coastguard Worker }
399*8975f5c5SAndroid Build Coastguard Worker 
IsPineapple()400*8975f5c5SAndroid Build Coastguard Worker inline bool IsPineapple()
401*8975f5c5SAndroid Build Coastguard Worker {
402*8975f5c5SAndroid Build Coastguard Worker     return IsAndroidDevice("Pineapple for arm64");
403*8975f5c5SAndroid Build Coastguard Worker }
404*8975f5c5SAndroid Build Coastguard Worker 
405*8975f5c5SAndroid Build Coastguard Worker // Check whether the active GPU is a specific device based on the string device ID.
IsDeviceIdGPU(const std::string & gpuDeviceId)406*8975f5c5SAndroid Build Coastguard Worker inline bool IsDeviceIdGPU(const std::string &gpuDeviceId)
407*8975f5c5SAndroid Build Coastguard Worker {
408*8975f5c5SAndroid Build Coastguard Worker     uint32_t deviceId = 0;
409*8975f5c5SAndroid Build Coastguard Worker     if (!HexStringToUInt(gpuDeviceId, &deviceId) || deviceId == 0)
410*8975f5c5SAndroid Build Coastguard Worker     {
411*8975f5c5SAndroid Build Coastguard Worker         // PushErrorMessage(kErrorMessage[kErrorEntryWithGpuDeviceIdConflicts], line_number);
412*8975f5c5SAndroid Build Coastguard Worker         return false;
413*8975f5c5SAndroid Build Coastguard Worker     }
414*8975f5c5SAndroid Build Coastguard Worker     return (deviceId == GetActiveGPUDeviceID());
415*8975f5c5SAndroid Build Coastguard Worker }
416*8975f5c5SAndroid Build Coastguard Worker 
417*8975f5c5SAndroid Build Coastguard Worker // Check whether the active GPU is a NVIDIA Quadro P400
IsNVIDIAQuadroP400()418*8975f5c5SAndroid Build Coastguard Worker inline bool IsNVIDIAQuadroP400()
419*8975f5c5SAndroid Build Coastguard Worker {
420*8975f5c5SAndroid Build Coastguard Worker     return (IsNVIDIA() && IsDeviceIdGPU("0x1CB3"));
421*8975f5c5SAndroid Build Coastguard Worker }
422*8975f5c5SAndroid Build Coastguard Worker 
423*8975f5c5SAndroid Build Coastguard Worker // Check whether the active GPU is a NVIDIA GTX 1660
IsNVIDIAGTX1660()424*8975f5c5SAndroid Build Coastguard Worker inline bool IsNVIDIAGTX1660()
425*8975f5c5SAndroid Build Coastguard Worker {
426*8975f5c5SAndroid Build Coastguard Worker     return (IsNVIDIA() && IsDeviceIdGPU("0x2184"));
427*8975f5c5SAndroid Build Coastguard Worker }
428*8975f5c5SAndroid Build Coastguard Worker 
429*8975f5c5SAndroid Build Coastguard Worker // Check whether the backend API has been set to D3D9 in the constructor
IsD3D9(const GPUTestConfig::API & api)430*8975f5c5SAndroid Build Coastguard Worker inline bool IsD3D9(const GPUTestConfig::API &api)
431*8975f5c5SAndroid Build Coastguard Worker {
432*8975f5c5SAndroid Build Coastguard Worker     return (api == GPUTestConfig::kAPID3D9);
433*8975f5c5SAndroid Build Coastguard Worker }
434*8975f5c5SAndroid Build Coastguard Worker 
435*8975f5c5SAndroid Build Coastguard Worker // Check whether the backend API has been set to D3D11 in the constructor
IsD3D11(const GPUTestConfig::API & api)436*8975f5c5SAndroid Build Coastguard Worker inline bool IsD3D11(const GPUTestConfig::API &api)
437*8975f5c5SAndroid Build Coastguard Worker {
438*8975f5c5SAndroid Build Coastguard Worker     return (api == GPUTestConfig::kAPID3D11);
439*8975f5c5SAndroid Build Coastguard Worker }
440*8975f5c5SAndroid Build Coastguard Worker 
441*8975f5c5SAndroid Build Coastguard Worker // Check whether the backend API has been set to OpenGL in the constructor
IsGLDesktop(const GPUTestConfig::API & api)442*8975f5c5SAndroid Build Coastguard Worker inline bool IsGLDesktop(const GPUTestConfig::API &api)
443*8975f5c5SAndroid Build Coastguard Worker {
444*8975f5c5SAndroid Build Coastguard Worker     return (api == GPUTestConfig::kAPIGLDesktop);
445*8975f5c5SAndroid Build Coastguard Worker }
446*8975f5c5SAndroid Build Coastguard Worker 
447*8975f5c5SAndroid Build Coastguard Worker // Check whether the backend API has been set to OpenGLES in the constructor
IsGLES(const GPUTestConfig::API & api)448*8975f5c5SAndroid Build Coastguard Worker inline bool IsGLES(const GPUTestConfig::API &api)
449*8975f5c5SAndroid Build Coastguard Worker {
450*8975f5c5SAndroid Build Coastguard Worker     return (api == GPUTestConfig::kAPIGLES);
451*8975f5c5SAndroid Build Coastguard Worker }
452*8975f5c5SAndroid Build Coastguard Worker 
453*8975f5c5SAndroid Build Coastguard Worker // Check whether the backend API has been set to Vulkan in the constructor
IsVulkan(const GPUTestConfig::API & api)454*8975f5c5SAndroid Build Coastguard Worker inline bool IsVulkan(const GPUTestConfig::API &api)
455*8975f5c5SAndroid Build Coastguard Worker {
456*8975f5c5SAndroid Build Coastguard Worker     return (api == GPUTestConfig::kAPIVulkan) || (api == GPUTestConfig::kAPISwiftShader);
457*8975f5c5SAndroid Build Coastguard Worker }
458*8975f5c5SAndroid Build Coastguard Worker 
IsSwiftShader(const GPUTestConfig::API & api)459*8975f5c5SAndroid Build Coastguard Worker inline bool IsSwiftShader(const GPUTestConfig::API &api)
460*8975f5c5SAndroid Build Coastguard Worker {
461*8975f5c5SAndroid Build Coastguard Worker     return (api == GPUTestConfig::kAPISwiftShader);
462*8975f5c5SAndroid Build Coastguard Worker }
463*8975f5c5SAndroid Build Coastguard Worker 
464*8975f5c5SAndroid Build Coastguard Worker // Check whether the backend API has been set to Metal in the constructor
IsMetal(const GPUTestConfig::API & api)465*8975f5c5SAndroid Build Coastguard Worker inline bool IsMetal(const GPUTestConfig::API &api)
466*8975f5c5SAndroid Build Coastguard Worker {
467*8975f5c5SAndroid Build Coastguard Worker     return (api == GPUTestConfig::kAPIMetal);
468*8975f5c5SAndroid Build Coastguard Worker }
469*8975f5c5SAndroid Build Coastguard Worker 
IsWgpu(const GPUTestConfig::API & api)470*8975f5c5SAndroid Build Coastguard Worker inline bool IsWgpu(const GPUTestConfig::API &api)
471*8975f5c5SAndroid Build Coastguard Worker {
472*8975f5c5SAndroid Build Coastguard Worker     return (api == GPUTestConfig::kAPIWgpu);
473*8975f5c5SAndroid Build Coastguard Worker }
474*8975f5c5SAndroid Build Coastguard Worker 
475*8975f5c5SAndroid Build Coastguard Worker }  // anonymous namespace
476*8975f5c5SAndroid Build Coastguard Worker 
477*8975f5c5SAndroid Build Coastguard Worker // Load all conditions in the constructor since this data will not change during a test set.
GPUTestConfig()478*8975f5c5SAndroid Build Coastguard Worker GPUTestConfig::GPUTestConfig() : GPUTestConfig(false) {}
479*8975f5c5SAndroid Build Coastguard Worker 
GPUTestConfig(bool isSwiftShader)480*8975f5c5SAndroid Build Coastguard Worker GPUTestConfig::GPUTestConfig(bool isSwiftShader)
481*8975f5c5SAndroid Build Coastguard Worker {
482*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionNone]            = false;
483*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionWinXP]           = IsWindowsXP();
484*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionWinVista]        = IsWindowsVista();
485*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionWin7]            = IsWindows7();
486*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionWin8]            = IsWindows8();
487*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionWin10]           = IsWindows10OrLater();
488*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionWin]             = IsWindows();
489*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionMacLeopard]      = IsMacLeopard();
490*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionMacSnowLeopard]  = IsMacSnowLeopard();
491*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionMacLion]         = IsMacLion();
492*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionMacMountainLion] = IsMacMountainLion();
493*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionMacMavericks]    = IsMacMavericks();
494*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionMacYosemite]     = IsMacYosemite();
495*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionMacElCapitan]    = IsMacElCapitan();
496*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionMacSierra]       = IsMacSierra();
497*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionMacHighSierra]   = IsMacHighSierra();
498*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionMacMojave]       = IsMacMojave();
499*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionMac]             = IsMac();
500*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionIOS]             = IsIOS();
501*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionLinux]           = IsLinux();
502*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionAndroid]         = IsAndroid();
503*8975f5c5SAndroid Build Coastguard Worker     // HW vendors are irrelevant if we are running on SW
504*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionNVIDIA]      = !isSwiftShader && IsNVIDIA();
505*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionAMD]         = !isSwiftShader && IsAMD();
506*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionIntel]       = !isSwiftShader && IsIntel();
507*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionVMWare]      = !isSwiftShader && IsVMWare();
508*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionApple]       = !isSwiftShader && IsAppleGPU();
509*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionSwiftShader] = isSwiftShader;
510*8975f5c5SAndroid Build Coastguard Worker 
511*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionRelease] = IsRelease();
512*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionDebug]   = IsDebug();
513*8975f5c5SAndroid Build Coastguard Worker     // If no API provided, pass these conditions by default
514*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionD3D9]      = true;
515*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionD3D11]     = true;
516*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionGLDesktop] = true;
517*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionGLES]      = true;
518*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionVulkan]    = true;
519*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionMetal]     = true;
520*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionWgpu]      = true;
521*8975f5c5SAndroid Build Coastguard Worker 
522*8975f5c5SAndroid Build Coastguard Worker     // Devices are irrelevant if we are running on SW
523*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionNexus5X]          = !isSwiftShader && IsNexus5X();
524*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionPixel2OrXL]       = !isSwiftShader && (IsPixel2() || IsPixel2XL());
525*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionPixel4OrXL]       = !isSwiftShader && (IsPixel4() || IsPixel4XL());
526*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionPixel6]           = !isSwiftShader && (IsPixel6());
527*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionPixel7]           = !isSwiftShader && (IsPixel7());
528*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionFlipN2]           = !isSwiftShader && (IsOppoFlipN2());
529*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionMaliG710]         = !isSwiftShader && (IsMaliG710());
530*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionGalaxyA23]        = !isSwiftShader && (IsGalaxyA23());
531*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionGalaxyA34]        = !isSwiftShader && (IsGalaxyA34());
532*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionGalaxyA54]        = !isSwiftShader && (IsGalaxyA54());
533*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionGalaxyS22]        = !isSwiftShader && (IsGalaxyS22());
534*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionGalaxyS23]        = !isSwiftShader && (IsGalaxyS23());
535*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionGalaxyS24]        = !isSwiftShader && (IsGalaxyS24());
536*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionGalaxyQualcomm]   = !isSwiftShader && (IsGalaxyQualcomm());
537*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionFindX6]           = !isSwiftShader && (IsFindX6());
538*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionPineapple]        = !isSwiftShader && IsPineapple();
539*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionNVIDIAQuadroP400] = !isSwiftShader && IsNVIDIAQuadroP400();
540*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionNVIDIAGTX1660]    = !isSwiftShader && IsNVIDIAGTX1660();
541*8975f5c5SAndroid Build Coastguard Worker 
542*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionPreRotation]    = false;
543*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionPreRotation90]  = false;
544*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionPreRotation180] = false;
545*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionPreRotation270] = false;
546*8975f5c5SAndroid Build Coastguard Worker 
547*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionNoSan] = !IsASan() && !IsTSan() && !IsUBSan();
548*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionASan]  = IsASan();
549*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionTSan]  = IsTSan();
550*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionUBSan] = IsUBSan();
551*8975f5c5SAndroid Build Coastguard Worker }
552*8975f5c5SAndroid Build Coastguard Worker 
553*8975f5c5SAndroid Build Coastguard Worker // If the constructor is passed an API, load those conditions as well
GPUTestConfig(const API & api,uint32_t preRotation)554*8975f5c5SAndroid Build Coastguard Worker GPUTestConfig::GPUTestConfig(const API &api, uint32_t preRotation)
555*8975f5c5SAndroid Build Coastguard Worker     : GPUTestConfig(IsSwiftShader(api))
556*8975f5c5SAndroid Build Coastguard Worker {
557*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionD3D9]      = IsD3D9(api);
558*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionD3D11]     = IsD3D11(api);
559*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionGLDesktop] = IsGLDesktop(api);
560*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionGLES]      = IsGLES(api);
561*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionVulkan]    = IsVulkan(api);
562*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionMetal]     = IsMetal(api);
563*8975f5c5SAndroid Build Coastguard Worker     mConditions[kConditionWgpu]      = IsWgpu(api);
564*8975f5c5SAndroid Build Coastguard Worker 
565*8975f5c5SAndroid Build Coastguard Worker     switch (preRotation)
566*8975f5c5SAndroid Build Coastguard Worker     {
567*8975f5c5SAndroid Build Coastguard Worker         case 90:
568*8975f5c5SAndroid Build Coastguard Worker             mConditions[kConditionPreRotation]   = true;
569*8975f5c5SAndroid Build Coastguard Worker             mConditions[kConditionPreRotation90] = true;
570*8975f5c5SAndroid Build Coastguard Worker             break;
571*8975f5c5SAndroid Build Coastguard Worker         case 180:
572*8975f5c5SAndroid Build Coastguard Worker             mConditions[kConditionPreRotation]    = true;
573*8975f5c5SAndroid Build Coastguard Worker             mConditions[kConditionPreRotation180] = true;
574*8975f5c5SAndroid Build Coastguard Worker             break;
575*8975f5c5SAndroid Build Coastguard Worker         case 270:
576*8975f5c5SAndroid Build Coastguard Worker             mConditions[kConditionPreRotation]    = true;
577*8975f5c5SAndroid Build Coastguard Worker             mConditions[kConditionPreRotation270] = true;
578*8975f5c5SAndroid Build Coastguard Worker             break;
579*8975f5c5SAndroid Build Coastguard Worker         default:
580*8975f5c5SAndroid Build Coastguard Worker             break;
581*8975f5c5SAndroid Build Coastguard Worker     }
582*8975f5c5SAndroid Build Coastguard Worker }
583*8975f5c5SAndroid Build Coastguard Worker 
584*8975f5c5SAndroid Build Coastguard Worker // Return a const reference to the list of all pre-calculated conditions.
getConditions() const585*8975f5c5SAndroid Build Coastguard Worker const GPUTestConfig::ConditionArray &GPUTestConfig::getConditions() const
586*8975f5c5SAndroid Build Coastguard Worker {
587*8975f5c5SAndroid Build Coastguard Worker     return mConditions;
588*8975f5c5SAndroid Build Coastguard Worker }
589*8975f5c5SAndroid Build Coastguard Worker 
590*8975f5c5SAndroid Build Coastguard Worker }  // namespace angle
591