OpenGL Framebuffer Object Extension functions missing in libGL.so with 470.74 driver

I work on an application that - as a requirement from a company partner - still has to run on OpenGL 2 and may not (yet) be updated to OpenGL 3. I have now received reports that the application crashes on RHEL 8 when using the 470.74 NVIDIA x86_64 Kernel Module. Upon investigation, the libGL on the system seems to be missing some Framebuffer Object Extension (GL_EXT_framebuffer_object) functions, namely glFramebufferRenderbufferEXT, glCheckFramebufferStatusEXT, glGetRenderbufferParameterivEXT and glGetFramebufferAttachmentParameterivEXT. Of those, we only rely on glFramebufferRenderbufferEXT and glCheckFramebufferStatusEXT, but the absence causes the application to crash on the system.
Does anyone know:

  • Was the removal of these functions intentional or an oversight?
  • Will the functions return in a future driver version? If so, when can this be expected?
  • Which versions of the driver are affected?
  • Will additional functionality be removed? If so, is there a schedule available to developers?

Here is some additional information about the RHEL 8 system we checked the library on:
NVRM version: NVIDIA UNIX x86_64 Kernel Module 470.74 Mon Sep 13 23:09:15 UTC 2021
GCC version: gcc version 8.4.1 20200928 (Red Hat 8.4.1-1) (GCC)
readelf of libGL.so:
libgl_readelf.log (271.1 KB)

I don’t see anything removed on any driver version when looking for glFramebufferRenderbufferEXT. libGL.so though belongs to libglvnd, while the nvidia installer also contains it, it’s most often installed through a distro package. Where does it link to?
ls -l /usr/lib64/libGL.so*

Here is the output of ls:

ls -l /usr/lib64/libGL.so*
lrwxrwxrwx 1 root root 14 16. Nov 2020 /usr/lib64/libGL.so.1 → libGL.so.1.7.0
-rwxr-xr-x 1 root root 559520 16. Nov 2020 /usr/lib64/libGL.so.1.7.0

I usually work on Windows and don’t really have a lot of experience with Linux. Where would the libGL link in case of a Nvidia driver vs the default distro driver?

Looks normal. Your readelf output was truncated, BTW. Use -W option to print to full line.

I noticed that the libGL.so on the system is almost a year older than the libGLX_nvidia.so or the 470.74 driver. Could this mean that the driver was not installed correctly or replaced by some update?

Here is the output that led me to this idea:

$ ls -l /usr/lib64/libGL*
lrwxrwxrwx  1 root root      22 16. Nov 2020  /usr/lib64/libGLdispatch.so.0 -> libGLdispatch.so.0.0.0
-rwxr-xr-x  1 root root  769056 16. Nov 2020  /usr/lib64/libGLdispatch.so.0.0.0
lrwxrwxrwx  1 root root      29 21. Sep 11:19 /usr/lib64/libGLESv1_CM_nvidia.so.1 -> libGLESv1_CM_nvidia.so.470.74
-rwxr-xr-x  1 root root   67880 21. Sep 11:19 /usr/lib64/libGLESv1_CM_nvidia.so.470.74
lrwxrwxrwx  1 root root      21 16. Nov 2020  /usr/lib64/libGLESv1_CM.so.1 -> libGLESv1_CM.so.1.2.0
-rwxr-xr-x  1 root root   43216 16. Nov 2020  /usr/lib64/libGLESv1_CM.so.1.2.0
lrwxrwxrwx  1 root root      26 21. Sep 11:19 /usr/lib64/libGLESv2_nvidia.so.2 -> libGLESv2_nvidia.so.470.74
-rwxr-xr-x  1 root root  117032 21. Sep 11:19 /usr/lib64/libGLESv2_nvidia.so.470.74
lrwxrwxrwx  1 root root      18 16. Nov 2020  /usr/lib64/libGLESv2.so.2 -> libGLESv2.so.2.1.0
-rwxr-xr-x  1 root root   72720 16. Nov 2020  /usr/lib64/libGLESv2.so.2.1.0
lrwxrwxrwx  1 root root      14 16. Nov 2020  /usr/lib64/libGL.so.1 -> libGL.so.1.7.0
-rwxr-xr-x  1 root root  559520 16. Nov 2020  /usr/lib64/libGL.so.1.7.0
lrwxrwxrwx. 1 root root      15 12. Aug 2018  /usr/lib64/libGLU.so.1 -> libGLU.so.1.3.1
-rwxr-xr-x. 1 root root  488632 12. Aug 2018  /usr/lib64/libGLU.so.1.3.1
lrwxrwxrwx  1 root root      23 21. Sep 11:19 /usr/lib64/libGLX_indirect.so.0 -> libGLX_nvidia.so.470.74
lrwxrwxrwx  1 root root      20 25. Mär 2021  /usr/lib64/libGLX_mesa.so.0 -> libGLX_mesa.so.0.0.0
-rwxr-xr-x  1 root root  517936 25. Mär 2021  /usr/lib64/libGLX_mesa.so.0.0.0
lrwxrwxrwx  1 root root      23 21. Sep 11:19 /usr/lib64/libGLX_nvidia.so.0 -> libGLX_nvidia.so.470.74
-rwxr-xr-x  1 root root 1289616 21. Sep 11:19 /usr/lib64/libGLX_nvidia.so.470.74
lrwxrwxrwx  1 root root      15 16. Nov 2020  /usr/lib64/libGLX.so.0 -> libGLX.so.0.0.0
-rwxr-xr-x  1 root root  141824 16. Nov 2020  /usr/lib64/libGLX.so.0.0.0
lrwxrwxrwx  1 root root      27 25. Mär 2021  /usr/lib64/libGLX_system.so.0 -> /usr/lib64/libGLX_mesa.so.0

Like said, libGL.so doesn’t belong to the driver but to GLVND, the vendor-neutral dispatcher, which switches between GL implementations (Mesa/Nvidia) depending on gpu used (intel/amd/nvidia). It’s perfectly fine, 1.7.0 being the latest version.

BTW, which was the last driver version that worked for you?