<div dir="ltr"><div>I'd like to ignore GL version and extension requirements in extensions, because they are sometimes added due to laziness of extension authors and the requirements can be unreasonable.</div><div><br></div><div>Marek<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, May 19, 2018 at 9:18 AM, Benedikt Schemmer <span dir="ltr"><<a href="mailto:ben@besd.de" target="_blank">ben@besd.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">These are just a few extensions for which I had the specifications handy, to<br>
get a feel for what this might look like.<br>
<br>
It's already been pointed out that applications might fail because of this.<br>
<br>
(I haven't found an application that does yet but I can only test on 64-bit)<br>
The argument for this change would be that its ok if the application fails<br>
because it does something unexpected and its better to let it explicitly fail<br>
and create a workaround for it than to just silently hope that everything is<br>
going to be alright.<br>
<br>
CC: "Marek Olšák" <<a href="mailto:maraeo@gmail.com">maraeo@gmail.com</a>> <br>
CC: Eric Anholt <<a href="mailto:eric@anholt.net">eric@anholt.net</a>><br>
CC: Emil Velikov <<a href="mailto:emil.l.velikov@gmail.com">emil.l.velikov@gmail.com</a>><br>
CC: Timothy Arceri <<a href="mailto:tarceri@itsqueeze.com">tarceri@itsqueeze.com</a>><br>
CC: Ilia Mirkin <<a href="mailto:imirkin@alum.mit.edu">imirkin@alum.mit.edu</a>><br>
<br>
Signed-off-by: Benedikt Schemmer <<a href="mailto:ben@besd.de">ben@besd.de</a>><br>
---<br>
src/mesa/main/extensions_<wbr>table.h | 98 ++++++++++++++++++++++--------<wbr>----------<br>
1 file changed, 53 insertions(+), 45 deletions(-)<br>
<br>
diff --git a/src/mesa/main/extensions_<wbr>table.h b/src/mesa/main/extensions_<wbr>table.h<br>
index 931e0d4d33..6e3bdbe99c 100644<br>
--- a/src/mesa/main/extensions_<wbr>table.h<br>
+++ b/src/mesa/main/extensions_<wbr>table.h<br>
@@ -6,7 +6,8 @@<br>
#define ANYES2 0<br>
#define x ~0<br>
<br>
-//EXT(name_str , driver_cap ,GLL_ver,GLC_ver, gles_ver, glES2_ver, yyyy)<br>
+//highest GLL_ver = 46, lowest GLC_ver = 30<br>
+//EXT(name_str , driver_cap ,GLL_ver,GLC_ver, gles_ver, glES2_ver, year)<br>
EXT(3DFX_texture_compression_<wbr>FXT1 , TDFX_texture_compression_FXT1 , ANYGLL, ANYGLC, x , x , 1999)<br>
<br>
EXT(AMD_conservative_depth , ARB_conservative_depth , ANYGLL, ANYGLC, x , x , 2009)<br>
@@ -31,60 +32,62 @@ EXT(APPLE_texture_max_level , dummy_true<br>
EXT(ARB_ES2_compatibility , ARB_ES2_compatibility , ANYGLL, ANYGLC, x , x , 2009)<br>
EXT(ARB_ES3_1_compatibility , ARB_ES3_1_compatibility , x , ANYGLC, x , x , 2014)<br>
EXT(ARB_ES3_2_compatibility , ARB_ES3_2_compatibility , x , ANYGLC, x , x , 2015)<br>
-EXT(ARB_ES3_compatibility , ARB_ES3_compatibility , ANYGLL, ANYGLC, x , x , 2012)<br>
-EXT(ARB_arrays_of_arrays , ARB_arrays_of_arrays , ANYGLL, ANYGLC, x , x , 2012)<br>
+EXT(ARB_ES3_compatibility , ARB_ES3_compatibility , 33 , 33 , x , x , 2012) // requires ARB_ES2_compatibility, ARB_invalidate_subdata, ARB_texture_storage, OES_compressed_*<br>
+EXT(ARB_arrays_of_arrays , ARB_arrays_of_arrays , 12 , 12 , x , x , 2012)<br>
EXT(ARB_base_instance , ARB_base_instance , ANYGLL, ANYGLC, x , x , 2011)<br>
EXT(ARB_bindless_texture , ARB_bindless_texture , ANYGLL, ANYGLC, x , x , 2013)<br>
EXT(ARB_blend_func_extended , ARB_blend_func_extended , ANYGLL, ANYGLC, x , x , 2009)<br>
EXT(ARB_buffer_storage , ARB_buffer_storage , ANYGLL, ANYGLC, x , x , 2013)<br>
+//EXT(ARB_cl_event , ARB_cl_event , 31 , 31 , x , x , 2013) // requires GL_ARB_sync<br>
EXT(ARB_clear_buffer_object , dummy_true , ANYGLL, ANYGLC, x , x , 2012)<br>
EXT(ARB_clear_texture , ARB_clear_texture , ANYGLL, ANYGLC, x , x , 2013)<br>
EXT(ARB_clip_control , ARB_clip_control , ANYGLL, ANYGLC, x , x , 2014)<br>
EXT(ARB_color_buffer_float , ARB_color_buffer_float , ANYGLL, ANYGLC, x , x , 2004)<br>
EXT(ARB_compatibility , ARB_compatibility , ANYGLL, x , x , x , 2009)<br>
EXT(ARB_compressed_texture_<wbr>pixel_storage , dummy_true , ANYGLL, ANYGLC, x , x , 2011)<br>
-EXT(ARB_compute_shader , ARB_compute_shader , ANYGLL, ANYGLC, x , x , 2012)<br>
-EXT(ARB_compute_variable_<wbr>group_size , ARB_compute_variable_group_<wbr>size , ANYGLL, ANYGLC, x , x , 2013)<br>
+EXT(ARB_compute_shader , ARB_compute_shader , 42 , 42 , x , x , 2012)<br>
+EXT(ARB_compute_variable_<wbr>group_size , ARB_compute_variable_group_<wbr>size , 42 , 42 , x , x , 2013) //or ARB compute shader<br>
EXT(ARB_conditional_render_<wbr>inverted , ARB_conditional_render_<wbr>inverted , ANYGLL, ANYGLC, x , x , 2014)<br>
EXT(ARB_conservative_depth , ARB_conservative_depth , ANYGLL, ANYGLC, x , x , 2011)<br>
EXT(ARB_copy_buffer , dummy_true , ANYGLL, ANYGLC, x , x , 2008)<br>
-EXT(ARB_copy_image , ARB_copy_image , ANYGLL, ANYGLC, x , x , 2012)<br>
-EXT(ARB_cull_distance , ARB_cull_distance , ANYGLL, ANYGLC, x , x , 2014)<br>
-EXT(ARB_debug_output , dummy_true , ANYGLL, ANYGLC, x , x , 2009)<br>
+EXT(ARB_copy_image , ARB_copy_image , 11 , 11 , x , x , 2012)<br>
+EXT(ARB_cull_distance , ARB_cull_distance , 30 , 30 , x , x , 2014)<br>
+EXT(ARB_debug_output , dummy_true , 11 , 11 , x , x , 2009)<br>
EXT(ARB_depth_buffer_float , ARB_depth_buffer_float , ANYGLL, ANYGLC, x , x , 2008)<br>
EXT(ARB_depth_clamp , ARB_depth_clamp , ANYGLL, ANYGLC, x , x , 2003)<br>
-EXT(ARB_depth_texture , ARB_depth_texture , ANYGLL, x , x , x , 2001)<br>
-EXT(ARB_derivative_control , ARB_derivative_control , ANYGLL, ANYGLC, x , x , 2014)<br>
-EXT(ARB_direct_state_access , dummy_true , x , ANYGLC, x , x , 2014)<br>
+EXT(ARB_depth_texture , ARB_depth_texture , 11 , x , x , x , 2001)<br>
+EXT(ARB_derivative_control , ARB_derivative_control , 40 , 40 , x , x , 2014)<br>
+EXT(ARB_direct_state_access , dummy_true , x , 20 , x , x , 2014)<br>
EXT(ARB_draw_buffers , dummy_true , ANYGLL, ANYGLC, x , x , 2002)<br>
EXT(ARB_draw_buffers_blend , ARB_draw_buffers_blend , ANYGLL, ANYGLC, x , x , 2009)<br>
EXT(ARB_draw_elements_base_<wbr>vertex , ARB_draw_elements_base_vertex , ANYGLL, ANYGLC, x , x , 2009)<br>
EXT(ARB_draw_indirect , ARB_draw_indirect , x , ANYGLC, x , x , 2010)<br>
-EXT(ARB_draw_instanced , ARB_draw_instanced , ANYGLL, ANYGLC, x , x , 2008)<br>
-EXT(ARB_enhanced_layouts , ARB_enhanced_layouts , ANYGLL, ANYGLC, x , x , 2013)<br>
-EXT(ARB_explicit_attrib_<wbr>location , ARB_explicit_attrib_location , ANYGLL, ANYGLC, x , x , 2009)<br>
+EXT(ARB_draw_instanced , ARB_draw_instanced , 20 , 20 , x , x , 2008) // EXT_gpu_shader4 or NV_vertex_program4 or OpenGL 3.0 is required<br>
+EXT(ARB_enhanced_layouts , ARB_enhanced_layouts , 31 , 31 , x , x , 2013)<br>
+EXT(ARB_explicit_attrib_<wbr>location , ARB_explicit_attrib_location , ANYGLL, ANYGLC, x , x , 2009) //GL_ARB_vertex_shader is always available<br>
EXT(ARB_explicit_uniform_<wbr>location , ARB_explicit_uniform_location , ANYGLL, ANYGLC, x , x , 2012)<br>
EXT(ARB_fragment_coord_<wbr>conventions , ARB_fragment_coord_conventions , ANYGLL, ANYGLC, x , x , 2009)<br>
EXT(ARB_fragment_layer_<wbr>viewport , ARB_fragment_layer_viewport , x , ANYGLC, x , x , 2012)<br>
EXT(ARB_fragment_program , ARB_fragment_program , ANYGLL, x , x , x , 2002)<br>
EXT(ARB_fragment_program_<wbr>shadow , ARB_fragment_program_shadow , ANYGLL, x , x , x , 2003)<br>
EXT(ARB_fragment_shader , ARB_fragment_shader , ANYGLL, ANYGLC, x , x , 2002)<br>
-EXT(ARB_framebuffer_no_<wbr>attachments , ARB_framebuffer_no_attachments , ANYGLL, ANYGLC, x , x , 2012)<br>
-EXT(ARB_framebuffer_object , ARB_framebuffer_object , ANYGLL, ANYGLC, x , x , 2005)<br>
+//EXT(ARB_fragment_shader_<wbr>interlock , ARB_fragment_shader_interlock , 42 , 42 , x , x , 2015)<br>
+EXT(ARB_framebuffer_no_<wbr>attachments , ARB_framebuffer_no_attachments , 11 , 11 , x , x , 2012) // requires ARB_framebuffer_object<br>
+EXT(ARB_framebuffer_object , ARB_framebuffer_object , 11 , 11 , x , x , 2005)<br>
EXT(ARB_framebuffer_sRGB , EXT_framebuffer_sRGB , ANYGLL, ANYGLC, x , x , 1998)<br>
EXT(ARB_get_program_binary , dummy_true , ANYGLL, ANYGLC, x , x , 2010)<br>
-EXT(ARB_get_texture_sub_image , dummy_true , ANYGLL, ANYGLC, x , x , 2014)<br>
-EXT(ARB_gl_spirv , ARB_gl_spirv , x , ANYGLC, x , x , 2016)<br>
-EXT(ARB_gpu_shader5 , ARB_gpu_shader5 , 32 , 40 , x , x , 2010)<br>
-EXT(ARB_gpu_shader_fp64 , ARB_gpu_shader_fp64 , x , ANYGLC, x , x , 2010)<br>
-EXT(ARB_gpu_shader_int64 , ARB_gpu_shader_int64 , x , ANYGLC, x , x , 2015)<br>
-EXT(ARB_half_float_pixel , dummy_true , ANYGLL, ANYGLC, x , x , 2003)<br>
+EXT(ARB_get_texture_sub_image , dummy_true , 20 , 20 , x , x , 2014)<br>
+EXT(ARB_gl_spirv , ARB_gl_spirv , x , 33 , x , x , 2016)<br>
+EXT(ARB_gpu_shader5 , ARB_gpu_shader5 , 30 , 30 , x , x , 2010)<br>
+EXT(ARB_gpu_shader_fp64 , ARB_gpu_shader_fp64 , 32 , 32 , x , x , 2010)<br>
+EXT(ARB_gpu_shader_int64 , ARB_gpu_shader_int64 , x , 40 , x , x , 2015)<br>
+EXT(ARB_half_float_pixel , dummy_true , 15 , 15 , x , x , 2003)<br>
EXT(ARB_half_float_vertex , ARB_half_float_vertex , ANYGLL, ANYGLC, x , x , 2008)<br>
-EXT(ARB_indirect_parameters , ARB_indirect_parameters , x , ANYGLC, x , x , 2013)<br>
+EXT(ARB_indirect_parameters , ARB_indirect_parameters , x , 42 , x , x , 2013)<br>
EXT(ARB_instanced_arrays , ARB_instanced_arrays , ANYGLL, ANYGLC, x , x , 2008)<br>
EXT(ARB_internalformat_query , ARB_internalformat_query , ANYGLL, ANYGLC, x , x , 2011)<br>
EXT(ARB_internalformat_query2 , ARB_internalformat_query2 , ANYGLL, ANYGLC, x , x , 2013)<br>
-EXT(ARB_invalidate_subdata , dummy_true , ANYGLL, ANYGLC, x , x , 2012)<br>
+EXT(ARB_invalidate_subdata , dummy_true , 20 , 20 , x , x , 2012)<br>
EXT(ARB_map_buffer_alignment , dummy_true , ANYGLL, ANYGLC, x , x , 2011)<br>
EXT(ARB_map_buffer_range , ARB_map_buffer_range , ANYGLL, ANYGLC, x , x , 2008)<br>
EXT(ARB_multi_bind , dummy_true , ANYGLL, ANYGLC, x , x , 2013)<br>
@@ -97,27 +100,28 @@ EXT(ARB_pipeline_statistics_<wbr>query , ARB_pipeline_statistics_query<br>
EXT(ARB_pixel_buffer_object , EXT_pixel_buffer_object , ANYGLL, ANYGLC, x , x , 2004)<br>
EXT(ARB_point_parameters , EXT_point_parameters , ANYGLL, x , x , x , 1997)<br>
EXT(ARB_point_sprite , ARB_point_sprite , ANYGLL, ANYGLC, x , x , 2003)<br>
-EXT(ARB_polygon_offset_clamp , ARB_polygon_offset_clamp , ANYGLL, ANYGLC, x , x , 2017)<br>
+EXT(ARB_polygon_offset_clamp , ARB_polygon_offset_clamp , 33 , 33 , x , x , 2017)<br>
EXT(ARB_post_depth_coverage , ARB_post_depth_coverage , x , ANYGLC, x , x , 2015)<br>
EXT(ARB_program_interface_<wbr>query , dummy_true , ANYGLL, ANYGLC, x , x , 2012)<br>
EXT(ARB_provoking_vertex , EXT_provoking_vertex , ANYGLL, ANYGLC, x , x , 2009)<br>
EXT(ARB_query_buffer_object , ARB_query_buffer_object , ANYGLL, ANYGLC, x , x , 2013)<br>
-EXT(ARB_robust_buffer_access_<wbr>behavior , ARB_robust_buffer_access_<wbr>behavior , ANYGLL, ANYGLC, x , x , 2012)<br>
+EXT(ARB_robust_buffer_access_<wbr>behavior , ARB_robust_buffer_access_<wbr>behavior , ANYGLL, ANYGLC, x , x , 2012) // requires ARB_robustness extension<br>
EXT(ARB_robustness , dummy_true , ANYGLL, ANYGLC, x , x , 2010)<br>
-EXT(ARB_sample_shading , ARB_sample_shading , ANYGLL, ANYGLC, x , x , 2009)<br>
+EXT(ARB_sample_shading , ARB_sample_shading , 20 , 20 , x , x , 2009)<br>
+//EXT(ARB_sample_locations , ARB_sample_locations , x , x , x , x , 2009<br>
EXT(ARB_sampler_objects , dummy_true , ANYGLL, ANYGLC, x , x , 2009)<br>
-EXT(ARB_seamless_cube_map , ARB_seamless_cube_map , ANYGLL, ANYGLC, x , x , 2009)<br>
+EXT(ARB_seamless_cube_map , ARB_seamless_cube_map , 11 , 11 , x , x , 2009) // requires ARB_texture_cube_map<br>
EXT(ARB_seamless_cubemap_per_<wbr>texture , AMD_seamless_cubemap_per_<wbr>texture , ANYGLL, ANYGLC, x , x , 2013)<br>
-EXT(ARB_separate_shader_<wbr>objects , dummy_true , ANYGLL, ANYGLC, x , x , 2010)<br>
+EXT(ARB_separate_shader_<wbr>objects , dummy_true , ANYGLL, ANYGLC, x , x , 2010) // requires ARB_shader_objects<br>
EXT(ARB_shader_atomic_counter_<wbr>ops , ARB_shader_atomic_counter_ops , ANYGLL, ANYGLC, x , x , 2015)<br>
EXT(ARB_shader_atomic_counters , ARB_shader_atomic_counters , ANYGLL, ANYGLC, x , x , 2011)<br>
EXT(ARB_shader_ballot , ARB_shader_ballot , ANYGLL, ANYGLC, x , x , 2015)<br>
EXT(ARB_shader_bit_encoding , ARB_shader_bit_encoding , ANYGLL, ANYGLC, x , x , 2010)<br>
EXT(ARB_shader_clock , ARB_shader_clock , ANYGLL, ANYGLC, x , x , 2015)<br>
EXT(ARB_shader_draw_parameters , ARB_shader_draw_parameters , ANYGLL, ANYGLC, x , x , 2013)<br>
-EXT(ARB_shader_group_vote , ARB_shader_group_vote , ANYGLL, ANYGLC, x , x , 2013)<br>
-EXT(ARB_shader_image_load_<wbr>store , ARB_shader_image_load_store , ANYGLL, ANYGLC, x , x , 2011)<br>
-EXT(ARB_shader_image_size , ARB_shader_image_size , ANYGLL, ANYGLC, x , x , 2012)<br>
+EXT(ARB_shader_group_vote , ARB_shader_group_vote , 42 , 42 , x , x , 2013)<br>
+EXT(ARB_shader_image_load_<wbr>store , ARB_shader_image_load_store , 30 , 30 , x , x , 2011)<br>
+EXT(ARB_shader_image_size , ARB_shader_image_size , 42 , 42 , x , x , 2012)<br>
EXT(ARB_shader_objects , dummy_true , ANYGLL, ANYGLC, x , x , 2002)<br>
EXT(ARB_shader_precision , ARB_shader_precision , ANYGLL, ANYGLC, x , x , 2010)<br>
EXT(ARB_shader_stencil_export , ARB_shader_stencil_export , ANYGLL, ANYGLC, x , x , 2009)<br>
@@ -130,55 +134,59 @@ EXT(ARB_shading_language_100 , dummy_true<br>
EXT(ARB_shading_language_<wbr>420pack , ARB_shading_language_420pack , ANYGLL, ANYGLC, x , x , 2011)<br>
EXT(ARB_shading_language_<wbr>packing , ARB_shading_language_packing , ANYGLL, ANYGLC, x , x , 2011)<br>
EXT(ARB_shadow , ARB_shadow , ANYGLL, x , x , x , 2001)<br>
+//EXT(ARB_shadow_ambient , ARB_shadow_ambient , 11 , x , x , x , 2001) //requires ARB_shadow<br>
EXT(ARB_sparse_buffer , ARB_sparse_buffer , ANYGLL, ANYGLC, x , x , 2014)<br>
+//EXT(ARB_sparse_texture , ARB_sparse_texture , 11 , 11 , x , x , 2014)<br>
+//EXT(ARB_sparse_texture2 , ARB_sparse_texture2 , 11 , 11 , x , x , 2014) // requires ARB_sparse_texture<br>
+//EXT(ARB_sparse_texture_<wbr>clamp , ARB_sparse_texture_clamp , 11 , 11 , x , x , 2014) // requires ARB_sparse_texture2<br>
EXT(ARB_stencil_texturing , ARB_stencil_texturing , ANYGLL, ANYGLC, x , x , 2012)<br>
-EXT(ARB_sync , ARB_sync , ANYGLL, ANYGLC, x , x , 2003)<br>
+EXT(ARB_sync , ARB_sync , 31 , 31 , x , x , 2003)<br>
EXT(ARB_tessellation_shader , ARB_tessellation_shader , x , ANYGLC, x , x , 2009)<br>
EXT(ARB_texture_barrier , NV_texture_barrier , ANYGLL, ANYGLC, x , x , 2014)<br>
EXT(ARB_texture_border_clamp , ARB_texture_border_clamp , ANYGLL, x , x , x , 2000)<br>
EXT(ARB_texture_buffer_object , ARB_texture_buffer_object , ANYGLL, ANYGLC, x , x , 2008)<br>
EXT(ARB_texture_buffer_object_<wbr>rgb32 , ARB_texture_buffer_object_<wbr>rgb32 , ANYGLL, ANYGLC, x , x , 2009)<br>
EXT(ARB_texture_buffer_range , ARB_texture_buffer_range , ANYGLL, ANYGLC, x , x , 2012)<br>
-EXT(ARB_texture_compression , dummy_true , ANYGLL, x , x , x , 2000)<br>
-EXT(ARB_texture_compression_<wbr>bptc , ARB_texture_compression_bptc , ANYGLL, ANYGLC, x , x , 2010)<br>
-EXT(ARB_texture_compression_<wbr>rgtc , ARB_texture_compression_rgtc , ANYGLL, ANYGLC, x , x , 2004)<br>
+EXT(ARB_texture_compression , dummy_true , 11 , x , x , x , 2000)<br>
+EXT(ARB_texture_compression_<wbr>bptc , ARB_texture_compression_bptc , 11 , 11 , x , x , 2010)<br>
+EXT(ARB_texture_compression_<wbr>rgtc , ARB_texture_compression_rgtc , 11 , 11 , x , x , 2004) // requires ARB_texture_compression<br>
EXT(ARB_texture_cube_map , ARB_texture_cube_map , ANYGLL, x , x , x , 1999)<br>
EXT(ARB_texture_cube_map_array , ARB_texture_cube_map_array , ANYGLL, ANYGLC, x , x , 2009)<br>
EXT(ARB_texture_env_add , dummy_true , ANYGLL, x , x , x , 1999)<br>
EXT(ARB_texture_env_combine , ARB_texture_env_combine , ANYGLL, x , x , x , 2001)<br>
-EXT(ARB_texture_env_crossbar , ARB_texture_env_crossbar , ANYGLL, x , x , x , 2001)<br>
+EXT(ARB_texture_env_crossbar , ARB_texture_env_crossbar , 11 , x , x , x , 2001) //why not core?<br>
EXT(ARB_texture_env_dot3 , ARB_texture_env_dot3 , ANYGLL, x , x , x , 2001)<br>
EXT(ARB_texture_filter_<wbr>anisotropic , ARB_texture_filter_anisotropic , ANYGLL, ANYGLC, x , x , 2017)<br>
EXT(ARB_texture_float , ARB_texture_float , ANYGLL, ANYGLC, x , x , 2004)<br>
EXT(ARB_texture_gather , ARB_texture_gather , ANYGLL, ANYGLC, x , x , 2009)<br>
-EXT(ARB_texture_mirror_clamp_<wbr>to_edge , ARB_texture_mirror_clamp_to_<wbr>edge , ANYGLL, ANYGLC, x , x , 2013)<br>
+EXT(ARB_texture_mirror_clamp_<wbr>to_edge , ARB_texture_mirror_clamp_to_<wbr>edge , 14 , 14 , x , x , 2013)<br>
EXT(ARB_texture_mirrored_<wbr>repeat , dummy_true , ANYGLL, x , x , x , 2001)<br>
EXT(ARB_texture_multisample , ARB_texture_multisample , ANYGLL, ANYGLC, x , x , 2009)<br>
EXT(ARB_texture_non_power_of_<wbr>two , ARB_texture_non_power_of_two , ANYGLL, ANYGLC, x , x , 2003)<br>
-EXT(ARB_texture_query_levels , ARB_texture_query_levels , ANYGLL, ANYGLC, x , x , 2012)<br>
+EXT(ARB_texture_query_levels , ARB_texture_query_levels , 30 , 30 , x , x , 2012)<br>
EXT(ARB_texture_query_lod , ARB_texture_query_lod , ANYGLL, ANYGLC, x , x , 2009)<br>
-EXT(ARB_texture_rectangle , NV_texture_rectangle , ANYGLL, ANYGLC, x , x , 2004)<br>
+EXT(ARB_texture_rectangle , NV_texture_rectangle , 11 , 11 , x , x , 2004)<br>
EXT(ARB_texture_rg , ARB_texture_rg , ANYGLL, ANYGLC, x , x , 2008)<br>
EXT(ARB_texture_rgb10_a2ui , ARB_texture_rgb10_a2ui , ANYGLL, ANYGLC, x , x , 2009)<br>
EXT(ARB_texture_stencil8 , ARB_texture_stencil8 , ANYGLL, ANYGLC, x , x , 2013)<br>
-EXT(ARB_texture_storage , dummy_true , ANYGLL, ANYGLC, x , x , 2011)<br>
+EXT(ARB_texture_storage , dummy_true , 12 , 12 , x , x , 2011)<br>
EXT(ARB_texture_storage_<wbr>multisample , ARB_texture_multisample , ANYGLL, ANYGLC, x , x , 2012)<br>
EXT(ARB_texture_swizzle , EXT_texture_swizzle , ANYGLL, ANYGLC, x , x , 2008)<br>
EXT(ARB_texture_view , ARB_texture_view , ANYGLL, ANYGLC, x , x , 2012)<br>
EXT(ARB_timer_query , ARB_timer_query , ANYGLL, ANYGLC, x , x , 2010)<br>
EXT(ARB_transform_feedback2 , ARB_transform_feedback2 , ANYGLL, ANYGLC, x , x , 2010)<br>
EXT(ARB_transform_feedback3 , ARB_transform_feedback3 , ANYGLL, ANYGLC, x , x , 2010)<br>
-EXT(ARB_transform_feedback_<wbr>instanced , ARB_transform_feedback_<wbr>instanced , ANYGLL, ANYGLC, x , x , 2011)<br>
+EXT(ARB_transform_feedback_<wbr>instanced , ARB_transform_feedback_<wbr>instanced , 20 , 20 , x , x , 2011) // OpenGL 4.0 or the ARB_transform_feedback2 extension is required, OpenGL 3.1 or the ARB_draw_instanced extension is required<br>
EXT(ARB_transform_feedback_<wbr>overflow_query , ARB_transform_feedback_<wbr>overflow_query , ANYGLL, ANYGLC, x , x , 2014)<br>
EXT(ARB_transpose_matrix , dummy_true , ANYGLL, x , x , x , 1999)<br>
EXT(ARB_uniform_buffer_object , ARB_uniform_buffer_object , ANYGLL, ANYGLC, x , x , 2009)<br>
-EXT(ARB_vertex_array_bgra , EXT_vertex_array_bgra , ANYGLL, ANYGLC, x , x , 2008)<br>
+EXT(ARB_vertex_array_bgra , EXT_vertex_array_bgra , 11 , 11 , x , x , 2008)<br>
EXT(ARB_vertex_array_object , dummy_true , ANYGLL, ANYGLC, x , x , 2006)<br>
EXT(ARB_vertex_attrib_64bit , ARB_vertex_attrib_64bit , x , ANYGLC, x , x , 2010)<br>
EXT(ARB_vertex_attrib_binding , dummy_true , ANYGLL, ANYGLC, x , x , 2012)<br>
EXT(ARB_vertex_buffer_object , dummy_true , ANYGLL, x , x , x , 2003)<br>
-EXT(ARB_vertex_program , ARB_vertex_program , ANYGLL, x , x , x , 2002)<br>
-EXT(ARB_vertex_shader , ARB_vertex_shader , ANYGLL, ANYGLC, x , x , 2002)<br>
+EXT(ARB_vertex_program , ARB_vertex_program , 13 , x , x , x , 2002)<br>
+EXT(ARB_vertex_shader , ARB_vertex_shader , ANYGLL, ANYGLC, x , x , 2002) // requires ARB_shader_objects<br>
EXT(ARB_vertex_type_10f_11f_<wbr>11f_rev , ARB_vertex_type_10f_11f_11f_<wbr>rev , ANYGLL, ANYGLC, x , x , 2013)<br>
EXT(ARB_vertex_type_2_10_10_<wbr>10_rev , ARB_vertex_type_2_10_10_10_rev , ANYGLL, ANYGLC, x , x , 2009)<br>
EXT(ARB_viewport_array , ARB_viewport_array , x , ANYGLC, x , x , 2010)<br>
<span class="HOEnZb"><font color="#888888">-- <br>
2.14.1<br>
<br>
</font></span></blockquote></div><br></div>