*/
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.
#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,
EXT(ARB_ES3_2_compatibility),
EXT(ARB_arrays_of_arrays),
EXT(ARB_compute_shader),
+ EXT(ARB_compute_variable_group_size),
EXT(ARB_conservative_depth),
EXT(ARB_cull_distance),
EXT(ARB_derivative_control),
EXT(ARB_shader_subroutine),
EXT(ARB_shader_texture_image_samples),
EXT(ARB_shader_texture_lod),
+ EXT(ARB_shader_viewport_layer_array),
EXT(ARB_shading_language_420pack),
EXT(ARB_shading_language_packing),
EXT(ARB_tessellation_shader),
/* KHR extensions go here, sorted alphabetically.
*/
- EXT(KHR_blend_equation_advanced),
+ EXT_AEP(KHR_blend_equation_advanced),
/* OES extensions go here, sorted alphabetically.
*/
EXT(OES_geometry_point_size),
EXT(OES_geometry_shader),
EXT(OES_gpu_shader5),
- EXT(OES_sample_variables),
- EXT(OES_shader_image_atomic),
+ EXT(OES_primitive_bounding_box),
+ 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),
+ EXT(OES_viewport_array),
/* All other extensions go here, sorted alphabetically.
*/
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_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),
};
return NULL;
}
-
bool
_mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp,
const char *behavior_string, YYLTYPE *behavior_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";
temp_type_qualifier.flags.q.in = true;
temp_type_qualifier.flags.q.out = true;
temp_type_qualifier.flags.q.buffer = true;
+ temp_type_qualifier.flags.q.patch = true;
interface_type_mask = temp_type_qualifier.flags.i;
/* Get the block's interface qualifier. The interface_qualifier
* of unused uniforms from being removed.
* The setting of this flag only matters if
* \c linked is \c true.
- * \param max_unroll_iterations Maximum number of loop iterations to be
- * unrolled. Setting to 0 disables loop
- * unrolling.
* \param options The driver's preferred shader options.
+ * \param native_integers Selects optimizations that depend on the
+ * implementations supporting integers
+ * natively (as opposed to supporting
+ * integers in floating point registers).
*/
bool
do_common_optimization(exec_list *ir, bool linked,