diff --git a/src/libANGLE/renderer/gl/egl/gbm/DisplayGbm.cpp b/src/libANGLE/renderer/gl/egl/gbm/DisplayGbm.cpp index 4b68e2a155028..427443a97eaf1 100644 --- a/src/libANGLE/renderer/gl/egl/gbm/DisplayGbm.cpp +++ b/src/libANGLE/renderer/gl/egl/gbm/DisplayGbm.cpp @@ -924,24 +924,36 @@ egl::Error DisplayGbm::makeCurrent(egl::Surface *drawSurface, egl::ConfigSet DisplayGbm::generateConfigs() { - egl::ConfigSet configs; - - egl::Config config; - config.bufferSize = 32; - config.redSize = 8; - config.greenSize = 8; - config.blueSize = 8; - config.alphaSize = 8; - config.depthSize = 24; - config.stencilSize = 8; - config.bindToTextureRGBA = EGL_TRUE; - config.renderableType = EGL_OPENGL_ES2_BIT; - config.surfaceType = EGL_WINDOW_BIT | EGL_PBUFFER_BIT; - config.renderTargetFormat = GL_RGBA8; - config.depthStencilFormat = GL_DEPTH24_STENCIL8; - - configs.add(config); - return configs; + + gl::Version eglVersion(mEGL->majorVersion, mEGL->minorVersion); + ASSERT(eglVersion >= gl::Version(1, 4)); + + bool supportES3 = + (eglVersion >= gl::Version(1, 5) || mEGL->hasExtension("EGL_KHR_create_context")) && + (mRenderer->getMaxSupportedESVersion() >= gl::Version(3, 0)); + EGLint renderType = EGL_OPENGL_ES2_BIT | (supportES3 ? EGL_OPENGL_ES3_BIT : 0); + + // clang-format off + std::vector configAttribs8888 = + { + EGL_COLOR_BUFFER_TYPE, EGL_RGB_BUFFER, + // CrOS doesn't support window and pixmaps? + EGL_SURFACE_TYPE, EGL_PBUFFER_BIT, + EGL_CONFIG_CAVEAT, EGL_NONE, + EGL_CONFORMANT, renderType, + EGL_RENDERABLE_TYPE, renderType, + EGL_RED_SIZE, 8, + EGL_GREEN_SIZE, 8, + EGL_BLUE_SIZE, 8, + EGL_ALPHA_SIZE, 8, + EGL_BUFFER_SIZE, 32, + EGL_DEPTH_SIZE, 24, + EGL_NONE + }; + // clang-format on + + mConfigAttribList = configAttribs8888; + return DisplayEGL::generateConfigs(); } bool DisplayGbm::isValidNativeWindow(EGLNativeWindowType window) const