[Mesa-dev] [PATCH 4/7] glsl: add core plumbing for GL_ANDROID_extension_pack_es31a
Ian Romanick
idr at freedesktop.org
Thu Sep 1 02:28:07 UTC 2016
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 <imirkin at 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;
>
More information about the mesa-dev
mailing list