1 //
2 // Copyright 2014 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 #ifndef ANGLE_TEST_CONFIGS_H_
8 #define ANGLE_TEST_CONFIGS_H_
9
10 // On Linux EGL/egl.h includes X.h which does defines for some very common
11 // names that are used by gtest (like None and Bool) and causes a lot of
12 // compilation errors. To work around this, even if this file doesn't use it,
13 // we include gtest before EGL so that it compiles fine in other files that
14 // want to use gtest.
15 #include <gtest/gtest.h>
16
17 #include <EGL/egl.h>
18 #include <EGL/eglext.h>
19
20 #include "angle_test_instantiate.h"
21 #include "util/EGLPlatformParameters.h"
22
23 namespace angle
24 {
25
26 struct PlatformParameters
27 {
28 PlatformParameters();
29 PlatformParameters(EGLenum clientType,
30 EGLint majorVersion,
31 EGLint minorVersion,
32 EGLint profileMask,
33 const EGLPlatformParameters &eglPlatformParameters);
34 PlatformParameters(EGLenum clientType,
35 EGLint majorVersion,
36 EGLint minorVersion,
37 EGLint profileMask,
38 GLESDriverType driver);
39
40 EGLint getRenderer() const;
41 EGLint getDeviceType() const;
42 bool isSwiftshader() const;
43 bool isVulkan() const;
44 bool isANGLE() const;
45 bool isMetal() const;
46 bool isDesktopOpenGLFrontend() const;
47
48 void initDefaultParameters();
49
tiePlatformParameters50 auto tie() const
51 {
52 return std::tie(driver, noFixture, eglParameters, clientType, majorVersion, minorVersion,
53 profileMask);
54 }
55
56 // Helpers to enable and disable ANGLE features. Expects a Feature::* value from
57 // angle_features_autogen.h.
enablePlatformParameters58 PlatformParameters &enable(Feature feature)
59 {
60 eglParameters.enable(feature);
61 return *this;
62 }
disablePlatformParameters63 PlatformParameters &disable(Feature feature)
64 {
65 eglParameters.disable(feature);
66 return *this;
67 }
68 bool isEnableRequested(Feature feature) const;
69 bool isDisableRequested(Feature feature) const;
70
71 GLESDriverType driver;
72 bool noFixture;
73 EGLPlatformParameters eglParameters;
74 EGLenum clientType;
75 EGLint majorVersion;
76 EGLint minorVersion;
77 EGLint profileMask;
78 };
79
80 const char *GetRendererName(EGLint renderer);
81
82 bool operator<(const PlatformParameters &a, const PlatformParameters &b);
83 bool operator==(const PlatformParameters &a, const PlatformParameters &b);
84 std::ostream &operator<<(std::ostream &stream, const PlatformParameters &pp);
85
86 // EGL platforms
87 namespace egl_platform
88 {
89
90 EGLPlatformParameters DEFAULT();
91 EGLPlatformParameters DEFAULT_NULL();
92
93 EGLPlatformParameters D3D9();
94 EGLPlatformParameters D3D9_NULL();
95 EGLPlatformParameters D3D9_REFERENCE();
96
97 EGLPlatformParameters D3D11();
98 EGLPlatformParameters D3D11_PRESENT_PATH_FAST();
99 EGLPlatformParameters D3D11_FL11_1();
100 EGLPlatformParameters D3D11_FL11_0();
101 EGLPlatformParameters D3D11_FL10_1();
102 EGLPlatformParameters D3D11_FL10_0();
103
104 EGLPlatformParameters D3D11_NULL();
105
106 EGLPlatformParameters D3D11_WARP();
107 EGLPlatformParameters D3D11_FL11_1_WARP();
108 EGLPlatformParameters D3D11_FL11_0_WARP();
109 EGLPlatformParameters D3D11_FL10_1_WARP();
110 EGLPlatformParameters D3D11_FL10_0_WARP();
111
112 EGLPlatformParameters D3D11_REFERENCE();
113 EGLPlatformParameters D3D11_FL11_1_REFERENCE();
114 EGLPlatformParameters D3D11_FL11_0_REFERENCE();
115 EGLPlatformParameters D3D11_FL10_1_REFERENCE();
116 EGLPlatformParameters D3D11_FL10_0_REFERENCE();
117
118 EGLPlatformParameters METAL();
119
120 EGLPlatformParameters OPENGL();
121 EGLPlatformParameters OPENGL(EGLint major, EGLint minor);
122 EGLPlatformParameters OPENGL_NULL();
123
124 EGLPlatformParameters OPENGLES();
125 EGLPlatformParameters OPENGLES(EGLint major, EGLint minor);
126 EGLPlatformParameters OPENGLES_NULL();
127
128 EGLPlatformParameters OPENGL_OR_GLES();
129 EGLPlatformParameters OPENGL_OR_GLES(EGLint major, EGLint minor);
130 EGLPlatformParameters OPENGL_OR_GLES_NULL();
131
132 EGLPlatformParameters VULKAN();
133 EGLPlatformParameters VULKAN_NULL();
134 EGLPlatformParameters VULKAN_SWIFTSHADER();
135
136 } // namespace egl_platform
137
138 // ANGLE tests platforms
139 PlatformParameters ES1_D3D9();
140 PlatformParameters ES2_D3D9();
141
142 PlatformParameters ES1_D3D11();
143 PlatformParameters ES2_D3D11();
144 PlatformParameters ES2_D3D11_PRESENT_PATH_FAST();
145 PlatformParameters ES2_D3D11_FL11_0();
146 PlatformParameters ES2_D3D11_FL10_1();
147 PlatformParameters ES2_D3D11_FL10_0();
148
149 PlatformParameters ES2_D3D11_WARP();
150 PlatformParameters ES2_D3D11_FL11_0_WARP();
151 PlatformParameters ES2_D3D11_FL10_1_WARP();
152 PlatformParameters ES2_D3D11_FL10_0_WARP();
153
154 PlatformParameters ES2_D3D11_REFERENCE();
155 PlatformParameters ES2_D3D11_FL11_0_REFERENCE();
156 PlatformParameters ES2_D3D11_FL10_1_REFERENCE();
157 PlatformParameters ES2_D3D11_FL10_0_REFERENCE();
158
159 PlatformParameters ES3_D3D11();
160 PlatformParameters ES3_D3D11_FL11_1();
161 PlatformParameters ES3_D3D11_FL11_0();
162 PlatformParameters ES3_D3D11_FL10_1();
163 PlatformParameters ES31_D3D11();
164 PlatformParameters ES31_D3D11_FL11_1();
165 PlatformParameters ES31_D3D11_FL11_0();
166
167 PlatformParameters ES3_D3D11_WARP();
168 PlatformParameters ES3_D3D11_FL11_1_WARP();
169 PlatformParameters ES3_D3D11_FL11_0_WARP();
170 PlatformParameters ES3_D3D11_FL10_1_WARP();
171
172 PlatformParameters ES1_OPENGL();
173 PlatformParameters ES2_OPENGL();
174 PlatformParameters ES2_OPENGL(EGLint major, EGLint minor);
175 PlatformParameters ES3_OPENGL();
176 PlatformParameters ES3_OPENGL(EGLint major, EGLint minor);
177 PlatformParameters ES31_OPENGL();
178 PlatformParameters ES31_OPENGL(EGLint major, EGLint minor);
179
180 PlatformParameters ES1_OPENGLES();
181 PlatformParameters ES2_OPENGLES();
182 PlatformParameters ES2_OPENGLES(EGLint major, EGLint minor);
183 PlatformParameters ES3_OPENGLES();
184 PlatformParameters ES3_OPENGLES(EGLint major, EGLint minor);
185 PlatformParameters ES31_OPENGLES();
186 PlatformParameters ES31_OPENGLES(EGLint major, EGLint minor);
187
188 PlatformParameters ES1_NULL();
189 PlatformParameters ES2_NULL();
190 PlatformParameters ES3_NULL();
191 PlatformParameters ES31_NULL();
192
193 PlatformParameters ES1_VULKAN();
194 PlatformParameters ES1_VULKAN_NULL();
195 PlatformParameters ES1_VULKAN_SWIFTSHADER();
196 PlatformParameters ES2_VULKAN();
197 PlatformParameters ES2_VULKAN_NULL();
198 PlatformParameters ES2_VULKAN_SWIFTSHADER();
199 PlatformParameters ES3_VULKAN();
200 PlatformParameters ES3_VULKAN_NULL();
201 PlatformParameters ES3_VULKAN_SWIFTSHADER();
202 PlatformParameters ES31_VULKAN();
203 PlatformParameters ES31_VULKAN_NULL();
204 PlatformParameters ES31_VULKAN_SWIFTSHADER();
205 PlatformParameters ES32_VULKAN();
206 PlatformParameters ES32_VULKAN_NULL();
207 PlatformParameters ES32_VULKAN_SWIFTSHADER();
208 PlatformParameters GL32_CORE_VULKAN();
209 PlatformParameters GL32_CORE_VULKAN_SWIFTSHADER();
210
211 PlatformParameters ES1_METAL();
212 PlatformParameters ES2_METAL();
213 PlatformParameters ES3_METAL();
214
215 PlatformParameters ES2_WGL();
216 PlatformParameters ES3_WGL();
217
218 PlatformParameters ES1_EGL();
219 PlatformParameters ES2_EGL();
220 PlatformParameters ES3_EGL();
221 PlatformParameters ES31_EGL();
222 PlatformParameters ES32_EGL();
223
224 PlatformParameters ES1_ANGLE_Vulkan_Secondaries();
225 PlatformParameters ES2_ANGLE_Vulkan_Secondaries();
226 PlatformParameters ES3_ANGLE_Vulkan_Secondaries();
227 PlatformParameters ES31_ANGLE_Vulkan_Secondaries();
228 PlatformParameters ES32_ANGLE_Vulkan_Secondaries();
229
230 PlatformParameters ES1_Zink();
231 PlatformParameters ES2_Zink();
232 PlatformParameters ES3_Zink();
233 PlatformParameters ES31_Zink();
234 PlatformParameters ES32_Zink();
235
236 const char *GetNativeEGLLibraryNameWithExtension();
237
WithNoFixture(const PlatformParameters & params)238 inline PlatformParameters WithNoFixture(const PlatformParameters ¶ms)
239 {
240 PlatformParameters withNoFixture = params;
241 withNoFixture.noFixture = true;
242 return withNoFixture;
243 }
244
WithRobustness(const PlatformParameters & params)245 inline PlatformParameters WithRobustness(const PlatformParameters ¶ms)
246 {
247 PlatformParameters withRobustness = params;
248 withRobustness.eglParameters.robustness = EGL_TRUE;
249 return withRobustness;
250 }
251
WithLowPowerGPU(const PlatformParameters & paramsIn)252 inline PlatformParameters WithLowPowerGPU(const PlatformParameters ¶msIn)
253 {
254 PlatformParameters paramsOut = paramsIn;
255 paramsOut.eglParameters.displayPowerPreference = EGL_LOW_POWER_ANGLE;
256 return paramsOut;
257 }
258
WithHighPowerGPU(const PlatformParameters & paramsIn)259 inline PlatformParameters WithHighPowerGPU(const PlatformParameters ¶msIn)
260 {
261 PlatformParameters paramsOut = paramsIn;
262 paramsOut.eglParameters.displayPowerPreference = EGL_HIGH_POWER_ANGLE;
263 return paramsOut;
264 }
265
WithVulkanSecondaries(const PlatformParameters & params)266 inline PlatformParameters WithVulkanSecondaries(const PlatformParameters ¶ms)
267 {
268 PlatformParameters paramsOut = params;
269 paramsOut.driver = GLESDriverType::AngleVulkanSecondariesEGL;
270 return paramsOut;
271 }
272 } // namespace angle
273
274 #endif // ANGLE_TEST_CONFIGS_H_
275