• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 &params)
239 {
240     PlatformParameters withNoFixture = params;
241     withNoFixture.noFixture          = true;
242     return withNoFixture;
243 }
244 
WithRobustness(const PlatformParameters & params)245 inline PlatformParameters WithRobustness(const PlatformParameters &params)
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 &paramsIn)
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 &paramsIn)
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 &params)
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