OpenGL 4.6 Released With Vulkan/SPIR-V Ingestion, Parallel Shader Compiles & Finally AF
As we have been anticipating for weeks/months, a new formal update to OpenGL has been in the works and it's officially out today. Meet OpenGL 4.6! This is a pretty significant update and internally they had the debate whether to call it OpenGL 5.0, but here we are with OpenGL 4.6 that features Vulkan/SPIR-V extensions and more. The good news is the open-source Mesa drivers aren't too far out from OpenGL 4.6 support, at least RadeonSI and Intel.
One of the big features of OpenGL 4.6 is the ability to invest SPIR-V shaders by mandating the GL_ARB_gl_spirv and GL_ARB_spirv_extensions. ARB_gl_spirv itself has been public for a while now is mandated by GL 4.6. ARB_gl_spirv allows for SPIR-V modules to be loaded and used rather than just GLSL. SPIR-V, of course, is the intermediate representation used by Vulkan and OpenCL 2.1+. AMD developers have been working on ARB_gl_spirv for RadeonSI but as of writing it isn't yet mainlined in the tree. It may still be a while before this support is ready given the invasive work and re-using some of RADV's NIR code-paths, etc.
Another prominent addition to OpenGL 4.6 is finally having anisotropic filtering support as part of core OpenGL. Previously, IP/patents prevented OpenGL from having native AF support. The anisotropic filtering is available via ARB_texture_filter_anisotropic, which is similar to the EXT_texture_filter_anisotropic extension that's already been available. The Mesa drivers do not yet support this extension.
Some of the "approaching zero driver overhead" extensions are now part of OpenGL 4.6, but not all. ARB_indirect_parameters and ARB_shader_draw_parameters are mandated by OpenGL 4.6 and using then allows for lowering the overhead with rendering batches of geometry. ARB_pipeline_statistics_query and ARB_transform_feedback_overflow_query are also included with OpenGL 4.6 for matching some functionality found under Direct3D. Intel and RadeonSI already support ARB_pipeline_statistics_query while only the Intel driver so far handles ARB_transform_feedback_overflow_query. Also new is ARB_shader_atomic_counter_ops and ARB_shader_group_vote: both of these extensions are already supported by Intel, NVC0, and RadeonSI.
Additionally, OpenGL 4.6 now integrates KHR_no_error support. Mesa developers -- particularly those employed by Valve -- have been doing a lot of KHR_no_error for Mesa. This extension is about disabling OpenGL drivers' error checking functionality to reduce CPU overhead / gain greater performance, but at the risk of undefined behavior if OpenGL errors were to occur while this is toggled. Mesa Git users can experiment with it right now via the MESA_NO_ERROR environment variable.
Also new with OpenGL 4.6 is the ARB_polygon_offset_clamp extension that's derived from the EXT_polygon_offset_clamp extension for suppressing light leaks when rendering shadows. The Mesa drivers do not yet support this extension. That rounds off the new extensions promoted with OpenGL 4.6 while there are also some new extensions too.
New extensions alongside OpenGL 4.6 is GL_KHR_parallel_shader_compile and GLX_ARB_create_context_no_error. The GLX extension is about allowing a no-error context to be created in tandem with KHR_no_error support. Hopefully we will see Linux games begin to make use of GLX_ARB_create_context_no_error for their production builds to avoid having to deal with any no-error white-listing or the aforementioned environment variable override.
The KHR_parallel_shader_compile extension is very exciting and is about allowing applications/games to launch multiple shader compile threads. I haven't yet seen any KHR_parallel_shader_compile patches for the Mesa drivers.
Today's announcement also officiates GL_EXT_memory_object and related extensions and GL_EXT_semaphore extensions for better Vulkan / Direct3D interoperability but not required for GL 4.6 compliance. Work is going on there already for Mesa support.
That's what is exciting about this morning's OpenGL 4.6 debut. NVIDIA has already confirmed they will be shipping a beta Linux/Windows driver this morning with OpenGL 4.6 support (Update: Already available is the NVIDIA OpenGL 4.6 driver). There's no word on an updated AMDGPU-PRO driver for GL 4.6, but probably not today.
For the Mesa stack as covered throughout this article, Intel and RadeonSI at least support a number of the extensions (Nouveau NVC0 does for some of them too, but they will lag behind especially with no SPIR-V support as of now / no Nouveau Vulkan driver). So at least for Intel/RadeonSI it shouldn't be too long before seeing OpenGL 4.6 support, but it may still be a while if there holdups around ARB_gl_spirv support. It's too late for Mesa 17.2, but let's hope for next quarter's Mesa 17.3. The KHR_parallel_shader_compile extension should also be interesting as well and can't wait to see its impact on performance for faster game load times.
If you enjoyed this article consider joining Phoronix Premium to view this site ad-free, multi-page articles on a single page, and other benefits. PayPal or Stripe tips are also graciously accepted. Thanks for your support.