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(¤tMajorVersion, ¤tMinorVersion))
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