• 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 #include "test_utils/angle_test_configs.h"
8 
9 #include "common/debug.h"
10 #include "common/platform.h"
11 #include "common/string_utils.h"
12 #include "util/util_gl.h"
13 
14 #include <algorithm>
15 #include <cctype>
16 
17 namespace angle
18 {
19 namespace
20 {
AppendCapitalizedFeature(std::ostream & stream,Feature feature)21 void AppendCapitalizedFeature(std::ostream &stream, Feature feature)
22 {
23     const char *name = GetFeatureName(feature);
24 
25     if (name == nullptr)
26     {
27         stream << "InternalError";
28         return;
29     }
30 
31     const std::string camelCase = angle::ToCamelCase(name);
32 
33     stream << static_cast<char>(std::toupper(camelCase[0])) << (camelCase.c_str() + 1);
34 }
35 
HasFeatureOverride(const std::vector<Feature> & overrides,Feature feature)36 bool HasFeatureOverride(const std::vector<Feature> &overrides, Feature feature)
37 {
38     return std::find(overrides.begin(), overrides.end(), feature) != overrides.end();
39 }
40 }  // namespace
41 
PlatformParameters()42 PlatformParameters::PlatformParameters()
43     : PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, GLESDriverType::AngleEGL)
44 {}
45 
PlatformParameters(EGLenum clientType,EGLint majorVersion,EGLint minorVersion,EGLint profileMask,const EGLPlatformParameters & eglPlatformParameters)46 PlatformParameters::PlatformParameters(EGLenum clientType,
47                                        EGLint majorVersion,
48                                        EGLint minorVersion,
49                                        EGLint profileMask,
50                                        const EGLPlatformParameters &eglPlatformParameters)
51     : driver(GLESDriverType::AngleEGL),
52       noFixture(false),
53       eglParameters(eglPlatformParameters),
54       clientType(clientType),
55       majorVersion(majorVersion),
56       minorVersion(minorVersion),
57       profileMask(profileMask)
58 {
59     initDefaultParameters();
60 }
61 
PlatformParameters(EGLenum clientType,EGLint majorVersion,EGLint minorVersion,EGLint profileMask,GLESDriverType driver)62 PlatformParameters::PlatformParameters(EGLenum clientType,
63                                        EGLint majorVersion,
64                                        EGLint minorVersion,
65                                        EGLint profileMask,
66                                        GLESDriverType driver)
67     : driver(driver),
68       noFixture(false),
69       clientType(clientType),
70       majorVersion(majorVersion),
71       minorVersion(minorVersion),
72       profileMask(profileMask)
73 {
74     initDefaultParameters();
75 }
76 
getRenderer() const77 EGLint PlatformParameters::getRenderer() const
78 {
79     return eglParameters.renderer;
80 }
81 
getDeviceType() const82 EGLint PlatformParameters::getDeviceType() const
83 {
84     return eglParameters.deviceType;
85 }
86 
isSwiftshader() const87 bool PlatformParameters::isSwiftshader() const
88 {
89     return eglParameters.deviceType == EGL_PLATFORM_ANGLE_DEVICE_TYPE_SWIFTSHADER_ANGLE;
90 }
91 
isMetal() const92 bool PlatformParameters::isMetal() const
93 {
94     return eglParameters.renderer == EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE;
95 }
96 
isVulkan() const97 bool PlatformParameters::isVulkan() const
98 {
99     return eglParameters.renderer == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE;
100 }
101 
isWebGPU() const102 bool PlatformParameters::isWebGPU() const
103 {
104     return eglParameters.renderer == EGL_PLATFORM_ANGLE_TYPE_WEBGPU_ANGLE;
105 }
106 
isANGLE() const107 bool PlatformParameters::isANGLE() const
108 {
109     return driver == GLESDriverType::AngleEGL;
110 }
111 
isDesktopOpenGLFrontend() const112 bool PlatformParameters::isDesktopOpenGLFrontend() const
113 {
114     return clientType == EGL_OPENGL_API;
115 }
116 
initDefaultParameters()117 void PlatformParameters::initDefaultParameters()
118 {
119     // Default debug layers to enabled in tests.
120     eglParameters.debugLayersEnabled = EGL_TRUE;
121 }
122 
isEnableRequested(Feature feature) const123 bool PlatformParameters::isEnableRequested(Feature feature) const
124 {
125     return HasFeatureOverride(eglParameters.enabledFeatureOverrides, feature);
126 }
127 
isDisableRequested(Feature feature) const128 bool PlatformParameters::isDisableRequested(Feature feature) const
129 {
130     return HasFeatureOverride(eglParameters.disabledFeatureOverrides, feature);
131 }
132 
operator <(const PlatformParameters & a,const PlatformParameters & b)133 bool operator<(const PlatformParameters &a, const PlatformParameters &b)
134 {
135     return a.tie() < b.tie();
136 }
137 
operator ==(const PlatformParameters & a,const PlatformParameters & b)138 bool operator==(const PlatformParameters &a, const PlatformParameters &b)
139 {
140     return a.tie() == b.tie();
141 }
142 
operator !=(const PlatformParameters & a,const PlatformParameters & b)143 bool operator!=(const PlatformParameters &a, const PlatformParameters &b)
144 {
145     return a.tie() != b.tie();
146 }
147 
GetRendererName(EGLint renderer)148 const char *GetRendererName(EGLint renderer)
149 {
150     switch (renderer)
151     {
152         case EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE:
153             return "Default";
154         case EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE:
155             return "D3D9";
156         case EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE:
157             return "D3D11";
158         case EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE:
159             return "Metal";
160         case EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE:
161             return "Null";
162         case EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE:
163             return "OpenGL";
164         case EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE:
165             return "OpenGLES";
166         case EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE:
167             return "Vulkan";
168         case EGL_PLATFORM_ANGLE_TYPE_WEBGPU_ANGLE:
169             return "WebGPU";
170         default:
171             return "Undefined";
172     }
173 }
174 
operator <<(std::ostream & stream,const PlatformParameters & pp)175 std::ostream &operator<<(std::ostream &stream, const PlatformParameters &pp)
176 {
177     switch (pp.clientType)
178     {
179         case EGL_OPENGL_ES_API:
180             stream << "ES";
181             break;
182 
183         case EGL_OPENGL_API:
184             stream << "GL";
185             break;
186 
187         case EGL_OPENVG_API:
188             stream << "VG";
189             break;
190 
191         default:
192             UNREACHABLE();
193             stream << "Error";
194             break;
195     }
196 
197     stream << pp.majorVersion << "_";
198     if (pp.minorVersion != 0)
199     {
200         stream << pp.minorVersion << "_";
201     }
202 
203     if (pp.clientType == EGL_OPENGL_API)
204     {
205         if ((pp.profileMask & EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT) != 0)
206         {
207             stream << "Core_";
208         }
209         if ((pp.profileMask & EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT) != 0)
210         {
211             stream << "Compatibility_";
212         }
213     }
214     else
215     {
216         // Profile mask is only valid for desktop OpenGL contexts.
217         ASSERT(pp.profileMask == 0);
218     }
219 
220     switch (pp.driver)
221     {
222         case GLESDriverType::AngleEGL:
223             stream << GetRendererName(pp.eglParameters.renderer);
224             break;
225         case GLESDriverType::AngleVulkanSecondariesEGL:
226             ASSERT(pp.eglParameters.renderer == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE);
227             stream << "ANGLE_Vulkan_Secondaries";
228             break;
229         case GLESDriverType::SystemWGL:
230             stream << "WGL";
231             break;
232         case GLESDriverType::SystemEGL:
233             stream << "EGL";
234             break;
235         case GLESDriverType::ZinkEGL:
236             stream << "Zink";
237             break;
238         default:
239             stream << "Error";
240             break;
241     }
242 
243     if (pp.eglParameters.majorVersion != EGL_DONT_CARE)
244     {
245         stream << "_" << pp.eglParameters.majorVersion;
246     }
247 
248     if (pp.eglParameters.minorVersion != EGL_DONT_CARE)
249     {
250         stream << "_" << pp.eglParameters.minorVersion;
251     }
252 
253     switch (pp.eglParameters.deviceType)
254     {
255         case EGL_DONT_CARE:
256         case EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE:
257             // default
258             break;
259 
260         case EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE:
261             stream << "_Null";
262             break;
263 
264         case EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_REFERENCE_ANGLE:
265             stream << "_Reference";
266             break;
267 
268         case EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_WARP_ANGLE:
269             stream << "_Warp";
270             break;
271 
272         case EGL_PLATFORM_ANGLE_DEVICE_TYPE_SWIFTSHADER_ANGLE:
273             stream << "_SwiftShader";
274             break;
275 
276         default:
277             stream << "_Error";
278             break;
279     }
280 
281     switch (pp.eglParameters.presentPath)
282     {
283         case EGL_EXPERIMENTAL_PRESENT_PATH_COPY_ANGLE:
284             stream << "_PresentPathCopy";
285             break;
286 
287         case EGL_EXPERIMENTAL_PRESENT_PATH_FAST_ANGLE:
288             stream << "_PresentPathFast";
289             break;
290 
291         case EGL_DONT_CARE:
292             // default
293             break;
294 
295         default:
296             stream << "_Error";
297             break;
298     }
299 
300     if (pp.noFixture)
301     {
302         stream << "_NoFixture";
303     }
304 
305     if (pp.eglParameters.displayPowerPreference == EGL_LOW_POWER_ANGLE)
306     {
307         stream << "_LowPowerGPU";
308     }
309 
310     if (pp.eglParameters.displayPowerPreference == EGL_HIGH_POWER_ANGLE)
311     {
312         stream << "_HighPowerGPU";
313     }
314 
315     for (Feature feature : pp.eglParameters.enabledFeatureOverrides)
316     {
317         stream << "_";
318         AppendCapitalizedFeature(stream, feature);
319     }
320     for (Feature feature : pp.eglParameters.disabledFeatureOverrides)
321     {
322         stream << "_No";
323         AppendCapitalizedFeature(stream, feature);
324     }
325 
326     return stream;
327 }
328 
329 // EGL platforms
330 namespace egl_platform
331 {
332 
DEFAULT()333 EGLPlatformParameters DEFAULT()
334 {
335     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE);
336 }
337 
DEFAULT_NULL()338 EGLPlatformParameters DEFAULT_NULL()
339 {
340     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE, EGL_DONT_CARE,
341                                  EGL_DONT_CARE, EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE);
342 }
343 
D3D9()344 EGLPlatformParameters D3D9()
345 {
346     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE,
347                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
348 }
349 
D3D9_NULL()350 EGLPlatformParameters D3D9_NULL()
351 {
352     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE,
353                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE);
354 }
355 
D3D9_REFERENCE()356 EGLPlatformParameters D3D9_REFERENCE()
357 {
358     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE,
359                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_REFERENCE_ANGLE);
360 }
361 
D3D11()362 EGLPlatformParameters D3D11()
363 {
364     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE,
365                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
366 }
367 
D3D11_PRESENT_PATH_FAST()368 EGLPlatformParameters D3D11_PRESENT_PATH_FAST()
369 {
370     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE,
371                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE,
372                                  EGL_EXPERIMENTAL_PRESENT_PATH_FAST_ANGLE);
373 }
374 
D3D11_FL11_1()375 EGLPlatformParameters D3D11_FL11_1()
376 {
377     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 11, 1,
378                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
379 }
380 
D3D11_FL11_0()381 EGLPlatformParameters D3D11_FL11_0()
382 {
383     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 11, 0,
384                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
385 }
386 
D3D11_FL10_1()387 EGLPlatformParameters D3D11_FL10_1()
388 {
389     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 10, 1,
390                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
391 }
392 
D3D11_FL10_0()393 EGLPlatformParameters D3D11_FL10_0()
394 {
395     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 10, 0,
396                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
397 }
398 
D3D11_NULL()399 EGLPlatformParameters D3D11_NULL()
400 {
401     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE,
402                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE);
403 }
404 
D3D11_WARP()405 EGLPlatformParameters D3D11_WARP()
406 {
407     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE,
408                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_WARP_ANGLE);
409 }
410 
D3D11_FL11_1_WARP()411 EGLPlatformParameters D3D11_FL11_1_WARP()
412 {
413     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 11, 1,
414                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_WARP_ANGLE);
415 }
416 
D3D11_FL11_0_WARP()417 EGLPlatformParameters D3D11_FL11_0_WARP()
418 {
419     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 11, 0,
420                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_WARP_ANGLE);
421 }
422 
D3D11_FL10_1_WARP()423 EGLPlatformParameters D3D11_FL10_1_WARP()
424 {
425     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 10, 1,
426                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_WARP_ANGLE);
427 }
428 
D3D11_FL10_0_WARP()429 EGLPlatformParameters D3D11_FL10_0_WARP()
430 {
431     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 10, 0,
432                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_WARP_ANGLE);
433 }
434 
D3D11_REFERENCE()435 EGLPlatformParameters D3D11_REFERENCE()
436 {
437     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE,
438                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_REFERENCE_ANGLE);
439 }
440 
D3D11_FL11_1_REFERENCE()441 EGLPlatformParameters D3D11_FL11_1_REFERENCE()
442 {
443     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 11, 1,
444                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_REFERENCE_ANGLE);
445 }
446 
D3D11_FL11_0_REFERENCE()447 EGLPlatformParameters D3D11_FL11_0_REFERENCE()
448 {
449     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 11, 0,
450                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_REFERENCE_ANGLE);
451 }
452 
D3D11_FL10_1_REFERENCE()453 EGLPlatformParameters D3D11_FL10_1_REFERENCE()
454 {
455     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 10, 1,
456                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_REFERENCE_ANGLE);
457 }
458 
D3D11_FL10_0_REFERENCE()459 EGLPlatformParameters D3D11_FL10_0_REFERENCE()
460 {
461     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, 10, 0,
462                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_D3D_REFERENCE_ANGLE);
463 }
464 
OPENGL()465 EGLPlatformParameters OPENGL()
466 {
467     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE);
468 }
469 
OPENGL(EGLint major,EGLint minor)470 EGLPlatformParameters OPENGL(EGLint major, EGLint minor)
471 {
472     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE, major, minor, EGL_DONT_CARE);
473 }
474 
OPENGL_NULL()475 EGLPlatformParameters OPENGL_NULL()
476 {
477     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE,
478                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE);
479 }
480 
OPENGLES()481 EGLPlatformParameters OPENGLES()
482 {
483     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE);
484 }
485 
OPENGLES(EGLint major,EGLint minor)486 EGLPlatformParameters OPENGLES(EGLint major, EGLint minor)
487 {
488     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE, major, minor,
489                                  EGL_DONT_CARE);
490 }
491 
OPENGLES_NULL()492 EGLPlatformParameters OPENGLES_NULL()
493 {
494     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE, EGL_DONT_CARE,
495                                  EGL_DONT_CARE, EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE);
496 }
497 
OPENGL_OR_GLES()498 EGLPlatformParameters OPENGL_OR_GLES()
499 {
500 #if defined(ANGLE_PLATFORM_ANDROID)
501     return OPENGLES();
502 #else
503     return OPENGL();
504 #endif
505 }
506 
OPENGL_OR_GLES(EGLint major,EGLint minor)507 EGLPlatformParameters OPENGL_OR_GLES(EGLint major, EGLint minor)
508 {
509 #if defined(ANGLE_PLATFORM_ANDROID)
510     return OPENGLES(major, minor);
511 #else
512     return OPENGL(major, minor);
513 #endif
514 }
515 
OPENGL_OR_GLES_NULL()516 EGLPlatformParameters OPENGL_OR_GLES_NULL()
517 {
518 #if defined(ANGLE_PLATFORM_ANDROID)
519     return OPENGLES_NULL();
520 #else
521     return OPENGL_NULL();
522 #endif
523 }
524 
VULKAN()525 EGLPlatformParameters VULKAN()
526 {
527     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE);
528 }
529 
VULKAN_NULL()530 EGLPlatformParameters VULKAN_NULL()
531 {
532     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE,
533                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE);
534 }
535 
VULKAN_SWIFTSHADER()536 EGLPlatformParameters VULKAN_SWIFTSHADER()
537 {
538     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE, EGL_DONT_CARE, EGL_DONT_CARE,
539                                  EGL_PLATFORM_ANGLE_DEVICE_TYPE_SWIFTSHADER_ANGLE);
540 }
METAL()541 EGLPlatformParameters METAL()
542 {
543     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE);
544 }
545 
WEBGPU()546 EGLPlatformParameters WEBGPU()
547 {
548     return EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_WEBGPU_ANGLE);
549 }
550 
551 }  // namespace egl_platform
552 
553 // ANGLE tests platforms
ES1_D3D9()554 PlatformParameters ES1_D3D9()
555 {
556     return PlatformParameters(EGL_OPENGL_ES_API, 1, 0, 0, egl_platform::D3D9());
557 }
558 
ES2_D3D9()559 PlatformParameters ES2_D3D9()
560 {
561     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::D3D9());
562 }
563 
ES1_D3D11()564 PlatformParameters ES1_D3D11()
565 {
566     return PlatformParameters(EGL_OPENGL_ES_API, 1, 0, 0, egl_platform::D3D11());
567 }
568 
ES2_D3D11()569 PlatformParameters ES2_D3D11()
570 {
571     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::D3D11());
572 }
573 
ES2_D3D11_PRESENT_PATH_FAST()574 PlatformParameters ES2_D3D11_PRESENT_PATH_FAST()
575 {
576     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::D3D11_PRESENT_PATH_FAST());
577 }
578 
ES2_D3D11_FL11_0()579 PlatformParameters ES2_D3D11_FL11_0()
580 {
581     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::D3D11_FL11_0());
582 }
583 
ES2_D3D11_FL10_1()584 PlatformParameters ES2_D3D11_FL10_1()
585 {
586     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::D3D11_FL10_1());
587 }
588 
ES2_D3D11_FL10_0()589 PlatformParameters ES2_D3D11_FL10_0()
590 {
591     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::D3D11_FL10_0());
592 }
593 
ES2_D3D11_WARP()594 PlatformParameters ES2_D3D11_WARP()
595 {
596     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::D3D11_WARP());
597 }
598 
ES2_D3D11_FL11_0_WARP()599 PlatformParameters ES2_D3D11_FL11_0_WARP()
600 {
601     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::D3D11_FL11_0_WARP());
602 }
603 
ES2_D3D11_FL10_1_WARP()604 PlatformParameters ES2_D3D11_FL10_1_WARP()
605 {
606     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::D3D11_FL10_1_WARP());
607 }
608 
ES2_D3D11_FL10_0_WARP()609 PlatformParameters ES2_D3D11_FL10_0_WARP()
610 {
611     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::D3D11_FL10_0_WARP());
612 }
613 
ES2_D3D11_REFERENCE()614 PlatformParameters ES2_D3D11_REFERENCE()
615 {
616     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::D3D11_REFERENCE());
617 }
618 
ES2_D3D11_FL11_0_REFERENCE()619 PlatformParameters ES2_D3D11_FL11_0_REFERENCE()
620 {
621     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::D3D11_FL11_0_REFERENCE());
622 }
623 
ES2_D3D11_FL10_1_REFERENCE()624 PlatformParameters ES2_D3D11_FL10_1_REFERENCE()
625 {
626     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::D3D11_FL10_1_REFERENCE());
627 }
628 
ES2_D3D11_FL10_0_REFERENCE()629 PlatformParameters ES2_D3D11_FL10_0_REFERENCE()
630 {
631     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::D3D11_FL10_0_REFERENCE());
632 }
633 
ES3_D3D11()634 PlatformParameters ES3_D3D11()
635 {
636     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, egl_platform::D3D11());
637 }
638 
ES3_D3D11_FL11_1()639 PlatformParameters ES3_D3D11_FL11_1()
640 {
641     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, egl_platform::D3D11_FL11_1());
642 }
643 
ES3_D3D11_FL11_0()644 PlatformParameters ES3_D3D11_FL11_0()
645 {
646     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, egl_platform::D3D11_FL11_0());
647 }
648 
ES3_D3D11_FL10_1()649 PlatformParameters ES3_D3D11_FL10_1()
650 {
651     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, egl_platform::D3D11_FL10_1());
652 }
653 
ES31_D3D11()654 PlatformParameters ES31_D3D11()
655 {
656     return PlatformParameters(EGL_OPENGL_ES_API, 3, 1, 0, egl_platform::D3D11());
657 }
658 
ES31_D3D11_FL11_1()659 PlatformParameters ES31_D3D11_FL11_1()
660 {
661     return PlatformParameters(EGL_OPENGL_ES_API, 3, 1, 0, egl_platform::D3D11_FL11_1());
662 }
663 
ES31_D3D11_FL11_0()664 PlatformParameters ES31_D3D11_FL11_0()
665 {
666     return PlatformParameters(EGL_OPENGL_ES_API, 3, 1, 0, egl_platform::D3D11_FL11_0());
667 }
668 
ES3_D3D11_WARP()669 PlatformParameters ES3_D3D11_WARP()
670 {
671     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, egl_platform::D3D11_WARP());
672 }
673 
ES3_D3D11_FL11_1_WARP()674 PlatformParameters ES3_D3D11_FL11_1_WARP()
675 {
676     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, egl_platform::D3D11_FL11_1_WARP());
677 }
678 
ES3_D3D11_FL11_0_WARP()679 PlatformParameters ES3_D3D11_FL11_0_WARP()
680 {
681     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, egl_platform::D3D11_FL11_0_WARP());
682 }
683 
ES3_D3D11_FL10_1_WARP()684 PlatformParameters ES3_D3D11_FL10_1_WARP()
685 {
686     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, egl_platform::D3D11_FL10_1_WARP());
687 }
688 
ES1_OPENGLES()689 PlatformParameters ES1_OPENGLES()
690 {
691     return PlatformParameters(EGL_OPENGL_ES_API, 1, 0, 0, egl_platform::OPENGLES());
692 }
693 
ES2_OPENGLES()694 PlatformParameters ES2_OPENGLES()
695 {
696     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::OPENGLES());
697 }
698 
ES2_OPENGLES(EGLint major,EGLint minor)699 PlatformParameters ES2_OPENGLES(EGLint major, EGLint minor)
700 {
701     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::OPENGLES(major, minor));
702 }
703 
ES3_OPENGLES()704 PlatformParameters ES3_OPENGLES()
705 {
706     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, egl_platform::OPENGLES());
707 }
708 
ES3_OPENGLES(EGLint major,EGLint minor)709 PlatformParameters ES3_OPENGLES(EGLint major, EGLint minor)
710 {
711     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, egl_platform::OPENGLES(major, minor));
712 }
713 
ES31_OPENGLES()714 PlatformParameters ES31_OPENGLES()
715 {
716     return PlatformParameters(EGL_OPENGL_ES_API, 3, 1, 0, egl_platform::OPENGLES());
717 }
718 
ES31_OPENGLES(EGLint major,EGLint minor)719 PlatformParameters ES31_OPENGLES(EGLint major, EGLint minor)
720 {
721     return PlatformParameters(EGL_OPENGL_ES_API, 3, 1, 0, egl_platform::OPENGLES(major, minor));
722 }
723 
ES1_OPENGL()724 PlatformParameters ES1_OPENGL()
725 {
726     return PlatformParameters(EGL_OPENGL_ES_API, 1, 0, 0, egl_platform::OPENGL());
727 }
728 
ES2_OPENGL()729 PlatformParameters ES2_OPENGL()
730 {
731     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::OPENGL());
732 }
733 
ES2_OPENGL(EGLint major,EGLint minor)734 PlatformParameters ES2_OPENGL(EGLint major, EGLint minor)
735 {
736     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::OPENGL(major, minor));
737 }
738 
ES3_OPENGL()739 PlatformParameters ES3_OPENGL()
740 {
741     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, egl_platform::OPENGL());
742 }
743 
ES3_OPENGL(EGLint major,EGLint minor)744 PlatformParameters ES3_OPENGL(EGLint major, EGLint minor)
745 {
746     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, egl_platform::OPENGL(major, minor));
747 }
748 
ES31_OPENGL()749 PlatformParameters ES31_OPENGL()
750 {
751     return PlatformParameters(EGL_OPENGL_ES_API, 3, 1, 0, egl_platform::OPENGL());
752 }
753 
ES31_OPENGL(EGLint major,EGLint minor)754 PlatformParameters ES31_OPENGL(EGLint major, EGLint minor)
755 {
756     return PlatformParameters(EGL_OPENGL_ES_API, 3, 1, 0, egl_platform::OPENGL(major, minor));
757 }
758 
ES1_NULL()759 PlatformParameters ES1_NULL()
760 {
761     return PlatformParameters(EGL_OPENGL_ES_API, 1, 0, 0,
762                               EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE));
763 }
764 
ES2_NULL()765 PlatformParameters ES2_NULL()
766 {
767     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0,
768                               EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE));
769 }
770 
ES3_NULL()771 PlatformParameters ES3_NULL()
772 {
773     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0,
774                               EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE));
775 }
776 
ES31_NULL()777 PlatformParameters ES31_NULL()
778 {
779     return PlatformParameters(EGL_OPENGL_ES_API, 3, 1, 0,
780                               EGLPlatformParameters(EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE));
781 }
782 
ES1_VULKAN()783 PlatformParameters ES1_VULKAN()
784 {
785     return PlatformParameters(EGL_OPENGL_ES_API, 1, 0, 0, egl_platform::VULKAN());
786 }
787 
ES1_VULKAN_NULL()788 PlatformParameters ES1_VULKAN_NULL()
789 {
790     return PlatformParameters(EGL_OPENGL_ES_API, 1, 0, 0, egl_platform::VULKAN_NULL());
791 }
792 
ES1_VULKAN_SWIFTSHADER()793 PlatformParameters ES1_VULKAN_SWIFTSHADER()
794 {
795     return PlatformParameters(EGL_OPENGL_ES_API, 1, 0, 0, egl_platform::VULKAN_SWIFTSHADER());
796 }
797 
ES2_VULKAN()798 PlatformParameters ES2_VULKAN()
799 {
800     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::VULKAN());
801 }
802 
ES2_VULKAN_NULL()803 PlatformParameters ES2_VULKAN_NULL()
804 {
805     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::VULKAN_NULL());
806 }
807 
ES2_VULKAN_SWIFTSHADER()808 PlatformParameters ES2_VULKAN_SWIFTSHADER()
809 {
810     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::VULKAN_SWIFTSHADER());
811 }
812 
ES3_VULKAN()813 PlatformParameters ES3_VULKAN()
814 {
815     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, egl_platform::VULKAN());
816 }
817 
ES3_VULKAN_NULL()818 PlatformParameters ES3_VULKAN_NULL()
819 {
820     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, egl_platform::VULKAN_NULL());
821 }
822 
ES3_VULKAN_SWIFTSHADER()823 PlatformParameters ES3_VULKAN_SWIFTSHADER()
824 {
825     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, egl_platform::VULKAN_SWIFTSHADER());
826 }
827 
ES31_VULKAN()828 PlatformParameters ES31_VULKAN()
829 {
830     return PlatformParameters(EGL_OPENGL_ES_API, 3, 1, 0, egl_platform::VULKAN());
831 }
832 
ES31_VULKAN_NULL()833 PlatformParameters ES31_VULKAN_NULL()
834 {
835     return PlatformParameters(EGL_OPENGL_ES_API, 3, 1, 0, egl_platform::VULKAN_NULL());
836 }
837 
ES31_VULKAN_SWIFTSHADER()838 PlatformParameters ES31_VULKAN_SWIFTSHADER()
839 {
840     return PlatformParameters(EGL_OPENGL_ES_API, 3, 1, 0, egl_platform::VULKAN_SWIFTSHADER());
841 }
842 
ES32_VULKAN()843 PlatformParameters ES32_VULKAN()
844 {
845     return PlatformParameters(EGL_OPENGL_ES_API, 3, 2, 0, egl_platform::VULKAN());
846 }
847 
ES32_VULKAN_NULL()848 PlatformParameters ES32_VULKAN_NULL()
849 {
850     return PlatformParameters(EGL_OPENGL_ES_API, 3, 2, 0, egl_platform::VULKAN_NULL());
851 }
852 
ES32_VULKAN_SWIFTSHADER()853 PlatformParameters ES32_VULKAN_SWIFTSHADER()
854 {
855     return PlatformParameters(EGL_OPENGL_ES_API, 3, 2, 0, egl_platform::VULKAN_SWIFTSHADER());
856 }
857 
GL32_CORE_VULKAN()858 PlatformParameters GL32_CORE_VULKAN()
859 {
860     return PlatformParameters(EGL_OPENGL_API, 3, 2, EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT,
861                               egl_platform::VULKAN());
862 }
863 
GL32_CORE_VULKAN_SWIFTSHADER()864 PlatformParameters GL32_CORE_VULKAN_SWIFTSHADER()
865 {
866     return PlatformParameters(EGL_OPENGL_API, 3, 2, EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT,
867                               egl_platform::VULKAN_SWIFTSHADER());
868 }
869 
ES1_METAL()870 PlatformParameters ES1_METAL()
871 {
872     return PlatformParameters(EGL_OPENGL_ES_API, 1, 0, 0, egl_platform::METAL());
873 }
874 
ES2_METAL()875 PlatformParameters ES2_METAL()
876 {
877     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::METAL());
878 }
879 
ES3_METAL()880 PlatformParameters ES3_METAL()
881 {
882     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, egl_platform::METAL());
883 }
884 
ES2_WGL()885 PlatformParameters ES2_WGL()
886 {
887     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, GLESDriverType::SystemWGL);
888 }
889 
ES3_WGL()890 PlatformParameters ES3_WGL()
891 {
892     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, GLESDriverType::SystemWGL);
893 }
894 
ES1_EGL()895 PlatformParameters ES1_EGL()
896 {
897     return PlatformParameters(EGL_OPENGL_ES_API, 1, 0, 0, GLESDriverType::SystemEGL);
898 }
899 
ES2_EGL()900 PlatformParameters ES2_EGL()
901 {
902     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, GLESDriverType::SystemEGL);
903 }
904 
ES3_EGL()905 PlatformParameters ES3_EGL()
906 {
907     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, GLESDriverType::SystemEGL);
908 }
909 
ES31_EGL()910 PlatformParameters ES31_EGL()
911 {
912     return PlatformParameters(EGL_OPENGL_ES_API, 3, 1, 0, GLESDriverType::SystemEGL);
913 }
914 
ES32_EGL()915 PlatformParameters ES32_EGL()
916 {
917     return PlatformParameters(EGL_OPENGL_ES_API, 3, 2, 0, GLESDriverType::SystemEGL);
918 }
919 
ES1_ANGLE_Vulkan_Secondaries()920 PlatformParameters ES1_ANGLE_Vulkan_Secondaries()
921 {
922     return WithVulkanSecondaries(ES1_VULKAN());
923 }
924 
ES2_ANGLE_Vulkan_Secondaries()925 PlatformParameters ES2_ANGLE_Vulkan_Secondaries()
926 {
927     return WithVulkanSecondaries(ES2_VULKAN());
928 }
929 
ES3_ANGLE_Vulkan_Secondaries()930 PlatformParameters ES3_ANGLE_Vulkan_Secondaries()
931 {
932     return WithVulkanSecondaries(ES3_VULKAN());
933 }
934 
ES31_ANGLE_Vulkan_Secondaries()935 PlatformParameters ES31_ANGLE_Vulkan_Secondaries()
936 {
937     return WithVulkanSecondaries(ES31_VULKAN());
938 }
939 
ES32_ANGLE_Vulkan_Secondaries()940 PlatformParameters ES32_ANGLE_Vulkan_Secondaries()
941 {
942     return WithVulkanSecondaries(ES32_VULKAN());
943 }
944 
ES2_WEBGPU()945 PlatformParameters ES2_WEBGPU()
946 {
947     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, egl_platform::WEBGPU());
948 }
949 
ES1_Zink()950 PlatformParameters ES1_Zink()
951 {
952     return PlatformParameters(EGL_OPENGL_ES_API, 1, 0, 0, GLESDriverType::ZinkEGL);
953 }
954 
ES2_Zink()955 PlatformParameters ES2_Zink()
956 {
957     return PlatformParameters(EGL_OPENGL_ES_API, 2, 0, 0, GLESDriverType::ZinkEGL);
958 }
959 
ES3_Zink()960 PlatformParameters ES3_Zink()
961 {
962     return PlatformParameters(EGL_OPENGL_ES_API, 3, 0, 0, GLESDriverType::ZinkEGL);
963 }
964 
ES31_Zink()965 PlatformParameters ES31_Zink()
966 {
967     return PlatformParameters(EGL_OPENGL_ES_API, 3, 1, 0, GLESDriverType::ZinkEGL);
968 }
969 
ES32_Zink()970 PlatformParameters ES32_Zink()
971 {
972     return PlatformParameters(EGL_OPENGL_ES_API, 3, 2, 0, GLESDriverType::ZinkEGL);
973 }
974 
975 }  // namespace angle
976