12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- // Copyright 2014 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "build/build_config.h"
- #if defined(USE_EGL)
- #include <EGL/egl.h>
- #endif
- #include "ui/gl/gl_bindings.h"
- #if defined(USE_GLX)
- #include "ui/gfx/x/connection.h"
- #include "ui/gfx/x/glx.h"
- #endif
- #if defined(USE_EGL)
- #include "ui/gl/gl_display.h"
- #include "ui/gl/gl_surface_egl.h"
- #endif
- namespace gl {
- #if defined(USE_EGL)
- void DisplayExtensionsEGL::UpdateConditionalExtensionSettings(
- EGLDisplay display) {
- // For the moment, only two extensions can be conditionally disabled
- // through GPU driver bug workarounds mechanism:
- // EGL_KHR_fence_sync
- // EGL_KHR_wait_sync
- // In theory it's OK to allow disabling other EGL extensions, as far as they
- // are not the ones used in GLSurfaceEGL::InitializeOneOff().
- std::string extensions(GetPlatformExtensions(display));
- extensions += " ";
- b_EGL_KHR_fence_sync =
- extensions.find("EGL_KHR_fence_sync ") != std::string::npos;
- b_EGL_KHR_wait_sync =
- extensions.find("EGL_KHR_wait_sync ") != std::string::npos;
- }
- // static
- std::string DisplayExtensionsEGL::GetPlatformExtensions(EGLDisplay display) {
- if (display == EGL_NO_DISPLAY)
- return "";
- const char* str = eglQueryString(display, EGL_EXTENSIONS);
- return str ? std::string(str) : "";
- }
- // static
- std::string ClientExtensionsEGL::GetClientExtensions() {
- const char* str = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
- return str ? std::string(str) : "";
- }
- #endif
- #if defined(USE_GLX)
- std::string DriverGLX::GetPlatformExtensions() {
- auto* connection = x11::Connection::Get();
- const int screen = connection ? connection->DefaultScreenId() : 0;
- const char* str =
- glXQueryExtensionsString(connection->GetXlibDisplay(), screen);
- return str ? std::string(str) : "";
- }
- #endif
- } // namespace gl
|