What Mesa Has Left With OpenGL 3, OpenGL 4
With the release this week of the OpenGL 4.2 specification (and accompanying GL Shading Language 4.20 revision), the TODO list for the open-source Mesa developers just got a bit longer. Mesa / Gallium3D still lacks full support for OpenGL 3.0 and all of the revisions since that 2008 specification release.
The OpenGL 3.0 support in this open-source OpenGL library is slowly coming together (see the many Phoronix articles), but the GL Shading Language 1.30 support is incomplete along with other key areas. Some of the functionality is also limited "out of the box" due to patent / IP restrictions.
Going from OpenGL 2.1 to OpenGL 3.0 is a huge change, so hopefully once the OpenGL 3.0 support is in place, filling in the OpenGL 3.1, 3.2, and 3.3 revisions will take less time. There's also then OpenGL 4.0, 4.1, and 4.2 to now handle. There's a variety of comments within the Phoronix Forums about the OpenGL 4.2 revision, but I would still expect it to be at least two years before Mesa is caught up to the OpenGL 4.2 support level (with the necessary GLSL changes). That also doesn't account for the future OpenGL revisions to be released between now and then. It's a constant game of catch-up for the open-source drivers.
For those interested, below is the GL3/GL4 TODO list (from the Mesa Git tree) that details the current status of key features for each OpenGL 3.x/4.x revision. Even with the features marked as being done, the current code may be limited to supporting a particular graphics driver.
GL 3.0: GLSL 1.30 (GL_EXT_gpu_shader4, etc.) started Conditional rendering (GL_NV_conditional_render) DONE (swrast, softpipe, i965) Map buffer subranges (GL_ARB_map_buffer_range) DONE Clamping controls (GL_ARB_color_buffer_float) DONE Float textures, renderbuffers (GL_ARB_texture_float) DONE (gallium r300) GL_EXT_packed_float DONE (gallium r600) GL_EXT_texture_shared_exponent DONE (gallium, swrast) Float depth buffers (GL_ARB_depth_buffer_float) DONE Framebuffer objects (GL_EXT_framebuffer_object) DONE Half-float DONE Multisample blit DONE Non-normalized Integer texture/framebuffer formats ~50% done 1D/2D Texture arrays core Mesa, swrast done Packed depth/stencil formats DONE Per-buffer blend and masks (GL_EXT_draw_buffers2) DONE GL_EXT_texture_compression_rgtc DONE (swrast, gallium r600) Red and red/green texture formats DONE (swrast, i965, gallium) Transform feedback (GL_EXT_transform_feedback) ~50% done glBindFragDataLocation, glGetFragDataLocation, glBindBufferRange, glBindBufferBase commands Vertex array objects (GL_APPLE_vertex_array_object) DONE sRGB framebuffer format (GL_EXT_framebuffer_sRGB) core GL done (i965, gallium), GLX todo glClearBuffer commands DONE glGetStringi command DONE glTexParameterI, glGetTexParameterI commands DONE glVertexAttribI commands DONE (but converts int values to floats) Depth format cube textures 0% done GLX_ARB_create_context (GLX 1.4 is required) not started GL 3.1: GLSL 1.40 not started Instanced drawing (GL_ARB_draw_instanced) DONE (gallium, swrast) Buffer copying (GL_ARB_copy_buffer) DONE Primitive restart (GL_NV_primitive_restart) DONE (gallium) 16 vertex texture image units DONE Texture buffer objs (GL_ARB_texture_buffer_object) not started Rectangular textures (GL_ARB_texture_rectangle) DONE Uniform buffer objs (GL_ARB_uniform_buffer_object) not started Signed normalized textures (GL_EXT_texture_snorm) DONE (gallium) GL 3.2: Core/compatibility profiles not started GLSL 1.50 not started Geometry shaders (GL_ARB_geometry_shader4) partially done (Zack) BGRA vertex order (GL_ARB_vertex_array_bgra) DONE Base vertex offset(GL_ARB_draw_elements_base_vertex) DONE Frag shader coord (GL_ARB_fragment_coord_conventions) DONE (swrast, gallium) Provoking vertex (GL_ARB_provoking_vertex) DONE Seamless cubemaps (GL_ARB_seamless_cube_map) DONE Multisample textures (GL_ARB_texture_multisample) not started Frag depth clamp (GL_ARB_depth_clamp) DONE Fence objects (GL_ARB_sync) DONE GLX_ARB_create_context_profile not started GL 3.3: GLSL 3.30 not started GL_ARB_blend_func_extended not started GL_ARB_explicit_attrib_location DONE (swrast, i915, i965) GL_ARB_occlusion_query2 DONE (swrast, gallium) GL_ARB_sampler_objects DONE (gallium) GL_ARB_texture_rgb10_a2ui not started GL_ARB_texture_swizzle DONE (same as EXT version) GL_ARB_timer_query ~60% done (the EXT variant) GL_ARB_instanced_arrays DONE (gallium) GL_ARB_vertex_type_2_10_10_10_rev not started GL 4.0: GLSL 4.0 not started GL_ARB_texture_query_lod not started GL_ARB_draw_buffers_blend DONE (gallium softpipe) GL_ARB_draw_indirect not started GL_ARB_gpu_shader_fp64 not started GL_ARB_sample_shading not started GL_ARB_shader_subroutine not started GL_ARB_tessellation_shader not started GL_ARB_texture_buffer_object_rgb32 not started GL_ARB_texture_cube_map_array not started GL_ARB_texture_gather not started GL_ARB_transform_feedback2 not started GL_ARB_transform_feedback3 not started GL 4.1: GLSL 4.1 not started GL_ARB_ES2_compatibility DONE (i965) GL_ARB_get_program_binary not started 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 not started GL_ARB_texture_storage not started GL_ARB_transform_feedback_instanced not started GL_ARB_base_instance not started GL_ARB_shader_image_load_store not started GL_ARB_conservative_depth not started (may be close to AMD_conservative_depth though) GL_ARB_shading_language_420pack not started GL_ARB_internalformat_query not started GL_ARB_map_buffer_alignment not started
Latest Linux News
Latest Articles & Reviews
Most Viewed News This Week