diff options
author | Kai Koehne <kai.koehne@qt.io> | 2018-03-15 11:16:06 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-05-23 13:31:33 +0200 |
commit | 3a544b0408aea33513441b7b25f746d402971c78 (patch) | |
tree | f7dcff91029f85c5dc61688c25e661c740aba897 | |
parent | 79e27ed094ad9466b78e441b467ca513d6919021 (diff) | |
download | qtwebengine-chromium-3a544b0408aea33513441b7b25f746d402971c78.tar.gz |
Win: Fix crashes when initializing GPU thread
GLSurfaceQtWGL does need PBuffer support to actually create a
surface. Make sure that the appropriate OpenGL extensions are
initialized already early on.
Before the patch, function pointers to the PBuffer extensions
were only retrieved in DriverWGL::InitializeExtensionBindings().
However, GpuInit::InitializeInProcess does assume that an
offscreen GL surface can be generated even before this is called.
Task-number: QTBUG-66668
Change-Id: I2dc881a9a04733c0edf000a5d4f582009fd7eb92
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
-rwxr-xr-x | chromium/ui/gl/generate_bindings.py | 1 | ||||
-rw-r--r-- | chromium/ui/gl/gl_bindings_autogen_wgl.cc | 35 |
2 files changed, 11 insertions, 25 deletions
diff --git a/chromium/ui/gl/generate_bindings.py b/chromium/ui/gl/generate_bindings.py index c20f860cca5..28e0cd17cc5 100755 --- a/chromium/ui/gl/generate_bindings.py +++ b/chromium/ui/gl/generate_bindings.py @@ -24,6 +24,7 @@ HEADER_PATHS = [ UNCONDITIONALLY_BOUND_EXTENSIONS = set([ 'WGL_ARB_extensions_string', 'WGL_EXT_extensions_string', + 'WGL_ARB_pbuffer', 'GL_CHROMIUM_gles_depth_binding_hack', # crbug.com/448206 'GL_CHROMIUM_glgetstringi_hack', # crbug.com/470396 'GL_CHROMIUM_egl_khr_fence_sync_hack', # crbug.com/504758 diff --git a/chromium/ui/gl/gl_bindings_autogen_wgl.cc b/chromium/ui/gl/gl_bindings_autogen_wgl.cc index 547cf7300a5..539ed27da26 100644 --- a/chromium/ui/gl/gl_bindings_autogen_wgl.cc +++ b/chromium/ui/gl/gl_bindings_autogen_wgl.cc @@ -34,8 +34,12 @@ void DriverWGL::InitializeStaticBindings() { GetGLProcAddress("wglCreateContext")); fn.wglCreateLayerContextFn = reinterpret_cast<wglCreateLayerContextProc>( GetGLProcAddress("wglCreateLayerContext")); + fn.wglCreatePbufferARBFn = reinterpret_cast<wglCreatePbufferARBProc>( + GetGLProcAddress("wglCreatePbufferARB")); fn.wglDeleteContextFn = reinterpret_cast<wglDeleteContextProc>( GetGLProcAddress("wglDeleteContext")); + fn.wglDestroyPbufferARBFn = reinterpret_cast<wglDestroyPbufferARBProc>( + GetGLProcAddress("wglDestroyPbufferARB")); fn.wglGetCurrentContextFn = reinterpret_cast<wglGetCurrentContextProc>( GetGLProcAddress("wglGetCurrentContext")); fn.wglGetCurrentDCFn = reinterpret_cast<wglGetCurrentDCProc>( @@ -46,8 +50,14 @@ void DriverWGL::InitializeStaticBindings() { fn.wglGetExtensionsStringEXTFn = reinterpret_cast<wglGetExtensionsStringEXTProc>( GetGLProcAddress("wglGetExtensionsStringEXT")); + fn.wglGetPbufferDCARBFn = reinterpret_cast<wglGetPbufferDCARBProc>( + GetGLProcAddress("wglGetPbufferDCARB")); fn.wglMakeCurrentFn = reinterpret_cast<wglMakeCurrentProc>(GetGLProcAddress("wglMakeCurrent")); + fn.wglQueryPbufferARBFn = reinterpret_cast<wglQueryPbufferARBProc>( + GetGLProcAddress("wglQueryPbufferARB")); + fn.wglReleasePbufferDCARBFn = reinterpret_cast<wglReleasePbufferDCARBProc>( + GetGLProcAddress("wglReleasePbufferDCARB")); fn.wglShareListsFn = reinterpret_cast<wglShareListsProc>(GetGLProcAddress("wglShareLists")); fn.wglSwapLayerBuffersFn = reinterpret_cast<wglSwapLayerBuffersProc>( @@ -81,31 +91,6 @@ void DriverWGL::InitializeExtensionBindings() { GetGLProcAddress("wglCreateContextAttribsARB")); } - if (ext.b_WGL_ARB_pbuffer) { - fn.wglCreatePbufferARBFn = reinterpret_cast<wglCreatePbufferARBProc>( - GetGLProcAddress("wglCreatePbufferARB")); - } - - if (ext.b_WGL_ARB_pbuffer) { - fn.wglDestroyPbufferARBFn = reinterpret_cast<wglDestroyPbufferARBProc>( - GetGLProcAddress("wglDestroyPbufferARB")); - } - - if (ext.b_WGL_ARB_pbuffer) { - fn.wglGetPbufferDCARBFn = reinterpret_cast<wglGetPbufferDCARBProc>( - GetGLProcAddress("wglGetPbufferDCARB")); - } - - if (ext.b_WGL_ARB_pbuffer) { - fn.wglQueryPbufferARBFn = reinterpret_cast<wglQueryPbufferARBProc>( - GetGLProcAddress("wglQueryPbufferARB")); - } - - if (ext.b_WGL_ARB_pbuffer) { - fn.wglReleasePbufferDCARBFn = reinterpret_cast<wglReleasePbufferDCARBProc>( - GetGLProcAddress("wglReleasePbufferDCARB")); - } - if (ext.b_WGL_EXT_swap_control) { fn.wglSwapIntervalEXTFn = reinterpret_cast<wglSwapIntervalEXTProc>( GetGLProcAddress("wglSwapIntervalEXT")); |