$OpenBSD: patch-ui_gl_gl_bindings_autogen_glx_cc,v 1.5 2016/05/28 14:49:39 robert Exp $
--- ui/gl/gl_bindings_autogen_glx.cc.orig.port	Thu May 26 08:38:20 2016
+++ ui/gl/gl_bindings_autogen_glx.cc	Thu May 26 08:38:28 2016
@@ -74,6 +74,7 @@ void DriverGLX::InitializeStaticBindings() {
   fn.glXGetFBConfigsFn = reinterpret_cast<glXGetFBConfigsProc>(
       GetGLProcAddress("glXGetFBConfigs"));
   fn.glXGetMscRateOMLFn = 0;
+  fn.glXGetProcAddressARBFn = 0;
   fn.glXGetSelectedEventFn = reinterpret_cast<glXGetSelectedEventProc>(
       GetGLProcAddress("glXGetSelectedEvent"));
   fn.glXGetSyncValuesOMLFn = 0;
@@ -121,6 +122,8 @@ void DriverGLX::InitializeExtensionBindings() {
 
   ext.b_GLX_ARB_create_context =
       extensions.find("GLX_ARB_create_context ") != std::string::npos;
+  ext.b_GLX_ARB_get_proc_address =
+      extensions.find("GLX_ARB_get_proc_address ") != std::string::npos;
   ext.b_GLX_EXT_swap_control =
       extensions.find("GLX_EXT_swap_control ") != std::string::npos;
   ext.b_GLX_EXT_texture_from_pixmap =
@@ -168,6 +171,12 @@ void DriverGLX::InitializeExtensionBindings() {
         GetGLProcAddress("glXGetMscRateOML"));
   }
 
+  debug_fn.glXGetProcAddressARBFn = 0;
+  if (ext.b_GLX_ARB_get_proc_address) {
+    fn.glXGetProcAddressARBFn = reinterpret_cast<glXGetProcAddressARBProc>(
+        GetGLProcAddress("glXGetProcAddressARB"));
+  }
+
   debug_fn.glXGetSyncValuesOMLFn = 0;
   if (ext.b_GLX_OML_sync_control) {
     fn.glXGetSyncValuesOMLFn = reinterpret_cast<glXGetSyncValuesOMLProc>(
@@ -541,6 +550,17 @@ static bool GL_BINDING_CALL Debug_glXGetMscRateOML(Dis
   return result;
 }
 
+static __GLXextFuncPtr GL_BINDING_CALL
+Debug_glXGetProcAddressARB(const GLubyte* procName) {
+  GL_SERVICE_LOG("glXGetProcAddressARB"
+                 << "(" << static_cast<const void*>(procName) << ")");
+  DCHECK(g_driver_glx.debug_fn.glXGetProcAddressARBFn != nullptr);
+  __GLXextFuncPtr result =
+      g_driver_glx.debug_fn.glXGetProcAddressARBFn(procName);
+  GL_SERVICE_LOG("GL_RESULT: " << result);
+  return result;
+}
+
 static void GL_BINDING_CALL Debug_glXGetSelectedEvent(Display* dpy,
                                                       GLXDrawable drawable,
                                                       unsigned long* mask) {
@@ -889,6 +909,10 @@ void DriverGLX::InitializeDebugBindings() {
     debug_fn.glXGetMscRateOMLFn = fn.glXGetMscRateOMLFn;
     fn.glXGetMscRateOMLFn = Debug_glXGetMscRateOML;
   }
+  if (!debug_fn.glXGetProcAddressARBFn) {
+    debug_fn.glXGetProcAddressARBFn = fn.glXGetProcAddressARBFn;
+    fn.glXGetProcAddressARBFn = Debug_glXGetProcAddressARB;
+  }
   if (!debug_fn.glXGetSelectedEventFn) {
     debug_fn.glXGetSelectedEventFn = fn.glXGetSelectedEventFn;
     fn.glXGetSelectedEventFn = Debug_glXGetSelectedEvent;
@@ -1140,6 +1164,10 @@ bool GLXApiBase::glXGetMscRateOMLFn(Display* dpy,
   return driver_->fn.glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
 }
 
+__GLXextFuncPtr GLXApiBase::glXGetProcAddressARBFn(const GLubyte* procName) {
+  return driver_->fn.glXGetProcAddressARBFn(procName);
+}
+
 void GLXApiBase::glXGetSelectedEventFn(Display* dpy,
                                        GLXDrawable drawable,
                                        unsigned long* mask) {
@@ -1438,6 +1466,11 @@ bool TraceGLXApi::glXGetMscRateOMLFn(Display* dpy,
                                      int32_t* denominator) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXGetMscRateOML")
   return glx_api_->glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
+}
+
+__GLXextFuncPtr TraceGLXApi::glXGetProcAddressARBFn(const GLubyte* procName) {
+  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXGetProcAddressARB")
+  return glx_api_->glXGetProcAddressARBFn(procName);
 }
 
 void TraceGLXApi::glXGetSelectedEventFn(Display* dpy,
