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