summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Koehne <kai.koehne@qt.io>2018-03-15 11:16:06 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-05-23 13:31:33 +0200
commit3a544b0408aea33513441b7b25f746d402971c78 (patch)
treef7dcff91029f85c5dc61688c25e661c740aba897
parent79e27ed094ad9466b78e441b467ca513d6919021 (diff)
downloadqtwebengine-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-xchromium/ui/gl/generate_bindings.py1
-rw-r--r--chromium/ui/gl/gl_bindings_autogen_wgl.cc35
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"));