Glxinfo lists four extensions category: sever glx extensions , client glx extensions , glx extensions and OpenGL extensions

I’m working on a really old server graphic card Matrox G200, but I’m new to OpenGL in Linux.
The problem is I’m trying to use some extensions such as AA and multitexture, and the first thing I think I should do is to check glxinfo if such extensions are supported. However, I find glxinfo lists extensions in four categories: sever glx, client glx, glx and OpenGL. The first three lists extensions with GLX prefix. The last one “OpenGL extensions” contains a lot

I really want to know why there are four extensions list and which one I should check to enable some extensions such as AA, please someone may help.

below is some info might be uesful:

direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
 GLX_ARB_context_flush_control, GLX_ARB_create_context, 
    GLX_ARB_create_context_no_error, GLX_ARB_create_context_profile, 
    GLX_ARB_fbconfig_float, GLX_ARB_framebuffer_sRGB, GLX_ARB_multisample, 
    GLX_EXT_create_context_es2_profile, GLX_EXT_create_context_es_profile, 
    GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB, 
    GLX_EXT_import_context, GLX_EXT_libglvnd, GLX_EXT_no_config_context, 
    GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating, 
    GLX_MESA_copy_sub_buffer, GLX_OML_swap_method, GLX_SGIS_multisample, 
    GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group, 
    GLX_SGI_make_current_read


client glx vendor string: Mesa Project and SGI
client glx version string: 1.4
client glx extensions:
 GLX_ARB_create_context, GLX_ARB_create_context_profile, 
    GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float, 
    GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample, 
    GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile, 
    GLX_EXT_create_context_es_profile, GLX_EXT_fbconfig_packed_float, 
    GLX_EXT_framebuffer_sRGB, GLX_EXT_import_context, 
    GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating, 
    GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer, 
    GLX_MESA_multithread_makecurrent, GLX_MESA_query_renderer, 
    GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control, 
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
    GLX_SGIX_visual_select_group, GLX_SGI_make_current_read, 
    GLX_SGI_swap_control, GLX_SGI_video_sync


GLX version: 1.4
GLX extensions:
GLX_ARB_create_context, GLX_ARB_create_context_profile, 
    GLX_ARB_fbconfig_float, GLX_ARB_framebuffer_sRGB, 
    GLX_ARB_get_proc_address, GLX_ARB_multisample, 
    GLX_EXT_create_context_es2_profile, GLX_EXT_create_context_es_profile, 
    GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB, 
    GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, 
    GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer, 
    GLX_MESA_multithread_makecurrent, GLX_MESA_query_renderer, 
    GLX_OML_swap_method, GLX_SGIS_multisample, GLX_SGIX_fbconfig, 
    GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group, GLX_SGI_make_current_read

OpenGL vendor string: VMware, Inc.
OpenGL renderer string: Gallium 0.4 on llvmpipe (LLVM 3.9, 256 bits)
OpenGL version string: 2.1 Mesa 17.0.1
OpenGL shading language version string: 1.30
OpenGL extensions:
    GL_AMD_conservative_depth, GL_AMD_draw_buffers_blend, 
    GL_AMD_seamless_cubemap_per_texture, GL_AMD_shader_stencil_export, 
    GL_AMD_shader_trinary_minmax, GL_APPLE_packed_pixels, 
    GL_APPLE_vertex_array_object, GL_ARB_ES2_compatibility, 
    GL_ARB_ES3_compatibility, GL_ARB_arrays_of_arrays, GL_ARB_base_instance, 
    GL_ARB_blend_func_extended, GL_ARB_buffer_storage, 
    GL_ARB_clear_buffer_object, GL_ARB_clip_control, 
    GL_ARB_color_buffer_float, GL_ARB_compressed_texture_pixel_storage, 
    GL_ARB_conditional_render_inverted, GL_ARB_conservative_depth, 
    GL_ARB_copy_buffer, GL_ARB_copy_image, GL_ARB_cull_distance, 
    GL_ARB_debug_output, GL_ARB_depth_buffer_float, GL_ARB_depth_clamp,
..................

glXQueryServerString, glXGetClientString, glXQueryExtensionsString and glGetString(GL_EXTENSIONS). The first three only report GLX extensions, the fourth OpenGL extensions.

Use glXQueryExtensionsString for GLX extensions, glGetString(GL_EXTENSIONS) for OpenGL extensions.

But you should check the versions before checking extensions. E.g. multitexture is incorporated into OpenGL 1.3. Implementations often expose extensions even when they are incorporated into the core, but they aren’t required to.

It’s not clear what you mean by “AA”. GL_POLYGON_SMOOTH etc is part of OpenGL 1.0; multisample framebuffers are provided by the GLX_ARB_multisample extension or GLX 1.4.

You’re not performing OpenGL rendering on that GPU. You’re using the Mesa3D software rasterizer.

What’s your $DISPLAY set to? Try setting it to :0 to connect directly to the local X server. Or provide it on the command-line: glxinfo -display :0

The G200 is 25 years old. Even if the G200 driver is still maintained, it’s not going to support multisample and possibly not multitexture either.

thanks for reply.
I’m confused by the relationship between glx extensions and OpenGL extensions. In my case, I have OpenGL extension GL_ARB_multitexture but has no multitexture extension in both client and sever GLX extension list.
So can I use multitexture extension given OpenGL version is 2.1 Mesa 17.0.1?

For AA, I do mean anti-aliasing. I tried glEnable(GL_POLYGON_SMOOTH) with GL_NICEST but nothing happened so I moved to multisampling.
Another thing confused me a lot is that glxinfo shows there’s ZERO number of multiSample and multiSample buffers, but lists GLX_ARB_multisample, GLX_SGIS_multisample (in sever and client extension list) and GL_ARB_multisample in OpenGL extension list. Does it mean that I can use this extension or not?

thanks for reply.
You are right, I’m using software rasterizer. I got “llvmpipe” from glGetString(GL_RENDERER).

$DISPLAY is hostname:1001

Do you suggest this might be inappropriate install of driver or just because this G200 is too old and system decides to use software rasterizer?

GLX extensions add new GLX functions or modify the behaviour of existing GLX functions. OpenGL extensions add new OpenGL functions or modify the behaviour of existing OpenGL functions.

There is no GLX extension related to multitexture.

ARB_multisample consists of both an OpenGL extension and a GLX extension (both are covered in the same extension specification) because it adds new OpenGL functions (glSampleCoverage) and modifies existing OpenGL functions (new enumerants for glEnable, glGet, etc), and also modifies existing GLX functions (adds GLX_SAMPLE_BUFFERS and GLX_SAMPLES enumerants for glXChooseVisual and glXGetConfig).

Yes. If the version is 1.3 or later, then multitexture is supported.

glEnable(GL_POLYGON_SMOOTH) causes boundary fragments to have partial alpha values. By itself, this doesn’t affect rendering. In order to be useful, the framebuffer needs to have an alpha channel and you have to enable blending with a blending function which uses the alpha values. Also, polygons need to be drawn front-to-back without depth testing. This last point makes it relatively awkward to use (compared to multisample), but it’s available (and functional) in every OpenGL version. Multisample requires at least 1.3, but an implementation can “support” multisampling while only supporting one sample per pixel.

It means that you can “use” the extension in the sense that the implementation won’t generate an error if you include GLX_SAMPLE_BUFFERS_ARB and/or GLX_SAMPLES_ARB in the attribute list for glXChooseVisual, or call glEnable(GL_MULTISAMPLE_ARB), etc. It doesn’t guarantee that the implementation will support more than one sample per pixel. The maximum number of samples is implementation-dependent.

No. Not knowing your requirements (hardware, performance, etc.), I just wanted you to realize that your OpenGL rendering results on that system (with that config) have absolutely nothing to do with the Matrix G200 AGP GPU card that’s installed in that old box. It’s purely dependent on that Mesa3D software rasterizer and the speed of your CPU/CPU memory/network. So depending on your requirements (hardware, performance) you might be better served by just running on a system with a faster/newer CPU and possibly GPU.

Ok, so you’re not direct connected to the local X server for display but rather throwing the graphics over a network connection. Is this running via an ssh tunnel (X11 forwarding), headless server, or virtual machine?

Also in case it might be useful (depending on your requirements), some GPU vendors provide support for GPU accelerated rendering to offscreen framebuffers on Linux systems that aren’t running a local X server. But that’d involve a hardware upgrade. That system you’re using is pretty old.

Thansk for informative reply.
That’s probably what I have encountered in multi-sampling.

Correct me if I am wrong that number of samples or sample buffers are attributes of window, not OpenGL attributes. While multitexture is actually a process in OpenGL pipeline. That’s why there are multi-sample extensions in GLX and OpenGL, but only has multi-texture in OpenGL extension list.

It’s via VNC. So the 3D rendering is actually done by llvmpipe on remote machine which transfers an image back to my local machine.

Thanks for your advice, I will try to get a better GPU.