[Mesa-dev] [PATCH] mesa/{version, getstring}: Future-proof version handling

Olivier Galibert galibert at pobox.com
Sat Aug 23 10:25:59 PDT 2014


Are we that far?

  OG.


On Sat, Aug 23, 2014 at 7:22 PM, Ian Romanick <idr at freedesktop.org> wrote:
> I'm content with waiting to add this until we're even close to
> supporting any of those versions... especially given all the lines like
> "false && // ARB_gpu_shader_fp64 &&".  That's just clutter.
>
> On 08/21/2014 05:02 AM, Olivier Galibert wrote:
>> Signed-off-by: Olivier Galibert <galibert at pobox.com>
>> ---
>>  src/mesa/main/getstring.c |   6 ++
>>  src/mesa/main/version.c   | 140 +++++++++++++++++++++++++++++++++++++++++++++-
>>  2 files changed, 143 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/mesa/main/getstring.c b/src/mesa/main/getstring.c
>> index 431d60b..f9d13a7 100644
>> --- a/src/mesa/main/getstring.c
>> +++ b/src/mesa/main/getstring.c
>> @@ -58,6 +58,12 @@ shading_language_version(struct gl_context *ctx)
>>           return (const GLubyte *) "4.10";
>>        case 420:
>>           return (const GLubyte *) "4.20";
>> +      case 430:
>> +         return (const GLubyte *) "4.30";
>> +      case 440:
>> +         return (const GLubyte *) "4.40";
>> +      case 450:
>> +         return (const GLubyte *) "4.50";
>>        default:
>>           _mesa_problem(ctx,
>>                         "Invalid GLSL version in shading_language_version()");
>> diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c
>> index 4dea530..c7a2381 100644
>> --- a/src/mesa/main/version.c
>> +++ b/src/mesa/main/version.c
>> @@ -290,7 +290,122 @@ compute_version(const struct gl_extensions *extensions,
>>                                extensions->EXT_texture_swizzle);
>>                                /* ARB_sampler_objects is always enabled in mesa */
>>
>> -   if (ver_3_3) {
>> +   const GLboolean ver_4_0 = (ver_3_3 &&
>> +                              consts->GLSLVersion >= 400 &&
>> +                              extensions->ARB_draw_buffers_blend &&
>> +                              extensions->ARB_draw_indirect &&
>> +                              extensions->ARB_gpu_shader5 &&
>> +                              false && // ARB_gpu_shader_fp64 &&
>> +                              extensions->ARB_sample_shading &&
>> +                              false && // ARB_shader_subroutine
>> +                              false && // ARB_tesselation_shader
>> +                              extensions->ARB_texture_buffer_object_rgb32 &&
>> +                              extensions->ARB_texture_cube_map_array &&
>> +                              extensions->ARB_texture_gather &&
>> +                              extensions->ARB_texture_query_lod &&
>> +                              extensions->ARB_transform_feedback2 &&
>> +                              extensions->ARB_transform_feedback3);
>> +
>> +   const GLboolean ver_4_1 = (ver_4_0 &&
>> +                              consts->GLSLVersion >= 410 &&
>> +                              extensions->ARB_ES2_compatibility &&
>> +                              false && // ARB_shader_precision
>> +                              false && // ARB_vertex_attrib_64bit
>> +                              extensions->ARB_viewport_array);
>> +                              /* ARB_get_program_binary and
>> +                                 ARB_separate_shader_objects are always enabled in mesa */
>> +
>> +   const GLboolean ver_4_2 = (ver_4_1 &&
>> +                              consts->GLSLVersion >= 420 &&
>> +                              extensions->ARB_texture_compression_bptc &&
>> +                              extensions->ARB_shader_atomic_counters &&
>> +                              extensions->ARB_transform_feedback_instanced &&
>> +                              extensions->ARB_base_instance &&
>> +                              extensions->ARB_shader_image_load_store &&
>> +                              extensions->ARB_conservative_depth &&
>> +                              extensions->ARB_shading_language_420pack &&
>> +                              extensions->ARB_internalformat_query);
>> +                              /* ARB_compressed_texture_pixel_storage,
>> +                                 ARB_texture_storage and
>> +                                 ARB_map_buffer_alignment are always enabled in mesa */
>> +
>> +   const GLboolean ver_4_3 = (ver_4_2 &&
>> +                              consts->GLSLVersion >= 430 &&
>> +                              false && // ARB_arrays_of_arrays
>> +                              extensions->ARB_ES3_compatibility &&
>> +                              extensions->ARB_compute_shader &&
>> +                              extensions->ARB_copy_image &&
>> +                              extensions->ARB_explicit_uniform_location &&
>> +                              extensions->ARB_fragment_layer_viewport &&
>> +                              false && // ARB_framebuffer_no_attachments
>> +                              false && // ARB_internalformat_query2
>> +                              extensions->ARB_draw_indirect &&
>> +                              false && // ARB_program_interface_query
>> +                              false && // ARB_robust_buffer_access_behavior
>> +                              false && // ARB_shader_image_size
>> +                              false && // ARB_shader_storage_buffer_object
>> +                              extensions->ARB_stencil_texturing &&
>> +                              extensions->ARB_texture_buffer_range &&
>> +                              extensions->ARB_texture_query_levels &&
>> +                              extensions->ARB_texture_multisample &&
>> +                              extensions->ARB_texture_view);
>> +                              /* ARB_clear_buffer_object,
>> +                                 KHR_debug,
>> +                                 ARB_invalidate_subdata and
>> +                                 ARB_vertex_attrib_binding are always enabled in mesa */
>> +
>> +   const GLboolean ver_4_4 = (ver_4_3 &&
>> +                              consts->GLSLVersion >= 440 &&
>> +                              false && // GL_MAX_VERTEX_ATTRIB_STRIDE
>> +                              extensions->ARB_buffer_storage &&
>> +                              extensions->ARB_clear_texture &&
>> +                              false && // ARB_enhanced_layouts
>> +                              false && // ARB_query_buffer_object
>> +                              extensions->ARB_texture_mirror_clamp_to_edge &&
>> +                              false && // ARB_texture_stencil8
>> +                              extensions->ARB_vertex_type_10f_11f_11f_rev);
>> +                              /* ARB_multi_bind is always enabled in mesa */
>> +
>> +   const GLboolean ver_4_5 = (ver_4_4 &&
>> +                              consts->GLSLVersion >= 450 &&
>> +                              false && // ARB_ES3_1_compatibility
>> +                              false && // ARB_clip_control
>> +                              extensions->ARB_conditional_render_inverted &&
>> +                              false && // ARB_cull_distance
>> +                              extensions->ARB_derivative_control &&
>> +                              false && // ARB_direct_state_access
>> +                              false && // ARB_get_texture_sub_image
>> +                              false && // ARB_shader_texture_image_samples
>> +                              extensions->NV_texture_barrier &&
>> +                              false && // KHR_context_flush_control
>> +                              false && // KHR_robust_buffer_access_behavior
>> +                              false);  // KHR_robustness
>> +
>> +   if (ver_4_5) {
>> +      major = 4;
>> +      minor = 5;
>> +   }
>> +   else if (ver_4_4) {
>> +      major = 4;
>> +      minor = 4;
>> +   }
>> +   else if (ver_4_3) {
>> +      major = 4;
>> +      minor = 3;
>> +   }
>> +   else if (ver_4_2) {
>> +      major = 4;
>> +      minor = 2;
>> +   }
>> +   else if (ver_4_1) {
>> +      major = 4;
>> +      minor = 1;
>> +   }
>> +   else if (ver_4_0) {
>> +      major = 4;
>> +      minor = 0;
>> +   }
>> +   else if (ver_3_3) {
>>        major = 3;
>>        minor = 3;
>>     }
>> @@ -371,7 +486,8 @@ compute_version_es2(const struct gl_extensions *extensions)
>>                                extensions->ARB_texture_non_power_of_two &&
>>                                extensions->EXT_blend_equation_separate);
>>     /* FINISHME: This list isn't quite right. */
>> -   const GLboolean ver_3_0 = (extensions->ARB_half_float_vertex &&
>> +   const GLboolean ver_3_0 = (ver_2_0 &&
>> +                              extensions->ARB_half_float_vertex &&
>>                                extensions->ARB_internalformat_query &&
>>                                extensions->ARB_map_buffer_range &&
>>                                extensions->ARB_shader_texture_lod &&
>> @@ -391,7 +507,25 @@ compute_version_es2(const struct gl_extensions *extensions)
>>                                extensions->EXT_texture_snorm &&
>>                                extensions->NV_primitive_restart &&
>>                                extensions->OES_depth_texture_cube_map);
>> -   if (ver_3_0) {
>> +
>> +   const GLboolean ver_3_1 = (ver_3_0 &&
>> +                              false && // ARB_arrays_of_arrays
>> +                              extensions->ARB_compute_shader &&
>> +                              extensions->ARB_explicit_uniform_location &&
>> +                              false && // ARB_framebuffer_no_attachments
>> +                              false && // ARB_program_interface_query
>> +                              extensions->ARB_shader_atomic_counters &&
>> +                              extensions->ARB_shader_image_load_store &&
>> +                              false && // ARB_shader_storage_buffer_object
>> +                              extensions->ARB_stencil_texturing &&
>> +                              extensions->ARB_gpu_shader5 && // Too much?
>> +                              extensions->EXT_shader_integer_mix);
>> +                              /* ARB_separate_shader_objects and
>> +                                 ARB_vertex_attrib_binding are always enabled in mesa */
>> +
>> +   if (ver_3_1) {
>> +      return 31;
>> +   } else if (ver_3_0) {
>>        return 30;
>>     } else if (ver_2_0) {
>>        return 20;
>>
>


More information about the mesa-dev mailing list