I'm not sure how I feel about this change. I had also been thinking about adding AEP support after the rest of 3.2 was complete. I had imagined that adding it would look something like adding code to _mesa_glsl_process_extension that would call _mesa_glsl_process_extension for each of the extensions implicitly enabled by '#extension GL_ANDROID_extension_pack_es31a'. One nice feature of that is you could add a spec quote that would have prevented Matt's comments. :)
Did you try or think about that approach? It's possible there's some fatal flaw that I didn't think about... On 08/28/2016 07:10 PM, Ilia Mirkin wrote: > Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu> > --- > src/compiler/glsl/glsl_parser_extras.cpp | 57 > +++++++++++++++++++++++--------- > src/compiler/glsl/glsl_parser_extras.h | 2 ++ > src/mesa/main/extensions_table.h | 2 ++ > src/mesa/main/mtypes.h | 1 + > 4 files changed, 46 insertions(+), 16 deletions(-) > > diff --git a/src/compiler/glsl/glsl_parser_extras.cpp > b/src/compiler/glsl/glsl_parser_extras.cpp > index b33cd3a..a44f014 100644 > --- a/src/compiler/glsl/glsl_parser_extras.cpp > +++ b/src/compiler/glsl/glsl_parser_extras.cpp > @@ -523,6 +523,11 @@ struct _mesa_glsl_extension { > const char *name; > > /** > + * Whether this extension is a part of AEP > + */ > + bool aep; > + > + /** > * Predicate that checks whether the relevant extension is available for > * this context. > */ > @@ -565,9 +570,14 @@ has_##name_str(const struct gl_context *ctx, gl_api api, > uint8_t version) \ > #undef EXT > > #define EXT(NAME) \ > - { "GL_" #NAME, has_##NAME, \ > - &_mesa_glsl_parse_state::NAME##_enable, \ > - &_mesa_glsl_parse_state::NAME##_warn } > + { "GL_" #NAME, false, has_##NAME, \ > + &_mesa_glsl_parse_state::NAME##_enable, \ > + &_mesa_glsl_parse_state::NAME##_warn } > + > +#define EXT_AEP(NAME) \ > + { "GL_" #NAME, true, has_##NAME, \ > + &_mesa_glsl_parse_state::NAME##_enable, \ > + &_mesa_glsl_parse_state::NAME##_warn } > > /** > * Table of extensions that can be enabled/disabled within a shader, > @@ -623,7 +633,7 @@ static const _mesa_glsl_extension > _mesa_glsl_supported_extensions[] = { > > /* KHR extensions go here, sorted alphabetically. > */ > - EXT(KHR_blend_equation_advanced), > + EXT_AEP(KHR_blend_equation_advanced), > > /* OES extensions go here, sorted alphabetically. > */ > @@ -632,17 +642,17 @@ static const _mesa_glsl_extension > _mesa_glsl_supported_extensions[] = { > EXT(OES_geometry_shader), > EXT(OES_gpu_shader5), > EXT(OES_primitive_bounding_box), > - EXT(OES_sample_variables), > - EXT(OES_shader_image_atomic), > + EXT_AEP(OES_sample_variables), > + EXT_AEP(OES_shader_image_atomic), > EXT(OES_shader_io_blocks), > - EXT(OES_shader_multisample_interpolation), > + EXT_AEP(OES_shader_multisample_interpolation), > EXT(OES_standard_derivatives), > EXT(OES_tessellation_point_size), > EXT(OES_tessellation_shader), > EXT(OES_texture_3D), > EXT(OES_texture_buffer), > EXT(OES_texture_cube_map_array), > - EXT(OES_texture_storage_multisample_2d_array), > + EXT_AEP(OES_texture_storage_multisample_2d_array), > > /* All other extensions go here, sorted alphabetically. > */ > @@ -651,23 +661,24 @@ static const _mesa_glsl_extension > _mesa_glsl_supported_extensions[] = { > EXT(AMD_shader_trinary_minmax), > EXT(AMD_vertex_shader_layer), > EXT(AMD_vertex_shader_viewport_index), > + EXT(ANDROID_extension_pack_es31a), > EXT(EXT_blend_func_extended), > EXT(EXT_draw_buffers), > EXT(EXT_clip_cull_distance), > EXT(EXT_geometry_point_size), > - EXT(EXT_geometry_shader), > - EXT(EXT_gpu_shader5), > - EXT(EXT_primitive_bounding_box), > + EXT_AEP(EXT_geometry_shader), > + EXT_AEP(EXT_gpu_shader5), > + EXT_AEP(EXT_primitive_bounding_box), > EXT(EXT_separate_shader_objects), > EXT(EXT_shader_framebuffer_fetch), > EXT(EXT_shader_integer_mix), > - EXT(EXT_shader_io_blocks), > + EXT_AEP(EXT_shader_io_blocks), > EXT(EXT_shader_samples_identical), > EXT(EXT_tessellation_point_size), > - EXT(EXT_tessellation_shader), > + EXT_AEP(EXT_tessellation_shader), > EXT(EXT_texture_array), > - EXT(EXT_texture_buffer), > - EXT(EXT_texture_cube_map_array), > + EXT_AEP(EXT_texture_buffer), > + EXT_AEP(EXT_texture_cube_map_array), > EXT(MESA_shader_integer_functions), > }; > > @@ -713,7 +724,6 @@ static const _mesa_glsl_extension *find_extension(const > char *name) > return NULL; > } > > - > bool > _mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp, > const char *behavior_string, YYLTYPE > *behavior_locp, > @@ -768,6 +778,21 @@ _mesa_glsl_process_extension(const char *name, YYLTYPE > *name_locp, > const _mesa_glsl_extension *extension = find_extension(name); > if (extension && extension->compatible_with_state(state, api, > gl_version)) { > extension->set_flags(state, behavior); > + if (extension->available_pred == has_ANDROID_extension_pack_es31a) { > + for (unsigned i = 0; > + i < ARRAY_SIZE(_mesa_glsl_supported_extensions); ++i) { > + const _mesa_glsl_extension *extension = > + &_mesa_glsl_supported_extensions[i]; > + > + if (!extension->aep) > + continue; > + // AEP should not be enabled if all of the sub-extensions > can't > + // also be enabled. This is not the proper layer to do such > + // error-checking though. > + assert(extension->compatible_with_state(state, api, > gl_version)); > + extension->set_flags(state, behavior); > + } > + } > } else { > static const char fmt[] = "extension `%s' unsupported in %s shader"; > > diff --git a/src/compiler/glsl/glsl_parser_extras.h > b/src/compiler/glsl/glsl_parser_extras.h > index e146fe1..027b97e 100644 > --- a/src/compiler/glsl/glsl_parser_extras.h > +++ b/src/compiler/glsl/glsl_parser_extras.h > @@ -709,6 +709,8 @@ struct _mesa_glsl_parse_state { > bool AMD_vertex_shader_layer_warn; > bool AMD_vertex_shader_viewport_index_enable; > bool AMD_vertex_shader_viewport_index_warn; > + bool ANDROID_extension_pack_es31a_enable; > + bool ANDROID_extension_pack_es31a_warn; > bool EXT_blend_func_extended_enable; > bool EXT_blend_func_extended_warn; > bool EXT_clip_cull_distance_enable; > diff --git a/src/mesa/main/extensions_table.h > b/src/mesa/main/extensions_table.h > index 75cdcb8..b10e708 100644 > --- a/src/mesa/main/extensions_table.h > +++ b/src/mesa/main/extensions_table.h > @@ -18,6 +18,8 @@ EXT(AMD_shader_trinary_minmax , dummy_true > EXT(AMD_vertex_shader_layer , AMD_vertex_shader_layer > , x , GLC, x , x , 2012) > EXT(AMD_vertex_shader_viewport_index , > AMD_vertex_shader_viewport_index , x , GLC, x , x , 2012) > > +EXT(ANDROID_extension_pack_es31a , ANDROID_extension_pack_es31a > , x , x , x , 31, 2014) > + > EXT(ANGLE_texture_compression_dxt3 , ANGLE_texture_compression_dxt > , GLL, GLC, ES1, ES2, 2011) > EXT(ANGLE_texture_compression_dxt5 , ANGLE_texture_compression_dxt > , GLL, GLC, ES1, ES2, 2011) > > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > index 6b8dab6..2a93f29 100644 > --- a/src/mesa/main/mtypes.h > +++ b/src/mesa/main/mtypes.h > @@ -3956,6 +3956,7 @@ struct gl_extensions > GLboolean AMD_seamless_cubemap_per_texture; > GLboolean AMD_vertex_shader_layer; > GLboolean AMD_vertex_shader_viewport_index; > + GLboolean ANDROID_extension_pack_es31a; > GLboolean APPLE_object_purgeable; > GLboolean ATI_meminfo; > GLboolean ATI_texture_compression_3dc; > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev