Mesa: error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawArrays

Hi all

I am building ParaView/5.11.2-foss-2023a module on our HPC system for our users, using EasyBuild. For now, I have successfully compiled ParaView on our Intel Skylake nodes under Rocky Linux 8.9.

However, a simple ‘Sphere’ example fails to actually ‘Render()’ the sphere. Similarly, the OpenGL information query fails like this (where I have massively trimmed off repeated error messages):

>>> openGLInfo = GetOpenGLInformation()
( 702.880s) [paraview        ] vtkEGLRenderWindow.cxx:666   WARN| vtkEGLRenderWindow (0x5ec9df0): Unable to eglMakeCurrent: 12290
Mesa: error: GL_INVALID_ENUM in glEnable(GL_POINT_SPRITE)
( 702.881s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: error: GL_INVALID_ENUM in glTexImage2DMultisample(internalformat=GL_NONE)
( 702.882s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: error: GL_INVALID_VALUE in glTexImage2D(internalFormat=GL_NONE)
Mesa: error: 2 similar GL_INVALID_VALUE errors
Mesa: error: GL_INVALID_VALUE in glUniform1i(invalid sampler/tex unit index for uniform 0)
Mesa: error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawArrays
( 702.998s) [paraview        ] vtkEGLRenderWindow.cxx:666   WARN| vtkEGLRenderWindow (0x5ec9df0): Unable to eglMakeCurrent: 12290
Mesa: error: GL_INVALID_FRAMEBUFFER_OPERATION in glBlitFramebuffer(incomplete draw/read buffers)
( 702.999s) [paraview        ] vtkEGLRenderWindow.cxx:666   WARN| vtkEGLRenderWindow (0x5ec9df0): Unable to eglMakeCurrent: 12290

However, if I rebuild the same module with the same dependencies with OSMESA, then I can run the simple ‘Sphere’ example and take a screenshot of the off-screen rendering as a file. For this build, I have used the following compiler flags:

-DVTK_OPENGL_HAS_EGL=OFF \
-DVTK_USE_X=OFF \
-DVTK_USE_SDL2=OFF \
-DVTK_OPENGL_HAS_OSMESA=ON

Now, my question is how can I still use the nomal ParaView (i.e. without OSMESA) and yet do not get the error blow up when using pvpython --no-mpi for the simple ‘Sphere’ example?

Thanks in advance
Ehsan (VSC/KU Leuven, Belgium)

If OSMesa works, it sounds like the available OpenGL driver on the machine is not suitable.

Cc: @mwestphal @Sankhesh_Jhaveri

Hi @moravveji, since you’ve disabled Xlib support, vtk is trying to use EGL for rendering. And it seems like the egl is coming from mesa. Have you tried installing a newer mesa?

Thanks @Sankhesh_Jhaveri for your reply.
As the Easybuild recipe for ParaView mentions, this specific version of ParaView which I am testing is built against MESA/23.1.4-GCCcore-12.3.0. Is that recent enough for the correct handling of EGL from MESA?

We build with 23.1.6, so (modulo bug fixes), it looks recent enough to me.

Fair enough.
Then, back to your earlier reply, the VTK is explicitly set to use EGL by passing -DVTK_OPENGL_HAS_EGL=ON to CMake. I wonder if this is sufficient go get VTK working properly in pvpython?

Furthermore, I realized that the simple sphere example can be executed directly like paraview --no-mpi --script sphere.py, and this one succeeds. Hence, I did not require pvpython for this. But, I wonder now whether paraview --script can fully replace using pvpython? In other words, are there still feature differences between the two?

yes

I wonder now whether paraview --script can fully replace using pvpython? In other words, are there still feature differences between the two?

paraview --script run ParaView (the Qt interface) then run a python script. pvpython run a python script. the pvpython approach is much much lighter.

Indeed, using pvpython is supposed to be much lighter (if I manage to get it working).

Anyhow, I do not see this discussion resulting in any solution or suggestion that I can try out. Seems like the version of Mesa is sufficiently recent and the compilation flags are properly passed. So, nothing more to experiment in that regard.

Still, I would appreciate if you guys have any suggestion for me to fix this VTK/EGL issue which is only raised in pvpython and not with paraview itself.
If our hands are empty, I shall close this thread.