| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/gl/init/gl_initializer.h" | 5 #include "ui/gl/init/gl_initializer.h" |
| 6 | 6 |
| 7 #include <dwmapi.h> | 7 #include <dwmapi.h> |
| 8 | 8 |
| 9 #include "base/at_exit.h" | 9 #include "base/at_exit.h" |
| 10 #include "base/base_paths.h" | 10 #include "base/base_paths.h" |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
| 13 #include "base/files/file_path.h" | 13 #include "base/files/file_path.h" |
| 14 #include "base/lazy_instance.h" |
| 14 #include "base/logging.h" | 15 #include "base/logging.h" |
| 15 #include "base/native_library.h" | 16 #include "base/native_library.h" |
| 16 #include "base/path_service.h" | 17 #include "base/path_service.h" |
| 17 #include "base/strings/stringprintf.h" | 18 #include "base/strings/stringprintf.h" |
| 18 #include "base/threading/thread_restrictions.h" | 19 #include "base/threading/thread_restrictions.h" |
| 19 #include "base/trace_event/trace_event.h" | 20 #include "base/trace_event/trace_event.h" |
| 20 #include "base/win/windows_version.h" | 21 #include "base/win/windows_version.h" |
| 22 // TODO(jmadill): Apply to all platforms eventually |
| 23 #include "ui/gl/angle_platform_impl.h" |
| 21 #include "ui/gl/gl_bindings.h" | 24 #include "ui/gl/gl_bindings.h" |
| 22 #include "ui/gl/gl_egl_api_implementation.h" | 25 #include "ui/gl/gl_egl_api_implementation.h" |
| 23 #include "ui/gl/gl_features.h" | 26 #include "ui/gl/gl_features.h" |
| 24 #include "ui/gl/gl_gl_api_implementation.h" | 27 #include "ui/gl/gl_gl_api_implementation.h" |
| 25 #include "ui/gl/gl_osmesa_api_implementation.h" | 28 #include "ui/gl/gl_osmesa_api_implementation.h" |
| 26 #include "ui/gl/gl_surface_egl.h" | 29 #include "ui/gl/gl_surface_egl.h" |
| 27 #include "ui/gl/gl_surface_wgl.h" | 30 #include "ui/gl/gl_surface_wgl.h" |
| 28 #include "ui/gl/gl_wgl_api_implementation.h" | 31 #include "ui/gl/gl_wgl_api_implementation.h" |
| 29 #include "ui/gl/vsync_provider_win.h" | 32 #include "ui/gl/vsync_provider_win.h" |
| 30 | 33 |
| 31 namespace gl { | 34 namespace gl { |
| 32 namespace init { | 35 namespace init { |
| 33 | 36 |
| 34 namespace { | 37 namespace { |
| 35 | 38 |
| 36 const wchar_t kD3DCompiler[] = L"D3DCompiler_47.dll"; | 39 const wchar_t kD3DCompiler[] = L"D3DCompiler_47.dll"; |
| 37 | 40 |
| 41 // TODO(jmadill): Apply to all platforms eventually |
| 42 base::LazyInstance<ANGLEPlatformImpl> g_angle_platform_impl = |
| 43 LAZY_INSTANCE_INITIALIZER; |
| 44 |
| 45 ANGLEPlatformShutdownFunc g_angle_platform_shutdown = nullptr; |
| 46 |
| 38 bool LoadD3DXLibrary(const base::FilePath& module_path, | 47 bool LoadD3DXLibrary(const base::FilePath& module_path, |
| 39 const base::FilePath::StringType& name) { | 48 const base::FilePath::StringType& name) { |
| 40 base::NativeLibrary library = | 49 base::NativeLibrary library = |
| 41 base::LoadNativeLibrary(base::FilePath(name), nullptr); | 50 base::LoadNativeLibrary(base::FilePath(name), nullptr); |
| 42 if (!library) { | 51 if (!library) { |
| 43 library = base::LoadNativeLibrary(module_path.Append(name), nullptr); | 52 library = base::LoadNativeLibrary(module_path.Append(name), nullptr); |
| 44 if (!library) { | 53 if (!library) { |
| 45 DVLOG(1) << name << " not found."; | 54 DVLOG(1) << name << " not found."; |
| 46 return false; | 55 return false; |
| 47 } | 56 } |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 // Register key so that SwiftShader doesn't display watermark logo. | 145 // Register key so that SwiftShader doesn't display watermark logo. |
| 137 typedef void (__stdcall *RegisterFunc)(const char* key); | 146 typedef void (__stdcall *RegisterFunc)(const char* key); |
| 138 RegisterFunc reg = reinterpret_cast<RegisterFunc>( | 147 RegisterFunc reg = reinterpret_cast<RegisterFunc>( |
| 139 base::GetFunctionPointerFromNativeLibrary(gles_library, "Register")); | 148 base::GetFunctionPointerFromNativeLibrary(gles_library, "Register")); |
| 140 if (reg) { | 149 if (reg) { |
| 141 reg("SS3GCKK6B448CF63"); | 150 reg("SS3GCKK6B448CF63"); |
| 142 } | 151 } |
| 143 } | 152 } |
| 144 #endif | 153 #endif |
| 145 | 154 |
| 155 if (!using_swift_shader) { |
| 156 // Init ANGLE platform here, before we call GetPlatformDisplay(). |
| 157 // TODO(jmadill): Apply to all platforms eventually |
| 158 ANGLEPlatformInitializeFunc angle_platform_init = |
| 159 reinterpret_cast<ANGLEPlatformInitializeFunc>( |
| 160 base::GetFunctionPointerFromNativeLibrary( |
| 161 gles_library, "ANGLEPlatformInitialize")); |
| 162 if (angle_platform_init) { |
| 163 angle_platform_init(&g_angle_platform_impl.Get()); |
| 164 |
| 165 g_angle_platform_shutdown = reinterpret_cast<ANGLEPlatformShutdownFunc>( |
| 166 base::GetFunctionPointerFromNativeLibrary(gles_library, |
| 167 "ANGLEPlatformShutdown")); |
| 168 } |
| 169 } |
| 170 |
| 146 GLGetProcAddressProc get_proc_address = | 171 GLGetProcAddressProc get_proc_address = |
| 147 reinterpret_cast<GLGetProcAddressProc>( | 172 reinterpret_cast<GLGetProcAddressProc>( |
| 148 base::GetFunctionPointerFromNativeLibrary(egl_library, | 173 base::GetFunctionPointerFromNativeLibrary(egl_library, |
| 149 "eglGetProcAddress")); | 174 "eglGetProcAddress")); |
| 150 if (!get_proc_address) { | 175 if (!get_proc_address) { |
| 151 LOG(ERROR) << "eglGetProcAddress not found."; | 176 LOG(ERROR) << "eglGetProcAddress not found."; |
| 152 base::UnloadNativeLibrary(egl_library); | 177 base::UnloadNativeLibrary(egl_library); |
| 153 base::UnloadNativeLibrary(gles_library); | 178 base::UnloadNativeLibrary(gles_library); |
| 154 return false; | 179 return false; |
| 155 } | 180 } |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 } | 313 } |
| 289 | 314 |
| 290 void InitializeDebugGLBindings() { | 315 void InitializeDebugGLBindings() { |
| 291 InitializeDebugGLBindingsEGL(); | 316 InitializeDebugGLBindingsEGL(); |
| 292 InitializeDebugGLBindingsGL(); | 317 InitializeDebugGLBindingsGL(); |
| 293 InitializeDebugGLBindingsOSMESA(); | 318 InitializeDebugGLBindingsOSMESA(); |
| 294 InitializeDebugGLBindingsWGL(); | 319 InitializeDebugGLBindingsWGL(); |
| 295 } | 320 } |
| 296 | 321 |
| 297 void ShutdownGLPlatform() { | 322 void ShutdownGLPlatform() { |
| 298 GLSurfaceEGL::ShutdownOneOff(); | 323 // TODO(jmadill): Apply to all platforms eventually |
| 324 if (g_angle_platform_shutdown) { |
| 325 g_angle_platform_shutdown(); |
| 326 } |
| 327 |
| 299 ClearBindingsEGL(); | 328 ClearBindingsEGL(); |
| 300 ClearBindingsGL(); | 329 ClearBindingsGL(); |
| 301 ClearBindingsOSMESA(); | 330 ClearBindingsOSMESA(); |
| 302 ClearBindingsWGL(); | 331 ClearBindingsWGL(); |
| 303 } | 332 } |
| 304 | 333 |
| 305 } // namespace init | 334 } // namespace init |
| 306 } // namespace gl | 335 } // namespace gl |
| OLD | NEW |