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