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 // GPUTestExpectationsTest.cpp : Tests of the test_expectations library.
8*8975f5c5SAndroid Build Coastguard Worker
9*8975f5c5SAndroid Build Coastguard Worker #include "test_expectations/GPUTestConfig.h"
10*8975f5c5SAndroid Build Coastguard Worker #include "test_expectations/GPUTestExpectationsParser.h"
11*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/ANGLETest.h"
12*8975f5c5SAndroid Build Coastguard Worker
13*8975f5c5SAndroid Build Coastguard Worker namespace angle
14*8975f5c5SAndroid Build Coastguard Worker {
15*8975f5c5SAndroid Build Coastguard Worker
16*8975f5c5SAndroid Build Coastguard Worker class GPUTestConfigTest : public ANGLETest<>
17*8975f5c5SAndroid Build Coastguard Worker {
18*8975f5c5SAndroid Build Coastguard Worker protected:
GPUTestConfigTest()19*8975f5c5SAndroid Build Coastguard Worker GPUTestConfigTest() {}
20*8975f5c5SAndroid Build Coastguard Worker
21*8975f5c5SAndroid Build Coastguard Worker // todo(jonahr): Eventually could add support for all conditions/operating
22*8975f5c5SAndroid Build Coastguard Worker // systems, but these are the ones in use for now
validateConfigBase(const GPUTestConfig & config)23*8975f5c5SAndroid Build Coastguard Worker void validateConfigBase(const GPUTestConfig &config)
24*8975f5c5SAndroid Build Coastguard Worker {
25*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(IsWindows(), config.getConditions()[GPUTestConfig::kConditionWin]);
26*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(IsMac(), config.getConditions()[GPUTestConfig::kConditionMac]);
27*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(IsIOS(), config.getConditions()[GPUTestConfig::kConditionIOS]);
28*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(IsLinux(), config.getConditions()[GPUTestConfig::kConditionLinux]);
29*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(IsAndroid(), config.getConditions()[GPUTestConfig::kConditionAndroid]);
30*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(IsNexus5X(), config.getConditions()[GPUTestConfig::kConditionNexus5X]);
31*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ((IsPixel2() || IsPixel2XL()),
32*8975f5c5SAndroid Build Coastguard Worker config.getConditions()[GPUTestConfig::kConditionPixel2OrXL]);
33*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(IsIntel(), config.getConditions()[GPUTestConfig::kConditionIntel]);
34*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(IsAMD(), config.getConditions()[GPUTestConfig::kConditionAMD]);
35*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(IsNVIDIA(), config.getConditions()[GPUTestConfig::kConditionNVIDIA]);
36*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(IsDebug(), config.getConditions()[GPUTestConfig::kConditionDebug]);
37*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(IsRelease(), config.getConditions()[GPUTestConfig::kConditionRelease]);
38*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(IsASan(), config.getConditions()[GPUTestConfig::kConditionASan]);
39*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(IsTSan(), config.getConditions()[GPUTestConfig::kConditionTSan]);
40*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(IsUBSan(), config.getConditions()[GPUTestConfig::kConditionUBSan]);
41*8975f5c5SAndroid Build Coastguard Worker }
42*8975f5c5SAndroid Build Coastguard Worker
validateConfigAPI(const GPUTestConfig & config,const GPUTestConfig::API & api,uint32_t preRotation)43*8975f5c5SAndroid Build Coastguard Worker void validateConfigAPI(const GPUTestConfig &config,
44*8975f5c5SAndroid Build Coastguard Worker const GPUTestConfig::API &api,
45*8975f5c5SAndroid Build Coastguard Worker uint32_t preRotation)
46*8975f5c5SAndroid Build Coastguard Worker {
47*8975f5c5SAndroid Build Coastguard Worker bool D3D9 = false;
48*8975f5c5SAndroid Build Coastguard Worker bool D3D11 = false;
49*8975f5c5SAndroid Build Coastguard Worker bool GLDesktop = false;
50*8975f5c5SAndroid Build Coastguard Worker bool GLES = false;
51*8975f5c5SAndroid Build Coastguard Worker bool Vulkan = false;
52*8975f5c5SAndroid Build Coastguard Worker bool Metal = false;
53*8975f5c5SAndroid Build Coastguard Worker bool Wgpu = false;
54*8975f5c5SAndroid Build Coastguard Worker switch (api)
55*8975f5c5SAndroid Build Coastguard Worker {
56*8975f5c5SAndroid Build Coastguard Worker case GPUTestConfig::kAPID3D9:
57*8975f5c5SAndroid Build Coastguard Worker D3D9 = true;
58*8975f5c5SAndroid Build Coastguard Worker break;
59*8975f5c5SAndroid Build Coastguard Worker case GPUTestConfig::kAPID3D11:
60*8975f5c5SAndroid Build Coastguard Worker D3D11 = true;
61*8975f5c5SAndroid Build Coastguard Worker break;
62*8975f5c5SAndroid Build Coastguard Worker case GPUTestConfig::kAPIGLDesktop:
63*8975f5c5SAndroid Build Coastguard Worker GLDesktop = true;
64*8975f5c5SAndroid Build Coastguard Worker break;
65*8975f5c5SAndroid Build Coastguard Worker case GPUTestConfig::kAPIGLES:
66*8975f5c5SAndroid Build Coastguard Worker GLES = true;
67*8975f5c5SAndroid Build Coastguard Worker break;
68*8975f5c5SAndroid Build Coastguard Worker case GPUTestConfig::kAPIVulkan:
69*8975f5c5SAndroid Build Coastguard Worker Vulkan = true;
70*8975f5c5SAndroid Build Coastguard Worker break;
71*8975f5c5SAndroid Build Coastguard Worker case GPUTestConfig::kAPIMetal:
72*8975f5c5SAndroid Build Coastguard Worker Metal = true;
73*8975f5c5SAndroid Build Coastguard Worker break;
74*8975f5c5SAndroid Build Coastguard Worker case GPUTestConfig::kAPIWgpu:
75*8975f5c5SAndroid Build Coastguard Worker Wgpu = true;
76*8975f5c5SAndroid Build Coastguard Worker break;
77*8975f5c5SAndroid Build Coastguard Worker case GPUTestConfig::kAPIUnknown:
78*8975f5c5SAndroid Build Coastguard Worker default:
79*8975f5c5SAndroid Build Coastguard Worker break;
80*8975f5c5SAndroid Build Coastguard Worker }
81*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(D3D9, config.getConditions()[GPUTestConfig::kConditionD3D9]);
82*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(D3D11, config.getConditions()[GPUTestConfig::kConditionD3D11]);
83*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(GLDesktop, config.getConditions()[GPUTestConfig::kConditionGLDesktop]);
84*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(GLES, config.getConditions()[GPUTestConfig::kConditionGLES]);
85*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(Vulkan, config.getConditions()[GPUTestConfig::kConditionVulkan]);
86*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(Metal, config.getConditions()[GPUTestConfig::kConditionMetal]);
87*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(Wgpu, config.getConditions()[GPUTestConfig::kConditionWgpu]);
88*8975f5c5SAndroid Build Coastguard Worker
89*8975f5c5SAndroid Build Coastguard Worker switch (preRotation)
90*8975f5c5SAndroid Build Coastguard Worker {
91*8975f5c5SAndroid Build Coastguard Worker case 90:
92*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(config.getConditions()[GPUTestConfig::kConditionPreRotation]);
93*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(config.getConditions()[GPUTestConfig::kConditionPreRotation90]);
94*8975f5c5SAndroid Build Coastguard Worker EXPECT_FALSE(config.getConditions()[GPUTestConfig::kConditionPreRotation180]);
95*8975f5c5SAndroid Build Coastguard Worker EXPECT_FALSE(config.getConditions()[GPUTestConfig::kConditionPreRotation270]);
96*8975f5c5SAndroid Build Coastguard Worker break;
97*8975f5c5SAndroid Build Coastguard Worker case 180:
98*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(config.getConditions()[GPUTestConfig::kConditionPreRotation]);
99*8975f5c5SAndroid Build Coastguard Worker EXPECT_FALSE(config.getConditions()[GPUTestConfig::kConditionPreRotation90]);
100*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(config.getConditions()[GPUTestConfig::kConditionPreRotation180]);
101*8975f5c5SAndroid Build Coastguard Worker EXPECT_FALSE(config.getConditions()[GPUTestConfig::kConditionPreRotation270]);
102*8975f5c5SAndroid Build Coastguard Worker break;
103*8975f5c5SAndroid Build Coastguard Worker case 270:
104*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(config.getConditions()[GPUTestConfig::kConditionPreRotation]);
105*8975f5c5SAndroid Build Coastguard Worker EXPECT_FALSE(config.getConditions()[GPUTestConfig::kConditionPreRotation90]);
106*8975f5c5SAndroid Build Coastguard Worker EXPECT_FALSE(config.getConditions()[GPUTestConfig::kConditionPreRotation180]);
107*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(config.getConditions()[GPUTestConfig::kConditionPreRotation270]);
108*8975f5c5SAndroid Build Coastguard Worker break;
109*8975f5c5SAndroid Build Coastguard Worker default:
110*8975f5c5SAndroid Build Coastguard Worker EXPECT_FALSE(config.getConditions()[GPUTestConfig::kConditionPreRotation]);
111*8975f5c5SAndroid Build Coastguard Worker EXPECT_FALSE(config.getConditions()[GPUTestConfig::kConditionPreRotation90]);
112*8975f5c5SAndroid Build Coastguard Worker EXPECT_FALSE(config.getConditions()[GPUTestConfig::kConditionPreRotation180]);
113*8975f5c5SAndroid Build Coastguard Worker EXPECT_FALSE(config.getConditions()[GPUTestConfig::kConditionPreRotation270]);
114*8975f5c5SAndroid Build Coastguard Worker break;
115*8975f5c5SAndroid Build Coastguard Worker }
116*8975f5c5SAndroid Build Coastguard Worker }
117*8975f5c5SAndroid Build Coastguard Worker };
118*8975f5c5SAndroid Build Coastguard Worker
119*8975f5c5SAndroid Build Coastguard Worker // Create a new GPUTestConfig and make sure all the condition flags were set
120*8975f5c5SAndroid Build Coastguard Worker // correctly based on the hardware.
TEST_P(GPUTestConfigTest,GPUTestConfigConditions)121*8975f5c5SAndroid Build Coastguard Worker TEST_P(GPUTestConfigTest, GPUTestConfigConditions)
122*8975f5c5SAndroid Build Coastguard Worker {
123*8975f5c5SAndroid Build Coastguard Worker GPUTestConfig config;
124*8975f5c5SAndroid Build Coastguard Worker validateConfigBase(config);
125*8975f5c5SAndroid Build Coastguard Worker }
126*8975f5c5SAndroid Build Coastguard Worker
127*8975f5c5SAndroid Build Coastguard Worker // Create a new GPUTestConfig with each backend specified and validate the
128*8975f5c5SAndroid Build Coastguard Worker // condition flags are set correctly.
TEST_P(GPUTestConfigTest,GPUTestConfigConditions_D3D9)129*8975f5c5SAndroid Build Coastguard Worker TEST_P(GPUTestConfigTest, GPUTestConfigConditions_D3D9)
130*8975f5c5SAndroid Build Coastguard Worker {
131*8975f5c5SAndroid Build Coastguard Worker GPUTestConfig config(GPUTestConfig::kAPID3D9, 0);
132*8975f5c5SAndroid Build Coastguard Worker validateConfigAPI(config, GPUTestConfig::kAPID3D9, 0);
133*8975f5c5SAndroid Build Coastguard Worker }
134*8975f5c5SAndroid Build Coastguard Worker
TEST_P(GPUTestConfigTest,GPUTestConfigConditions_D3D11)135*8975f5c5SAndroid Build Coastguard Worker TEST_P(GPUTestConfigTest, GPUTestConfigConditions_D3D11)
136*8975f5c5SAndroid Build Coastguard Worker {
137*8975f5c5SAndroid Build Coastguard Worker GPUTestConfig config(GPUTestConfig::kAPID3D11, 0);
138*8975f5c5SAndroid Build Coastguard Worker validateConfigAPI(config, GPUTestConfig::kAPID3D11, 0);
139*8975f5c5SAndroid Build Coastguard Worker }
140*8975f5c5SAndroid Build Coastguard Worker
TEST_P(GPUTestConfigTest,GPUTestConfigConditions_Metal)141*8975f5c5SAndroid Build Coastguard Worker TEST_P(GPUTestConfigTest, GPUTestConfigConditions_Metal)
142*8975f5c5SAndroid Build Coastguard Worker {
143*8975f5c5SAndroid Build Coastguard Worker GPUTestConfig config(GPUTestConfig::kAPIMetal, 0);
144*8975f5c5SAndroid Build Coastguard Worker validateConfigAPI(config, GPUTestConfig::kAPIMetal, 0);
145*8975f5c5SAndroid Build Coastguard Worker }
146*8975f5c5SAndroid Build Coastguard Worker
147*8975f5c5SAndroid Build Coastguard Worker // Create a new GPUTestConfig with webgpu and validate the
148*8975f5c5SAndroid Build Coastguard Worker // condition flags are set correctly.
TEST_P(GPUTestConfigTest,GPUTestConfigConditions_Wgpu)149*8975f5c5SAndroid Build Coastguard Worker TEST_P(GPUTestConfigTest, GPUTestConfigConditions_Wgpu)
150*8975f5c5SAndroid Build Coastguard Worker {
151*8975f5c5SAndroid Build Coastguard Worker GPUTestConfig config(GPUTestConfig::kAPIWgpu, 0);
152*8975f5c5SAndroid Build Coastguard Worker validateConfigAPI(config, GPUTestConfig::kAPIWgpu, 0);
153*8975f5c5SAndroid Build Coastguard Worker }
154*8975f5c5SAndroid Build Coastguard Worker
TEST_P(GPUTestConfigTest,GPUTestConfigConditions_GLDesktop)155*8975f5c5SAndroid Build Coastguard Worker TEST_P(GPUTestConfigTest, GPUTestConfigConditions_GLDesktop)
156*8975f5c5SAndroid Build Coastguard Worker {
157*8975f5c5SAndroid Build Coastguard Worker GPUTestConfig config(GPUTestConfig::kAPIGLDesktop, 0);
158*8975f5c5SAndroid Build Coastguard Worker validateConfigAPI(config, GPUTestConfig::kAPIGLDesktop, 0);
159*8975f5c5SAndroid Build Coastguard Worker }
160*8975f5c5SAndroid Build Coastguard Worker
TEST_P(GPUTestConfigTest,GPUTestConfigConditions_GLES)161*8975f5c5SAndroid Build Coastguard Worker TEST_P(GPUTestConfigTest, GPUTestConfigConditions_GLES)
162*8975f5c5SAndroid Build Coastguard Worker {
163*8975f5c5SAndroid Build Coastguard Worker GPUTestConfig config(GPUTestConfig::kAPIGLES, 0);
164*8975f5c5SAndroid Build Coastguard Worker validateConfigAPI(config, GPUTestConfig::kAPIGLES, 0);
165*8975f5c5SAndroid Build Coastguard Worker }
166*8975f5c5SAndroid Build Coastguard Worker
TEST_P(GPUTestConfigTest,GPUTestConfigConditions_Vulkan)167*8975f5c5SAndroid Build Coastguard Worker TEST_P(GPUTestConfigTest, GPUTestConfigConditions_Vulkan)
168*8975f5c5SAndroid Build Coastguard Worker {
169*8975f5c5SAndroid Build Coastguard Worker GPUTestConfig config(GPUTestConfig::kAPIVulkan, 0);
170*8975f5c5SAndroid Build Coastguard Worker validateConfigAPI(config, GPUTestConfig::kAPIVulkan, 0);
171*8975f5c5SAndroid Build Coastguard Worker }
172*8975f5c5SAndroid Build Coastguard Worker
TEST_P(GPUTestConfigTest,GPUTestConfigConditions_Vulkan_PreRotation90)173*8975f5c5SAndroid Build Coastguard Worker TEST_P(GPUTestConfigTest, GPUTestConfigConditions_Vulkan_PreRotation90)
174*8975f5c5SAndroid Build Coastguard Worker {
175*8975f5c5SAndroid Build Coastguard Worker GPUTestConfig config(GPUTestConfig::kAPIVulkan, 90);
176*8975f5c5SAndroid Build Coastguard Worker validateConfigAPI(config, GPUTestConfig::kAPIVulkan, 90);
177*8975f5c5SAndroid Build Coastguard Worker }
178*8975f5c5SAndroid Build Coastguard Worker
TEST_P(GPUTestConfigTest,GPUTestConfigConditions_Vulkan_PreRotation180)179*8975f5c5SAndroid Build Coastguard Worker TEST_P(GPUTestConfigTest, GPUTestConfigConditions_Vulkan_PreRotation180)
180*8975f5c5SAndroid Build Coastguard Worker {
181*8975f5c5SAndroid Build Coastguard Worker GPUTestConfig config(GPUTestConfig::kAPIVulkan, 180);
182*8975f5c5SAndroid Build Coastguard Worker validateConfigAPI(config, GPUTestConfig::kAPIVulkan, 180);
183*8975f5c5SAndroid Build Coastguard Worker }
184*8975f5c5SAndroid Build Coastguard Worker
TEST_P(GPUTestConfigTest,GPUTestConfigConditions_Vulkan_PreRotation270)185*8975f5c5SAndroid Build Coastguard Worker TEST_P(GPUTestConfigTest, GPUTestConfigConditions_Vulkan_PreRotation270)
186*8975f5c5SAndroid Build Coastguard Worker {
187*8975f5c5SAndroid Build Coastguard Worker GPUTestConfig config(GPUTestConfig::kAPIVulkan, 270);
188*8975f5c5SAndroid Build Coastguard Worker validateConfigAPI(config, GPUTestConfig::kAPIVulkan, 270);
189*8975f5c5SAndroid Build Coastguard Worker }
190*8975f5c5SAndroid Build Coastguard Worker
191*8975f5c5SAndroid Build Coastguard Worker // Use this to select which configurations (e.g. which renderer, which GLES major version) these
192*8975f5c5SAndroid Build Coastguard Worker // tests should be run against.
193*8975f5c5SAndroid Build Coastguard Worker ANGLE_INSTANTIATE_TEST_ES2_AND_ES3(GPUTestConfigTest);
194*8975f5c5SAndroid Build Coastguard Worker
195*8975f5c5SAndroid Build Coastguard Worker } // namespace angle
196