1 // 2 // Copyright 2018 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 // EGLPlatformParameters: Basic description of an EGL device. 7 8 #ifndef UTIL_EGLPLATFORMPARAMETERS_H_ 9 #define UTIL_EGLPLATFORMPARAMETERS_H_ 10 11 #include "util/util_gl.h" 12 13 #include "angle_features_autogen.h" 14 15 #include <string> 16 #include <tuple> 17 #include <vector> 18 19 namespace angle 20 { 21 struct PlatformMethods; 22 23 // The GLES driver type determines what shared object we use to load the GLES entry points. 24 // AngleEGL loads from ANGLE's version of libEGL, libGLESv2, and libGLESv1_CM. 25 // SystemEGL uses the system copies of libEGL, libGLESv2, and libGLESv1_CM. 26 // SystemWGL loads Windows GL with the GLES compatibility extensions. See util/WGLWindow.h. 27 enum class GLESDriverType 28 { 29 AngleEGL, 30 SystemEGL, 31 SystemWGL, 32 }; 33 } // namespace angle 34 35 struct EGLPlatformParameters 36 { 37 EGLPlatformParameters() = default; 38 EGLPlatformParametersEGLPlatformParameters39 explicit EGLPlatformParameters(EGLint renderer) : renderer(renderer) {} 40 EGLPlatformParametersEGLPlatformParameters41 EGLPlatformParameters(EGLint renderer, 42 EGLint majorVersion, 43 EGLint minorVersion, 44 EGLint deviceType) 45 : renderer(renderer), 46 majorVersion(majorVersion), 47 minorVersion(minorVersion), 48 deviceType(deviceType) 49 {} 50 EGLPlatformParametersEGLPlatformParameters51 EGLPlatformParameters(EGLint renderer, 52 EGLint majorVersion, 53 EGLint minorVersion, 54 EGLint deviceType, 55 EGLint presentPath) 56 : renderer(renderer), 57 majorVersion(majorVersion), 58 minorVersion(minorVersion), 59 deviceType(deviceType), 60 presentPath(presentPath) 61 {} 62 tieEGLPlatformParameters63 auto tie() const 64 { 65 return std::tie(renderer, majorVersion, minorVersion, deviceType, presentPath, 66 debugLayersEnabled, robustness, displayPowerPreference, 67 disabledFeatureOverrides, enabledFeatureOverrides, platformMethods); 68 } 69 70 // Helpers to enable and disable ANGLE features. Expects a kFeature* value from 71 // angle_features_autogen.h. enableEGLPlatformParameters72 EGLPlatformParameters &enable(angle::Feature feature) 73 { 74 enabledFeatureOverrides.push_back(feature); 75 return *this; 76 } disableEGLPlatformParameters77 EGLPlatformParameters &disable(angle::Feature feature) 78 { 79 disabledFeatureOverrides.push_back(feature); 80 return *this; 81 } 82 83 EGLint renderer = EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE; 84 EGLint majorVersion = EGL_DONT_CARE; 85 EGLint minorVersion = EGL_DONT_CARE; 86 EGLint deviceType = EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE; 87 EGLint presentPath = EGL_DONT_CARE; 88 EGLint debugLayersEnabled = EGL_DONT_CARE; 89 EGLint robustness = EGL_DONT_CARE; 90 EGLint displayPowerPreference = EGL_DONT_CARE; 91 92 std::vector<angle::Feature> enabledFeatureOverrides; 93 std::vector<angle::Feature> disabledFeatureOverrides; 94 95 angle::PlatformMethods *platformMethods = nullptr; 96 }; 97 98 inline bool operator<(const EGLPlatformParameters &a, const EGLPlatformParameters &b) 99 { 100 return a.tie() < b.tie(); 101 } 102 103 inline bool operator==(const EGLPlatformParameters &a, const EGLPlatformParameters &b) 104 { 105 return a.tie() == b.tie(); 106 } 107 108 inline bool operator!=(const EGLPlatformParameters &a, const EGLPlatformParameters &b) 109 { 110 return a.tie() != b.tie(); 111 } 112 113 #endif // UTIL_EGLPLATFORMPARAMETERS_H_ 114