The State Of OpenGL 3.x, 4.x Extensions In Mesa
With a number of new OpenGL extensions having been recently added to Mesa, here's a look at where the OpenGL 3.x/4.x support stands today in the open-source OpenGL implementation.
Following all the recent code activity about one month out from the next release, the "GL3.txt" documentation was updated to reflect Mesa's current position in catching up to the latest Khronos Group OpenGL specifications.
What's still blocking Mesa from advertising OpenGL 3.2 compliance is the GL Shading Language (GLSL) 1.50 changes not yet being complete but work is in progress. The OpenGL Geometry Shaders support is also only partially complete at this time.
The good news is that once OpenGL 3.2 support is in place, the only work remaining to advertise OpenGL 3.3 compliance are some new GLSL 3.30 changes, but most of those shading language changes are already complete. Developers are hoping for the next release of Mesa will have OpenGL 3.2~3.3 compliance, which would make the new three-month release as Mesa 10.0 rather than Mesa 9.3. There was a recent presentation about the next Mesa in case you missed it. We'll see in the coming weeks what ultimately happens.
In terms of hitting OpenGL 4.0 support, that isn't likely until sometime in 2014 as there's many GL Shading Language changes, some GL4 extensions are complete, other extensions are only started, and some extensions like the GL_ARB_tessellation_shader haven't even been touched yet.
A fair amount of work on OpenGL 4.1 and OpenGL 4.2 has also been committed, but when it comes to OpenGL 4.3 and OpenGL 4.4 there's still much work left to be completed. Unless there's a fundamental shift and major investment to Mesa, I'd find it unlikely to have OpenGL 4.3~4.4 support in the project until at least 2015.
As usual, the Mesa driver in the best shape for supporting the most OpenGL 3/4 functionality is the Intel DRI driver with most of the major Mesa advancements happening by Intel Open-Source Technology Center developers around their investment in the open-source driver stack.
Below is the complete GL3/GL4 status as of today.
GL 3.2:
Core/compatibility profiles DONE
GLSL 1.50 in progress
Geometry shaders (GL_ARB_geometry_shader4) partially done
BGRA vertex order (GL_ARB_vertex_array_bgra) DONE (i965, r300, r600, swrast)
Base vertex offset(GL_ARB_draw_elements_base_vertex) DONE (i965, r300, r600, swrast)
Frag shader coord (GL_ARB_fragment_coord_conventions) DONE (i965, r300, r600, swrast)
Provoking vertex (GL_ARB_provoking_vertex) DONE (i965, r300, r600, swrast)
Seamless cubemaps (GL_ARB_seamless_cube_map) DONE (i965, r600)
Multisample textures (GL_ARB_texture_multisample) DONE (i965)
Frag depth clamp (GL_ARB_depth_clamp) DONE (i965, r600, swrast)
Fence objects (GL_ARB_sync) DONE (i965, r300, r600, swrast)
GLX_ARB_create_context_profile DONE
GL 3.3:
GLSL 3.30 new features in this version pretty much done
GL_ARB_blend_func_extended DONE (i965, r600, softpipe)
GL_ARB_explicit_attrib_location DONE (i915, i965, r300, r600, swrast)
GL_ARB_occlusion_query2 DONE (i965, r300, r600, swrast)
GL_ARB_sampler_objects DONE (i965, r300, r600)
GL_ARB_shader_bit_encoding DONE
GL_ARB_texture_rgb10_a2ui DONE (i965, r600)
GL_ARB_texture_swizzle DONE (same as EXT version) (i965, r300, r600, swrast)
GL_ARB_timer_query DONE (i965, r600)
GL_ARB_instanced_arrays DONE (i965, r300, r600)
GL_ARB_vertex_type_2_10_10_10_rev DONE (i965, r600)
GL 4.0:
GLSL 4.0 not started
GL_ARB_texture_query_lod DONE (i965)
GL_ARB_draw_buffers_blend DONE (i965, r600, softpipe)
GL_ARB_draw_indirect started (Christoph)
GL_ARB_gpu_shader5 started
GL_ARB_gpu_shader_fp64 not started
GL_ARB_sample_shading started (Anuj)
GL_ARB_shader_subroutine not started
GL_ARB_tessellation_shader not started
GL_ARB_texture_buffer_object_rgb32 DONE (i965, softpipe)
GL_ARB_texture_cube_map_array DONE (i965, softpipe)
GL_ARB_texture_gather DONE (i965)
GL_ARB_transform_feedback2 DONE
GL_ARB_transform_feedback3 DONE
GL 4.1:
GLSL 4.1 not started
GL_ARB_ES2_compatibility DONE (i965, r300, r600)
GL_ARB_get_program_binary DONE (0 binary formats)
GL_ARB_separate_shader_objects some infrastructure done
GL_ARB_shader_precision not started
GL_ARB_vertex_attrib_64bit not started
GL_ARB_viewport_array not started
GL 4.2:
GLSL 4.2 not started
GL_ARB_texture_compression_bptc not started
GL_ARB_compressed_texture_pixel_storage not started
GL_ARB_shader_atomic_counters in progress (Curro)
GL_ARB_texture_storage DONE (i965, r300, r600, swrast, gallium)
GL_ARB_transform_feedback_instanced DONE
GL_ARB_base_instance DONE (i965, nv50, nvc0, r600, radeonsi)
GL_ARB_shader_image_load_store not started
GL_ARB_conservative_depth DONE (i965, softpipe)
GL_ARB_shading_language_420pack DONE (i965, gallium)
GL_ARB_internalformat_query DONE (i965, gallium)
GL_ARB_map_buffer_alignment DONE (r300, r600, radeonsi)
GL 4.3:
GLSL 4.3 not started
ARB_arrays_of_arrays not started
ARB_ES3_compatibility DONE (i965)
ARB_clear_buffer_object not started
ARB_compute_shader started (gallium)
ARB_copy_image not started
KHR_debug DONE
ARB_explicit_uniform_location not started
ARB_fragment_layer_viewport not started
ARB_framebuffer_no_attachments not started
ARB_internalformat_query2 not started
ARB_invalidate_subdata not started
ARB_multi_draw_indirect not started
ARB_program_interface_query not started
ARB_robust_buffer_access_behavior not started
ARB_shader_image_size not started
ARB_shader_storage_buffer_object not started
ARB_stencil_texturing not started
ARB_texture_buffer_range DONE (nv50, nvc0)
ARB_texture_query_levels DONE (i965)
ARB_texture_storage_multisample DONE (i965)
ARB_texture_view not started
ARB_vertex_attrib_binding started (Fredrik)
GL 4.4:
GLSL 4.4 not started
MAX_VERTEX_ATTRIB_STRIDE not started
ARB_buffer_storage not started
ARB_clear_texture not started
ARB_enhanced_layouts not started
ARB_multi_bind not started
ARB_query_buffer_object not started
ARB_texture_mirror_clamp_to_edge not started
ARB_texture_stencil8 not started
ARB_vertex_type_10f_11f_11f_rev not started
Following all the recent code activity about one month out from the next release, the "GL3.txt" documentation was updated to reflect Mesa's current position in catching up to the latest Khronos Group OpenGL specifications.
What's still blocking Mesa from advertising OpenGL 3.2 compliance is the GL Shading Language (GLSL) 1.50 changes not yet being complete but work is in progress. The OpenGL Geometry Shaders support is also only partially complete at this time.
The good news is that once OpenGL 3.2 support is in place, the only work remaining to advertise OpenGL 3.3 compliance are some new GLSL 3.30 changes, but most of those shading language changes are already complete. Developers are hoping for the next release of Mesa will have OpenGL 3.2~3.3 compliance, which would make the new three-month release as Mesa 10.0 rather than Mesa 9.3. There was a recent presentation about the next Mesa in case you missed it. We'll see in the coming weeks what ultimately happens.
In terms of hitting OpenGL 4.0 support, that isn't likely until sometime in 2014 as there's many GL Shading Language changes, some GL4 extensions are complete, other extensions are only started, and some extensions like the GL_ARB_tessellation_shader haven't even been touched yet.
A fair amount of work on OpenGL 4.1 and OpenGL 4.2 has also been committed, but when it comes to OpenGL 4.3 and OpenGL 4.4 there's still much work left to be completed. Unless there's a fundamental shift and major investment to Mesa, I'd find it unlikely to have OpenGL 4.3~4.4 support in the project until at least 2015.
As usual, the Mesa driver in the best shape for supporting the most OpenGL 3/4 functionality is the Intel DRI driver with most of the major Mesa advancements happening by Intel Open-Source Technology Center developers around their investment in the open-source driver stack.
Below is the complete GL3/GL4 status as of today.
GL 3.2:
Core/compatibility profiles DONE
GLSL 1.50 in progress
Geometry shaders (GL_ARB_geometry_shader4) partially done
BGRA vertex order (GL_ARB_vertex_array_bgra) DONE (i965, r300, r600, swrast)
Base vertex offset(GL_ARB_draw_elements_base_vertex) DONE (i965, r300, r600, swrast)
Frag shader coord (GL_ARB_fragment_coord_conventions) DONE (i965, r300, r600, swrast)
Provoking vertex (GL_ARB_provoking_vertex) DONE (i965, r300, r600, swrast)
Seamless cubemaps (GL_ARB_seamless_cube_map) DONE (i965, r600)
Multisample textures (GL_ARB_texture_multisample) DONE (i965)
Frag depth clamp (GL_ARB_depth_clamp) DONE (i965, r600, swrast)
Fence objects (GL_ARB_sync) DONE (i965, r300, r600, swrast)
GLX_ARB_create_context_profile DONE
GL 3.3:
GLSL 3.30 new features in this version pretty much done
GL_ARB_blend_func_extended DONE (i965, r600, softpipe)
GL_ARB_explicit_attrib_location DONE (i915, i965, r300, r600, swrast)
GL_ARB_occlusion_query2 DONE (i965, r300, r600, swrast)
GL_ARB_sampler_objects DONE (i965, r300, r600)
GL_ARB_shader_bit_encoding DONE
GL_ARB_texture_rgb10_a2ui DONE (i965, r600)
GL_ARB_texture_swizzle DONE (same as EXT version) (i965, r300, r600, swrast)
GL_ARB_timer_query DONE (i965, r600)
GL_ARB_instanced_arrays DONE (i965, r300, r600)
GL_ARB_vertex_type_2_10_10_10_rev DONE (i965, r600)
GL 4.0:
GLSL 4.0 not started
GL_ARB_texture_query_lod DONE (i965)
GL_ARB_draw_buffers_blend DONE (i965, r600, softpipe)
GL_ARB_draw_indirect started (Christoph)
GL_ARB_gpu_shader5 started
GL_ARB_gpu_shader_fp64 not started
GL_ARB_sample_shading started (Anuj)
GL_ARB_shader_subroutine not started
GL_ARB_tessellation_shader not started
GL_ARB_texture_buffer_object_rgb32 DONE (i965, softpipe)
GL_ARB_texture_cube_map_array DONE (i965, softpipe)
GL_ARB_texture_gather DONE (i965)
GL_ARB_transform_feedback2 DONE
GL_ARB_transform_feedback3 DONE
GL 4.1:
GLSL 4.1 not started
GL_ARB_ES2_compatibility DONE (i965, r300, r600)
GL_ARB_get_program_binary DONE (0 binary formats)
GL_ARB_separate_shader_objects some infrastructure done
GL_ARB_shader_precision not started
GL_ARB_vertex_attrib_64bit not started
GL_ARB_viewport_array not started
GL 4.2:
GLSL 4.2 not started
GL_ARB_texture_compression_bptc not started
GL_ARB_compressed_texture_pixel_storage not started
GL_ARB_shader_atomic_counters in progress (Curro)
GL_ARB_texture_storage DONE (i965, r300, r600, swrast, gallium)
GL_ARB_transform_feedback_instanced DONE
GL_ARB_base_instance DONE (i965, nv50, nvc0, r600, radeonsi)
GL_ARB_shader_image_load_store not started
GL_ARB_conservative_depth DONE (i965, softpipe)
GL_ARB_shading_language_420pack DONE (i965, gallium)
GL_ARB_internalformat_query DONE (i965, gallium)
GL_ARB_map_buffer_alignment DONE (r300, r600, radeonsi)
GL 4.3:
GLSL 4.3 not started
ARB_arrays_of_arrays not started
ARB_ES3_compatibility DONE (i965)
ARB_clear_buffer_object not started
ARB_compute_shader started (gallium)
ARB_copy_image not started
KHR_debug DONE
ARB_explicit_uniform_location not started
ARB_fragment_layer_viewport not started
ARB_framebuffer_no_attachments not started
ARB_internalformat_query2 not started
ARB_invalidate_subdata not started
ARB_multi_draw_indirect not started
ARB_program_interface_query not started
ARB_robust_buffer_access_behavior not started
ARB_shader_image_size not started
ARB_shader_storage_buffer_object not started
ARB_stencil_texturing not started
ARB_texture_buffer_range DONE (nv50, nvc0)
ARB_texture_query_levels DONE (i965)
ARB_texture_storage_multisample DONE (i965)
ARB_texture_view not started
ARB_vertex_attrib_binding started (Fredrik)
GL 4.4:
GLSL 4.4 not started
MAX_VERTEX_ATTRIB_STRIDE not started
ARB_buffer_storage not started
ARB_clear_texture not started
ARB_enhanced_layouts not started
ARB_multi_bind not started
ARB_query_buffer_object not started
ARB_texture_mirror_clamp_to_edge not started
ARB_texture_stencil8 not started
ARB_vertex_type_10f_11f_11f_rev not started
11 Comments