| File: | root/firefox-clang/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/glsl_parser_extras.h |
| Warning: | line 79, column 8 Excessive padding in 'struct _mesa_glsl_parse_state' (59 padding bytes, where 3 is optimal). Optimal fields order: ctx, scanner, symbols, linalloc, default_uniform_qualifier, default_shader_storage_qualifier, in_qualifier, out_qualifier, supported_version_string, current_function, toplevel_ir, loop_nesting_ast, user_structures, info_log, extensions, subroutine_types, subroutines, translation_unit, switch_state, num_supported_versions, language_version, forced_language_version, gl_version, stage, cs_derivative_group, num_user_structures, gs_input_size, fs_blend_support, tcs_output_size, num_subroutine_types, num_subroutines, clip_dist_size, cull_dist_size, cs_input_local_size, supported_versions, Const, atomic_counter_offsets, es_shader, compat_shader, had_version_string, zero_init, fs_redeclares_gl_fragcoord, fs_origin_upper_left, fs_pixel_center_integer, fs_redeclares_gl_fragcoord_with_no_layout_qualifiers, gs_input_prim_type_specified, tcs_output_vertices_specified, cs_input_local_size_specified, cs_input_local_size_variable_specified, bindless_sampler_specified, bindless_image_specified, bound_sampler_specified, bound_image_specified, found_return, found_begin_interlock, found_end_interlock, error, all_invariant, warnings_enabled, ARB_ES3_1_compatibility_enable, ARB_ES3_1_compatibility_warn, ARB_ES3_2_compatibility_enable, ARB_ES3_2_compatibility_warn, ARB_arrays_of_arrays_enable, ARB_arrays_of_arrays_warn, ARB_bindless_texture_enable, ARB_bindless_texture_warn, ARB_compatibility_enable, ARB_compatibility_warn, ARB_compute_shader_enable, ARB_compute_shader_warn, ARB_compute_variable_group_size_enable, ARB_compute_variable_group_size_warn, ARB_conservative_depth_enable, ARB_conservative_depth_warn, ARB_cull_distance_enable, ARB_cull_distance_warn, ARB_derivative_control_enable, ARB_derivative_control_warn, ARB_draw_buffers_enable, ARB_draw_buffers_warn, ARB_draw_instanced_enable, ARB_draw_instanced_warn, ARB_enhanced_layouts_enable, ARB_enhanced_layouts_warn, ARB_explicit_attrib_location_enable, ARB_explicit_attrib_location_warn, ARB_explicit_uniform_location_enable, ARB_explicit_uniform_location_warn, ARB_fragment_coord_conventions_enable, ARB_fragment_coord_conventions_warn, ARB_fragment_layer_viewport_enable, ARB_fragment_layer_viewport_warn, ARB_fragment_shader_interlock_enable, ARB_fragment_shader_interlock_warn, ARB_gpu_shader5_enable, ARB_gpu_shader5_warn, ARB_gpu_shader_fp64_enable, ARB_gpu_shader_fp64_warn, ARB_gpu_shader_int64_enable, ARB_gpu_shader_int64_warn, ARB_post_depth_coverage_enable, ARB_post_depth_coverage_warn, ARB_sample_shading_enable, ARB_sample_shading_warn, ARB_separate_shader_objects_enable, ARB_separate_shader_objects_warn, ARB_shader_atomic_counter_ops_enable, ARB_shader_atomic_counter_ops_warn, ARB_shader_atomic_counters_enable, ARB_shader_atomic_counters_warn, ARB_shader_ballot_enable, ARB_shader_ballot_warn, ARB_shader_bit_encoding_enable, ARB_shader_bit_encoding_warn, ARB_shader_clock_enable, ARB_shader_clock_warn, ARB_shader_draw_parameters_enable, ARB_shader_draw_parameters_warn, ARB_shader_group_vote_enable, ARB_shader_group_vote_warn, ARB_shader_image_load_store_enable, ARB_shader_image_load_store_warn, ARB_shader_image_size_enable, ARB_shader_image_size_warn, ARB_shader_precision_enable, ARB_shader_precision_warn, ARB_shader_stencil_export_enable, ARB_shader_stencil_export_warn, ARB_shader_storage_buffer_object_enable, ARB_shader_storage_buffer_object_warn, ARB_shader_subroutine_enable, ARB_shader_subroutine_warn, ARB_shader_texture_image_samples_enable, ARB_shader_texture_image_samples_warn, ARB_shader_texture_lod_enable, ARB_shader_texture_lod_warn, ARB_shader_viewport_layer_array_enable, ARB_shader_viewport_layer_array_warn, ARB_shading_language_420pack_enable, ARB_shading_language_420pack_warn, ARB_shading_language_include_enable, ARB_shading_language_include_warn, ARB_shading_language_packing_enable, ARB_shading_language_packing_warn, ARB_tessellation_shader_enable, ARB_tessellation_shader_warn, ARB_texture_cube_map_array_enable, ARB_texture_cube_map_array_warn, ARB_texture_gather_enable, ARB_texture_gather_warn, ARB_texture_multisample_enable, ARB_texture_multisample_warn, ARB_texture_query_levels_enable, ARB_texture_query_levels_warn, ARB_texture_query_lod_enable, ARB_texture_query_lod_warn, ARB_texture_rectangle_enable, ARB_texture_rectangle_warn, ARB_uniform_buffer_object_enable, ARB_uniform_buffer_object_warn, ARB_vertex_attrib_64bit_enable, ARB_vertex_attrib_64bit_warn, ARB_viewport_array_enable, ARB_viewport_array_warn, KHR_blend_equation_advanced_enable, KHR_blend_equation_advanced_warn, OES_EGL_image_external_enable, OES_EGL_image_external_warn, OES_EGL_image_external_essl3_enable, OES_EGL_image_external_essl3_warn, OES_geometry_point_size_enable, OES_geometry_point_size_warn, OES_geometry_shader_enable, OES_geometry_shader_warn, OES_gpu_shader5_enable, OES_gpu_shader5_warn, OES_primitive_bounding_box_enable, OES_primitive_bounding_box_warn, OES_sample_variables_enable, OES_sample_variables_warn, OES_shader_image_atomic_enable, OES_shader_image_atomic_warn, OES_shader_io_blocks_enable, OES_shader_io_blocks_warn, OES_shader_multisample_interpolation_enable, OES_shader_multisample_interpolation_warn, OES_standard_derivatives_enable, OES_standard_derivatives_warn, OES_tessellation_point_size_enable, OES_tessellation_point_size_warn, OES_tessellation_shader_enable, OES_tessellation_shader_warn, OES_texture_3D_enable, OES_texture_3D_warn, OES_texture_buffer_enable, OES_texture_buffer_warn, OES_texture_cube_map_array_enable, OES_texture_cube_map_array_warn, OES_texture_storage_multisample_2d_array_enable, OES_texture_storage_multisample_2d_array_warn, OES_viewport_array_enable, OES_viewport_array_warn, AMD_conservative_depth_enable, AMD_conservative_depth_warn, AMD_gpu_shader_int64_enable, AMD_gpu_shader_int64_warn, AMD_shader_stencil_export_enable, AMD_shader_stencil_export_warn, AMD_shader_trinary_minmax_enable, AMD_shader_trinary_minmax_warn, AMD_texture_texture4_enable, AMD_texture_texture4_warn, AMD_vertex_shader_layer_enable, AMD_vertex_shader_layer_warn, AMD_vertex_shader_viewport_index_enable, AMD_vertex_shader_viewport_index_warn, ANDROID_extension_pack_es31a_enable, ANDROID_extension_pack_es31a_warn, EXT_blend_func_extended_enable, EXT_blend_func_extended_warn, EXT_clip_cull_distance_enable, EXT_clip_cull_distance_warn, EXT_demote_to_helper_invocation_enable, EXT_demote_to_helper_invocation_warn, EXT_draw_buffers_enable, EXT_draw_buffers_warn, EXT_draw_instanced_enable, EXT_draw_instanced_warn, EXT_frag_depth_enable, EXT_frag_depth_warn, EXT_geometry_point_size_enable, EXT_geometry_point_size_warn, EXT_geometry_shader_enable, EXT_geometry_shader_warn, EXT_gpu_shader4_enable, EXT_gpu_shader4_warn, EXT_gpu_shader5_enable, EXT_gpu_shader5_warn, EXT_primitive_bounding_box_enable, EXT_primitive_bounding_box_warn, EXT_separate_shader_objects_enable, EXT_separate_shader_objects_warn, EXT_shader_framebuffer_fetch_enable, EXT_shader_framebuffer_fetch_warn, EXT_shader_framebuffer_fetch_non_coherent_enable, EXT_shader_framebuffer_fetch_non_coherent_warn, EXT_shader_image_load_formatted_enable, EXT_shader_image_load_formatted_warn, EXT_shader_image_load_store_enable, EXT_shader_image_load_store_warn, EXT_shader_implicit_conversions_enable, EXT_shader_implicit_conversions_warn, EXT_shader_integer_mix_enable, EXT_shader_integer_mix_warn, EXT_shader_io_blocks_enable, EXT_shader_io_blocks_warn, EXT_shader_samples_identical_enable, EXT_shader_samples_identical_warn, EXT_tessellation_point_size_enable, EXT_tessellation_point_size_warn, EXT_tessellation_shader_enable, EXT_tessellation_shader_warn, EXT_texture_array_enable, EXT_texture_array_warn, EXT_texture_buffer_enable, EXT_texture_buffer_warn, EXT_texture_cube_map_array_enable, EXT_texture_cube_map_array_warn, EXT_texture_query_lod_enable, EXT_texture_query_lod_warn, EXT_texture_shadow_lod_enable, EXT_texture_shadow_lod_warn, INTEL_conservative_rasterization_enable, INTEL_conservative_rasterization_warn, INTEL_shader_atomic_float_minmax_enable, INTEL_shader_atomic_float_minmax_warn, INTEL_shader_integer_functions2_enable, INTEL_shader_integer_functions2_warn, MESA_shader_integer_functions_enable, MESA_shader_integer_functions_warn, NV_compute_shader_derivatives_enable, NV_compute_shader_derivatives_warn, NV_fragment_shader_interlock_enable, NV_fragment_shader_interlock_warn, NV_image_formats_enable, NV_image_formats_warn, NV_shader_atomic_float_enable, NV_shader_atomic_float_warn, NV_viewport_array2_enable, NV_viewport_array2_warn, uses_builtin_functions, fs_uses_gl_fragcoord, fs_early_fragment_tests, fs_inner_coverage, fs_post_depth_coverage, fs_pixel_interlock_ordered, fs_pixel_interlock_unordered, fs_sample_interlock_ordered, fs_sample_interlock_unordered, redeclares_gl_layer, layer_viewport_relative, allow_extension_directive_midshader, allow_builtin_variable_redeclaration, allow_layout_qualifier_on_function_parameter, is_field, consider reordering the fields or adding explicit padding members |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
| 1 | /* |
| 2 | * Copyright © 2010 Intel Corporation |
| 3 | * |
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 5 | * copy of this software and associated documentation files (the "Software"), |
| 6 | * to deal in the Software without restriction, including without limitation |
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
| 8 | * and/or sell copies of the Software, and to permit persons to whom the |
| 9 | * Software is furnished to do so, subject to the following conditions: |
| 10 | * |
| 11 | * The above copyright notice and this permission notice (including the next |
| 12 | * paragraph) shall be included in all copies or substantial portions of the |
| 13 | * Software. |
| 14 | * |
| 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| 16 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
| 18 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
| 20 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
| 21 | * DEALINGS IN THE SOFTWARE. |
| 22 | */ |
| 23 | |
| 24 | #ifndef GLSL_PARSER_EXTRAS_H |
| 25 | #define GLSL_PARSER_EXTRAS_H |
| 26 | |
| 27 | /* |
| 28 | * Most of the definitions here only apply to C++ |
| 29 | */ |
| 30 | #ifdef __cplusplus201703L |
| 31 | |
| 32 | |
| 33 | #include <stdlib.h> |
| 34 | #include "glsl_symbol_table.h" |
| 35 | |
| 36 | /* THIS is a macro defined somewhere deep in the Windows MSVC header files. |
| 37 | * Undefine it here to avoid collision with the lexer's THIS token. |
| 38 | */ |
| 39 | #undef THIS |
| 40 | |
| 41 | struct gl_context; |
| 42 | |
| 43 | struct glsl_switch_state { |
| 44 | /** Temporary variables needed for switch statement. */ |
| 45 | ir_variable *test_var; |
| 46 | ir_variable *is_fallthru_var; |
| 47 | ir_variable *is_break_var; |
| 48 | class ast_switch_statement *switch_nesting_ast; |
| 49 | |
| 50 | /** Used to set condition if 'default' label should be chosen. */ |
| 51 | ir_variable *run_default; |
| 52 | |
| 53 | /** Table of constant values already used in case labels */ |
| 54 | struct hash_table *labels_ht; |
| 55 | class ast_case_label *previous_default; |
| 56 | |
| 57 | bool is_switch_innermost; // if switch stmt is closest to break, ... |
| 58 | }; |
| 59 | |
| 60 | const char * |
| 61 | glsl_compute_version_string(void *mem_ctx, bool is_es, unsigned version); |
| 62 | |
| 63 | typedef struct YYLTYPE { |
| 64 | int first_line; |
| 65 | int first_column; |
| 66 | int last_line; |
| 67 | int last_column; |
| 68 | unsigned source; |
| 69 | /* Path for ARB_shading_language_include include source */ |
| 70 | char *path; |
| 71 | } YYLTYPE; |
| 72 | # define YYLTYPE_IS_DECLARED1 1 |
| 73 | # define YYLTYPE_IS_TRIVIAL1 1 |
| 74 | |
| 75 | extern void _mesa_glsl_error(YYLTYPE *locp, _mesa_glsl_parse_state *state, |
| 76 | const char *fmt, ...); |
| 77 | |
| 78 | |
| 79 | struct _mesa_glsl_parse_state { |
Excessive padding in 'struct _mesa_glsl_parse_state' (59 padding bytes, where 3 is optimal). Optimal fields order: ctx, scanner, symbols, linalloc, default_uniform_qualifier, default_shader_storage_qualifier, in_qualifier, out_qualifier, supported_version_string, current_function, toplevel_ir, loop_nesting_ast, user_structures, info_log, extensions, subroutine_types, subroutines, translation_unit, switch_state, num_supported_versions, language_version, forced_language_version, gl_version, stage, cs_derivative_group, num_user_structures, gs_input_size, fs_blend_support, tcs_output_size, num_subroutine_types, num_subroutines, clip_dist_size, cull_dist_size, cs_input_local_size, supported_versions, Const, atomic_counter_offsets, es_shader, compat_shader, had_version_string, zero_init, fs_redeclares_gl_fragcoord, fs_origin_upper_left, fs_pixel_center_integer, fs_redeclares_gl_fragcoord_with_no_layout_qualifiers, gs_input_prim_type_specified, tcs_output_vertices_specified, cs_input_local_size_specified, cs_input_local_size_variable_specified, bindless_sampler_specified, bindless_image_specified, bound_sampler_specified, bound_image_specified, found_return, found_begin_interlock, found_end_interlock, error, all_invariant, warnings_enabled, ARB_ES3_1_compatibility_enable, ARB_ES3_1_compatibility_warn, ARB_ES3_2_compatibility_enable, ARB_ES3_2_compatibility_warn, ARB_arrays_of_arrays_enable, ARB_arrays_of_arrays_warn, ARB_bindless_texture_enable, ARB_bindless_texture_warn, ARB_compatibility_enable, ARB_compatibility_warn, ARB_compute_shader_enable, ARB_compute_shader_warn, ARB_compute_variable_group_size_enable, ARB_compute_variable_group_size_warn, ARB_conservative_depth_enable, ARB_conservative_depth_warn, ARB_cull_distance_enable, ARB_cull_distance_warn, ARB_derivative_control_enable, ARB_derivative_control_warn, ARB_draw_buffers_enable, ARB_draw_buffers_warn, ARB_draw_instanced_enable, ARB_draw_instanced_warn, ARB_enhanced_layouts_enable, ARB_enhanced_layouts_warn, ARB_explicit_attrib_location_enable, ARB_explicit_attrib_location_warn, ARB_explicit_uniform_location_enable, ARB_explicit_uniform_location_warn, ARB_fragment_coord_conventions_enable, ARB_fragment_coord_conventions_warn, ARB_fragment_layer_viewport_enable, ARB_fragment_layer_viewport_warn, ARB_fragment_shader_interlock_enable, ARB_fragment_shader_interlock_warn, ARB_gpu_shader5_enable, ARB_gpu_shader5_warn, ARB_gpu_shader_fp64_enable, ARB_gpu_shader_fp64_warn, ARB_gpu_shader_int64_enable, ARB_gpu_shader_int64_warn, ARB_post_depth_coverage_enable, ARB_post_depth_coverage_warn, ARB_sample_shading_enable, ARB_sample_shading_warn, ARB_separate_shader_objects_enable, ARB_separate_shader_objects_warn, ARB_shader_atomic_counter_ops_enable, ARB_shader_atomic_counter_ops_warn, ARB_shader_atomic_counters_enable, ARB_shader_atomic_counters_warn, ARB_shader_ballot_enable, ARB_shader_ballot_warn, ARB_shader_bit_encoding_enable, ARB_shader_bit_encoding_warn, ARB_shader_clock_enable, ARB_shader_clock_warn, ARB_shader_draw_parameters_enable, ARB_shader_draw_parameters_warn, ARB_shader_group_vote_enable, ARB_shader_group_vote_warn, ARB_shader_image_load_store_enable, ARB_shader_image_load_store_warn, ARB_shader_image_size_enable, ARB_shader_image_size_warn, ARB_shader_precision_enable, ARB_shader_precision_warn, ARB_shader_stencil_export_enable, ARB_shader_stencil_export_warn, ARB_shader_storage_buffer_object_enable, ARB_shader_storage_buffer_object_warn, ARB_shader_subroutine_enable, ARB_shader_subroutine_warn, ARB_shader_texture_image_samples_enable, ARB_shader_texture_image_samples_warn, ARB_shader_texture_lod_enable, ARB_shader_texture_lod_warn, ARB_shader_viewport_layer_array_enable, ARB_shader_viewport_layer_array_warn, ARB_shading_language_420pack_enable, ARB_shading_language_420pack_warn, ARB_shading_language_include_enable, ARB_shading_language_include_warn, ARB_shading_language_packing_enable, ARB_shading_language_packing_warn, ARB_tessellation_shader_enable, ARB_tessellation_shader_warn, ARB_texture_cube_map_array_enable, ARB_texture_cube_map_array_warn, ARB_texture_gather_enable, ARB_texture_gather_warn, ARB_texture_multisample_enable, ARB_texture_multisample_warn, ARB_texture_query_levels_enable, ARB_texture_query_levels_warn, ARB_texture_query_lod_enable, ARB_texture_query_lod_warn, ARB_texture_rectangle_enable, ARB_texture_rectangle_warn, ARB_uniform_buffer_object_enable, ARB_uniform_buffer_object_warn, ARB_vertex_attrib_64bit_enable, ARB_vertex_attrib_64bit_warn, ARB_viewport_array_enable, ARB_viewport_array_warn, KHR_blend_equation_advanced_enable, KHR_blend_equation_advanced_warn, OES_EGL_image_external_enable, OES_EGL_image_external_warn, OES_EGL_image_external_essl3_enable, OES_EGL_image_external_essl3_warn, OES_geometry_point_size_enable, OES_geometry_point_size_warn, OES_geometry_shader_enable, OES_geometry_shader_warn, OES_gpu_shader5_enable, OES_gpu_shader5_warn, OES_primitive_bounding_box_enable, OES_primitive_bounding_box_warn, OES_sample_variables_enable, OES_sample_variables_warn, OES_shader_image_atomic_enable, OES_shader_image_atomic_warn, OES_shader_io_blocks_enable, OES_shader_io_blocks_warn, OES_shader_multisample_interpolation_enable, OES_shader_multisample_interpolation_warn, OES_standard_derivatives_enable, OES_standard_derivatives_warn, OES_tessellation_point_size_enable, OES_tessellation_point_size_warn, OES_tessellation_shader_enable, OES_tessellation_shader_warn, OES_texture_3D_enable, OES_texture_3D_warn, OES_texture_buffer_enable, OES_texture_buffer_warn, OES_texture_cube_map_array_enable, OES_texture_cube_map_array_warn, OES_texture_storage_multisample_2d_array_enable, OES_texture_storage_multisample_2d_array_warn, OES_viewport_array_enable, OES_viewport_array_warn, AMD_conservative_depth_enable, AMD_conservative_depth_warn, AMD_gpu_shader_int64_enable, AMD_gpu_shader_int64_warn, AMD_shader_stencil_export_enable, AMD_shader_stencil_export_warn, AMD_shader_trinary_minmax_enable, AMD_shader_trinary_minmax_warn, AMD_texture_texture4_enable, AMD_texture_texture4_warn, AMD_vertex_shader_layer_enable, AMD_vertex_shader_layer_warn, AMD_vertex_shader_viewport_index_enable, AMD_vertex_shader_viewport_index_warn, ANDROID_extension_pack_es31a_enable, ANDROID_extension_pack_es31a_warn, EXT_blend_func_extended_enable, EXT_blend_func_extended_warn, EXT_clip_cull_distance_enable, EXT_clip_cull_distance_warn, EXT_demote_to_helper_invocation_enable, EXT_demote_to_helper_invocation_warn, EXT_draw_buffers_enable, EXT_draw_buffers_warn, EXT_draw_instanced_enable, EXT_draw_instanced_warn, EXT_frag_depth_enable, EXT_frag_depth_warn, EXT_geometry_point_size_enable, EXT_geometry_point_size_warn, EXT_geometry_shader_enable, EXT_geometry_shader_warn, EXT_gpu_shader4_enable, EXT_gpu_shader4_warn, EXT_gpu_shader5_enable, EXT_gpu_shader5_warn, EXT_primitive_bounding_box_enable, EXT_primitive_bounding_box_warn, EXT_separate_shader_objects_enable, EXT_separate_shader_objects_warn, EXT_shader_framebuffer_fetch_enable, EXT_shader_framebuffer_fetch_warn, EXT_shader_framebuffer_fetch_non_coherent_enable, EXT_shader_framebuffer_fetch_non_coherent_warn, EXT_shader_image_load_formatted_enable, EXT_shader_image_load_formatted_warn, EXT_shader_image_load_store_enable, EXT_shader_image_load_store_warn, EXT_shader_implicit_conversions_enable, EXT_shader_implicit_conversions_warn, EXT_shader_integer_mix_enable, EXT_shader_integer_mix_warn, EXT_shader_io_blocks_enable, EXT_shader_io_blocks_warn, EXT_shader_samples_identical_enable, EXT_shader_samples_identical_warn, EXT_tessellation_point_size_enable, EXT_tessellation_point_size_warn, EXT_tessellation_shader_enable, EXT_tessellation_shader_warn, EXT_texture_array_enable, EXT_texture_array_warn, EXT_texture_buffer_enable, EXT_texture_buffer_warn, EXT_texture_cube_map_array_enable, EXT_texture_cube_map_array_warn, EXT_texture_query_lod_enable, EXT_texture_query_lod_warn, EXT_texture_shadow_lod_enable, EXT_texture_shadow_lod_warn, INTEL_conservative_rasterization_enable, INTEL_conservative_rasterization_warn, INTEL_shader_atomic_float_minmax_enable, INTEL_shader_atomic_float_minmax_warn, INTEL_shader_integer_functions2_enable, INTEL_shader_integer_functions2_warn, MESA_shader_integer_functions_enable, MESA_shader_integer_functions_warn, NV_compute_shader_derivatives_enable, NV_compute_shader_derivatives_warn, NV_fragment_shader_interlock_enable, NV_fragment_shader_interlock_warn, NV_image_formats_enable, NV_image_formats_warn, NV_shader_atomic_float_enable, NV_shader_atomic_float_warn, NV_viewport_array2_enable, NV_viewport_array2_warn, uses_builtin_functions, fs_uses_gl_fragcoord, fs_early_fragment_tests, fs_inner_coverage, fs_post_depth_coverage, fs_pixel_interlock_ordered, fs_pixel_interlock_unordered, fs_sample_interlock_ordered, fs_sample_interlock_unordered, redeclares_gl_layer, layer_viewport_relative, allow_extension_directive_midshader, allow_builtin_variable_redeclaration, allow_layout_qualifier_on_function_parameter, is_field, consider reordering the fields or adding explicit padding members | |
| 80 | _mesa_glsl_parse_state(struct gl_context *_ctx, gl_shader_stage stage, |
| 81 | void *mem_ctx); |
| 82 | |
| 83 | DECLARE_RZALLOC_CXX_OPERATORS(_mesa_glsl_parse_state)private: static void _ralloc_destructor(void *p) { reinterpret_cast <_mesa_glsl_parse_state *>(p)->_mesa_glsl_parse_state ::~_mesa_glsl_parse_state(); } public: static void* operator new (size_t size, void *mem_ctx) { void *p = rzalloc_size(mem_ctx , size); (static_cast <bool> (p != __null) ? void (0) : __assert_fail ("p != NULL", __builtin_FILE (), __builtin_LINE (), __extension__ __PRETTY_FUNCTION__)); if (!__has_trivial_destructor (_mesa_glsl_parse_state)) ralloc_set_destructor(p, _ralloc_destructor ); return p; } static void operator delete(void *p) { if (!__has_trivial_destructor (_mesa_glsl_parse_state)) ralloc_set_destructor(p, __null); ralloc_free (p); }; |
| 84 | |
| 85 | /** |
| 86 | * Generate a string representing the GLSL version currently being compiled |
| 87 | * (useful for error messages). |
| 88 | */ |
| 89 | const char *get_version_string() |
| 90 | { |
| 91 | return glsl_compute_version_string(this, this->es_shader, |
| 92 | this->language_version); |
| 93 | } |
| 94 | |
| 95 | /** |
| 96 | * Determine whether the current GLSL version is sufficiently high to |
| 97 | * support a certain feature. |
| 98 | * |
| 99 | * \param required_glsl_version is the desktop GLSL version that is |
| 100 | * required to support the feature, or 0 if no version of desktop GLSL |
| 101 | * supports the feature. |
| 102 | * |
| 103 | * \param required_glsl_es_version is the GLSL ES version that is required |
| 104 | * to support the feature, or 0 if no version of GLSL ES supports the |
| 105 | * feature. |
| 106 | */ |
| 107 | bool is_version(unsigned required_glsl_version, |
| 108 | unsigned required_glsl_es_version) const |
| 109 | { |
| 110 | unsigned required_version = this->es_shader ? |
| 111 | required_glsl_es_version : required_glsl_version; |
| 112 | unsigned this_version = this->forced_language_version |
| 113 | ? this->forced_language_version : this->language_version; |
| 114 | return required_version != 0 |
| 115 | && this_version >= required_version; |
| 116 | } |
| 117 | |
| 118 | bool check_version(unsigned required_glsl_version, |
| 119 | unsigned required_glsl_es_version, |
| 120 | YYLTYPE *locp, const char *fmt, ...) PRINTFLIKE(5, 6); |
| 121 | |
| 122 | bool check_arrays_of_arrays_allowed(YYLTYPE *locp) |
| 123 | { |
| 124 | if (!(ARB_arrays_of_arrays_enable || is_version(430, 310))) { |
| 125 | const char *const requirement = this->es_shader |
| 126 | ? "GLSL ES 3.10" |
| 127 | : "GL_ARB_arrays_of_arrays or GLSL 4.30"; |
| 128 | _mesa_glsl_error(locp, this, |
| 129 | "%s required for defining arrays of arrays.", |
| 130 | requirement); |
| 131 | return false; |
| 132 | } |
| 133 | return true; |
| 134 | } |
| 135 | |
| 136 | bool check_precision_qualifiers_allowed(YYLTYPE *locp) |
| 137 | { |
| 138 | return check_version(130, 100, locp, |
| 139 | "precision qualifiers are forbidden"); |
| 140 | } |
| 141 | |
| 142 | bool check_bitwise_operations_allowed(YYLTYPE *locp) |
| 143 | { |
| 144 | return EXT_gpu_shader4_enable || |
| 145 | check_version(130, 300, locp, "bit-wise operations are forbidden"); |
| 146 | } |
| 147 | |
| 148 | bool check_explicit_attrib_stream_allowed(YYLTYPE *locp) |
| 149 | { |
| 150 | if (!this->has_explicit_attrib_stream()) { |
| 151 | const char *const requirement = "GL_ARB_gpu_shader5 extension or GLSL 4.00"; |
| 152 | |
| 153 | _mesa_glsl_error(locp, this, "explicit stream requires %s", |
| 154 | requirement); |
| 155 | return false; |
| 156 | } |
| 157 | |
| 158 | return true; |
| 159 | } |
| 160 | |
| 161 | bool check_explicit_attrib_location_allowed(YYLTYPE *locp, |
| 162 | const ir_variable *var) |
| 163 | { |
| 164 | if (!this->has_explicit_attrib_location()) { |
| 165 | const char *const requirement = this->es_shader |
| 166 | ? "GLSL ES 3.00" |
| 167 | : "GL_ARB_explicit_attrib_location extension or GLSL 3.30"; |
| 168 | |
| 169 | _mesa_glsl_error(locp, this, "%s explicit location requires %s", |
| 170 | mode_string(var), requirement); |
| 171 | return false; |
| 172 | } |
| 173 | |
| 174 | return true; |
| 175 | } |
| 176 | |
| 177 | bool check_separate_shader_objects_allowed(YYLTYPE *locp, |
| 178 | const ir_variable *var) |
| 179 | { |
| 180 | if (!this->has_separate_shader_objects()) { |
| 181 | const char *const requirement = this->es_shader |
| 182 | ? "GL_EXT_separate_shader_objects extension or GLSL ES 3.10" |
| 183 | : "GL_ARB_separate_shader_objects extension or GLSL 4.20"; |
| 184 | |
| 185 | _mesa_glsl_error(locp, this, "%s explicit location requires %s", |
| 186 | mode_string(var), requirement); |
| 187 | return false; |
| 188 | } |
| 189 | |
| 190 | return true; |
| 191 | } |
| 192 | |
| 193 | bool check_explicit_uniform_location_allowed(YYLTYPE *locp, |
| 194 | const ir_variable *) |
| 195 | { |
| 196 | if (!this->has_explicit_attrib_location() || |
| 197 | !this->has_explicit_uniform_location()) { |
| 198 | const char *const requirement = this->es_shader |
| 199 | ? "GLSL ES 3.10" |
| 200 | : "GL_ARB_explicit_uniform_location and either " |
| 201 | "GL_ARB_explicit_attrib_location or GLSL 3.30."; |
| 202 | |
| 203 | _mesa_glsl_error(locp, this, |
| 204 | "uniform explicit location requires %s", |
| 205 | requirement); |
| 206 | return false; |
| 207 | } |
| 208 | |
| 209 | return true; |
| 210 | } |
| 211 | |
| 212 | bool has_atomic_counters() const |
| 213 | { |
| 214 | return ARB_shader_atomic_counters_enable || is_version(420, 310); |
| 215 | } |
| 216 | |
| 217 | bool has_enhanced_layouts() const |
| 218 | { |
| 219 | return ARB_enhanced_layouts_enable || is_version(440, 0); |
| 220 | } |
| 221 | |
| 222 | bool has_explicit_attrib_stream() const |
| 223 | { |
| 224 | return ARB_gpu_shader5_enable || is_version(400, 0); |
| 225 | } |
| 226 | |
| 227 | bool has_explicit_attrib_location() const |
| 228 | { |
| 229 | return ARB_explicit_attrib_location_enable || is_version(330, 300); |
| 230 | } |
| 231 | |
| 232 | bool has_explicit_uniform_location() const |
| 233 | { |
| 234 | return ARB_explicit_uniform_location_enable || is_version(430, 310); |
| 235 | } |
| 236 | |
| 237 | bool has_uniform_buffer_objects() const |
| 238 | { |
| 239 | return ARB_uniform_buffer_object_enable || is_version(140, 300); |
| 240 | } |
| 241 | |
| 242 | bool has_shader_storage_buffer_objects() const |
| 243 | { |
| 244 | return ARB_shader_storage_buffer_object_enable || is_version(430, 310); |
| 245 | } |
| 246 | |
| 247 | bool has_separate_shader_objects() const |
| 248 | { |
| 249 | return ARB_separate_shader_objects_enable || is_version(410, 310) |
| 250 | || EXT_separate_shader_objects_enable; |
| 251 | } |
| 252 | |
| 253 | bool has_double() const |
| 254 | { |
| 255 | return ARB_gpu_shader_fp64_enable || is_version(400, 0); |
| 256 | } |
| 257 | |
| 258 | bool has_int64() const |
| 259 | { |
| 260 | return ARB_gpu_shader_int64_enable || |
| 261 | AMD_gpu_shader_int64_enable; |
| 262 | } |
| 263 | |
| 264 | bool has_420pack() const |
| 265 | { |
| 266 | return ARB_shading_language_420pack_enable || is_version(420, 0); |
| 267 | } |
| 268 | |
| 269 | bool has_420pack_or_es31() const |
| 270 | { |
| 271 | return ARB_shading_language_420pack_enable || is_version(420, 310); |
| 272 | } |
| 273 | |
| 274 | bool has_compute_shader() const |
| 275 | { |
| 276 | return ARB_compute_shader_enable || is_version(430, 310); |
| 277 | } |
| 278 | |
| 279 | bool has_shader_io_blocks() const |
| 280 | { |
| 281 | /* The OES_geometry_shader_specification says: |
| 282 | * |
| 283 | * "If the OES_geometry_shader extension is enabled, the |
| 284 | * OES_shader_io_blocks extension is also implicitly enabled." |
| 285 | * |
| 286 | * The OES_tessellation_shader extension has similar wording. |
| 287 | */ |
| 288 | return OES_shader_io_blocks_enable || |
| 289 | EXT_shader_io_blocks_enable || |
| 290 | OES_geometry_shader_enable || |
| 291 | EXT_geometry_shader_enable || |
| 292 | OES_tessellation_shader_enable || |
| 293 | EXT_tessellation_shader_enable || |
| 294 | |
| 295 | is_version(150, 320); |
| 296 | } |
| 297 | |
| 298 | bool has_geometry_shader() const |
| 299 | { |
| 300 | return OES_geometry_shader_enable || EXT_geometry_shader_enable || |
| 301 | is_version(150, 320); |
| 302 | } |
| 303 | |
| 304 | bool has_tessellation_shader() const |
| 305 | { |
| 306 | return ARB_tessellation_shader_enable || |
| 307 | OES_tessellation_shader_enable || |
| 308 | EXT_tessellation_shader_enable || |
| 309 | is_version(400, 320); |
| 310 | } |
| 311 | |
| 312 | bool has_clip_distance() const |
| 313 | { |
| 314 | return EXT_clip_cull_distance_enable || is_version(130, 0); |
| 315 | } |
| 316 | |
| 317 | bool has_cull_distance() const |
| 318 | { |
| 319 | return EXT_clip_cull_distance_enable || |
| 320 | ARB_cull_distance_enable || |
| 321 | is_version(450, 0); |
| 322 | } |
| 323 | |
| 324 | bool has_framebuffer_fetch() const |
| 325 | { |
| 326 | return EXT_shader_framebuffer_fetch_enable || |
| 327 | EXT_shader_framebuffer_fetch_non_coherent_enable; |
| 328 | } |
| 329 | |
| 330 | bool has_texture_cube_map_array() const |
| 331 | { |
| 332 | return ARB_texture_cube_map_array_enable || |
| 333 | EXT_texture_cube_map_array_enable || |
| 334 | OES_texture_cube_map_array_enable || |
| 335 | is_version(400, 320); |
| 336 | } |
| 337 | |
| 338 | bool has_shader_image_load_store() const |
| 339 | { |
| 340 | return ARB_shader_image_load_store_enable || |
| 341 | EXT_shader_image_load_store_enable || |
| 342 | is_version(420, 310); |
| 343 | } |
| 344 | |
| 345 | bool has_bindless() const |
| 346 | { |
| 347 | return ARB_bindless_texture_enable; |
| 348 | } |
| 349 | |
| 350 | bool has_image_load_formatted() const |
| 351 | { |
| 352 | return EXT_shader_image_load_formatted_enable; |
| 353 | } |
| 354 | |
| 355 | bool has_implicit_conversions() const |
| 356 | { |
| 357 | return EXT_shader_implicit_conversions_enable || is_version(120, 0); |
| 358 | } |
| 359 | |
| 360 | bool has_implicit_uint_to_int_conversion() const |
| 361 | { |
| 362 | return ARB_gpu_shader5_enable || |
| 363 | MESA_shader_integer_functions_enable || |
| 364 | EXT_shader_implicit_conversions_enable || |
| 365 | is_version(400, 0); |
| 366 | } |
| 367 | |
| 368 | void process_version_directive(YYLTYPE *locp, int version, |
| 369 | const char *ident); |
| 370 | |
| 371 | struct gl_context *const ctx; |
| 372 | void *scanner; |
| 373 | exec_list translation_unit; |
| 374 | glsl_symbol_table *symbols; |
| 375 | |
| 376 | void *linalloc; |
| 377 | |
| 378 | unsigned num_supported_versions; |
| 379 | struct { |
| 380 | unsigned ver; |
| 381 | uint8_t gl_ver; |
| 382 | bool es; |
| 383 | } supported_versions[17]; |
| 384 | |
| 385 | bool es_shader; |
| 386 | bool compat_shader; |
| 387 | unsigned language_version; |
| 388 | unsigned forced_language_version; |
| 389 | bool had_version_string; |
| 390 | bool zero_init; |
| 391 | unsigned gl_version; |
| 392 | gl_shader_stage stage; |
| 393 | |
| 394 | /** |
| 395 | * Default uniform layout qualifiers tracked during parsing. |
| 396 | * Currently affects uniform blocks and uniform buffer variables in |
| 397 | * those blocks. |
| 398 | */ |
| 399 | struct ast_type_qualifier *default_uniform_qualifier; |
| 400 | |
| 401 | /** |
| 402 | * Default shader storage layout qualifiers tracked during parsing. |
| 403 | * Currently affects shader storage blocks and shader storage buffer |
| 404 | * variables in those blocks. |
| 405 | */ |
| 406 | struct ast_type_qualifier *default_shader_storage_qualifier; |
| 407 | |
| 408 | /** |
| 409 | * Variables to track different cases if a fragment shader redeclares |
| 410 | * built-in variable gl_FragCoord. |
| 411 | * |
| 412 | * Note: These values are computed at ast_to_hir time rather than at parse |
| 413 | * time. |
| 414 | */ |
| 415 | bool fs_redeclares_gl_fragcoord; |
| 416 | bool fs_origin_upper_left; |
| 417 | bool fs_pixel_center_integer; |
| 418 | bool fs_redeclares_gl_fragcoord_with_no_layout_qualifiers; |
| 419 | |
| 420 | /** |
| 421 | * True if a geometry shader input primitive type or tessellation control |
| 422 | * output vertices were specified using a layout directive. |
| 423 | * |
| 424 | * Note: these values are computed at ast_to_hir time rather than at parse |
| 425 | * time. |
| 426 | */ |
| 427 | bool gs_input_prim_type_specified; |
| 428 | bool tcs_output_vertices_specified; |
| 429 | |
| 430 | /** |
| 431 | * Input layout qualifiers from GLSL 1.50 (geometry shader controls), |
| 432 | * and GLSL 4.00 (tessellation evaluation shader) |
| 433 | */ |
| 434 | struct ast_type_qualifier *in_qualifier; |
| 435 | |
| 436 | /** |
| 437 | * True if a compute shader input local size was specified using a layout |
| 438 | * directive. |
| 439 | * |
| 440 | * Note: this value is computed at ast_to_hir time rather than at parse |
| 441 | * time. |
| 442 | */ |
| 443 | bool cs_input_local_size_specified; |
| 444 | |
| 445 | /** |
| 446 | * If cs_input_local_size_specified is true, the local size that was |
| 447 | * specified. Otherwise ignored. |
| 448 | */ |
| 449 | unsigned cs_input_local_size[3]; |
| 450 | |
| 451 | /** |
| 452 | * True if a compute shader input local variable size was specified using |
| 453 | * a layout directive as specified by ARB_compute_variable_group_size. |
| 454 | */ |
| 455 | bool cs_input_local_size_variable_specified; |
| 456 | |
| 457 | /** |
| 458 | * Arrangement of invocations used to calculate derivatives in a compute |
| 459 | * shader. From NV_compute_shader_derivatives. |
| 460 | */ |
| 461 | enum gl_derivative_group cs_derivative_group; |
| 462 | |
| 463 | /** |
| 464 | * True if a shader declare bindless_sampler/bindless_image, and |
| 465 | * respectively bound_sampler/bound_image at global scope as specified by |
| 466 | * ARB_bindless_texture. |
| 467 | */ |
| 468 | bool bindless_sampler_specified; |
| 469 | bool bindless_image_specified; |
| 470 | bool bound_sampler_specified; |
| 471 | bool bound_image_specified; |
| 472 | |
| 473 | /** |
| 474 | * Output layout qualifiers from GLSL 1.50 (geometry shader controls), |
| 475 | * and GLSL 4.00 (tessellation control shader). |
| 476 | */ |
| 477 | struct ast_type_qualifier *out_qualifier; |
| 478 | |
| 479 | /** |
| 480 | * Printable list of GLSL versions supported by the current context |
| 481 | * |
| 482 | * \note |
| 483 | * This string should probably be generated per-context instead of per |
| 484 | * invokation of the compiler. This should be changed when the method of |
| 485 | * tracking supported GLSL versions changes. |
| 486 | */ |
| 487 | const char *supported_version_string; |
| 488 | |
| 489 | /** |
| 490 | * Implementation defined limits that affect built-in variables, etc. |
| 491 | * |
| 492 | * \sa struct gl_constants (in mtypes.h) |
| 493 | */ |
| 494 | struct { |
| 495 | /* 1.10 */ |
| 496 | unsigned MaxLights; |
| 497 | unsigned MaxClipPlanes; |
| 498 | unsigned MaxTextureUnits; |
| 499 | unsigned MaxTextureCoords; |
| 500 | unsigned MaxVertexAttribs; |
| 501 | unsigned MaxVertexUniformComponents; |
| 502 | unsigned MaxVertexTextureImageUnits; |
| 503 | unsigned MaxCombinedTextureImageUnits; |
| 504 | unsigned MaxTextureImageUnits; |
| 505 | unsigned MaxFragmentUniformComponents; |
| 506 | |
| 507 | /* ARB_draw_buffers */ |
| 508 | unsigned MaxDrawBuffers; |
| 509 | |
| 510 | /* ARB_enhanced_layouts */ |
| 511 | unsigned MaxTransformFeedbackBuffers; |
| 512 | unsigned MaxTransformFeedbackInterleavedComponents; |
| 513 | |
| 514 | /* ARB_blend_func_extended */ |
| 515 | unsigned MaxDualSourceDrawBuffers; |
| 516 | |
| 517 | /* 3.00 ES */ |
| 518 | int MinProgramTexelOffset; |
| 519 | int MaxProgramTexelOffset; |
| 520 | |
| 521 | /* 1.50 */ |
| 522 | unsigned MaxVertexOutputComponents; |
| 523 | unsigned MaxGeometryInputComponents; |
| 524 | unsigned MaxGeometryOutputComponents; |
| 525 | unsigned MaxGeometryShaderInvocations; |
| 526 | unsigned MaxFragmentInputComponents; |
| 527 | unsigned MaxGeometryTextureImageUnits; |
| 528 | unsigned MaxGeometryOutputVertices; |
| 529 | unsigned MaxGeometryTotalOutputComponents; |
| 530 | unsigned MaxGeometryUniformComponents; |
| 531 | |
| 532 | /* ARB_shader_atomic_counters */ |
| 533 | unsigned MaxVertexAtomicCounters; |
| 534 | unsigned MaxTessControlAtomicCounters; |
| 535 | unsigned MaxTessEvaluationAtomicCounters; |
| 536 | unsigned MaxGeometryAtomicCounters; |
| 537 | unsigned MaxFragmentAtomicCounters; |
| 538 | unsigned MaxCombinedAtomicCounters; |
| 539 | unsigned MaxAtomicBufferBindings; |
| 540 | |
| 541 | /* These are also atomic counter related, but they weren't added to |
| 542 | * until atomic counters were added to core in GLSL 4.20 and GLSL ES |
| 543 | * 3.10. |
| 544 | */ |
| 545 | unsigned MaxVertexAtomicCounterBuffers; |
| 546 | unsigned MaxTessControlAtomicCounterBuffers; |
| 547 | unsigned MaxTessEvaluationAtomicCounterBuffers; |
| 548 | unsigned MaxGeometryAtomicCounterBuffers; |
| 549 | unsigned MaxFragmentAtomicCounterBuffers; |
| 550 | unsigned MaxCombinedAtomicCounterBuffers; |
| 551 | unsigned MaxAtomicCounterBufferSize; |
| 552 | |
| 553 | /* ARB_compute_shader */ |
| 554 | unsigned MaxComputeAtomicCounterBuffers; |
| 555 | unsigned MaxComputeAtomicCounters; |
| 556 | unsigned MaxComputeImageUniforms; |
| 557 | unsigned MaxComputeTextureImageUnits; |
| 558 | unsigned MaxComputeUniformComponents; |
| 559 | unsigned MaxComputeWorkGroupCount[3]; |
| 560 | unsigned MaxComputeWorkGroupSize[3]; |
| 561 | |
| 562 | /* ARB_shader_image_load_store */ |
| 563 | unsigned MaxImageUnits; |
| 564 | unsigned MaxCombinedShaderOutputResources; |
| 565 | unsigned MaxImageSamples; |
| 566 | unsigned MaxVertexImageUniforms; |
| 567 | unsigned MaxTessControlImageUniforms; |
| 568 | unsigned MaxTessEvaluationImageUniforms; |
| 569 | unsigned MaxGeometryImageUniforms; |
| 570 | unsigned MaxFragmentImageUniforms; |
| 571 | unsigned MaxCombinedImageUniforms; |
| 572 | |
| 573 | /* ARB_viewport_array */ |
| 574 | unsigned MaxViewports; |
| 575 | |
| 576 | /* ARB_tessellation_shader */ |
| 577 | unsigned MaxPatchVertices; |
| 578 | unsigned MaxTessGenLevel; |
| 579 | unsigned MaxTessControlInputComponents; |
| 580 | unsigned MaxTessControlOutputComponents; |
| 581 | unsigned MaxTessControlTextureImageUnits; |
| 582 | unsigned MaxTessEvaluationInputComponents; |
| 583 | unsigned MaxTessEvaluationOutputComponents; |
| 584 | unsigned MaxTessEvaluationTextureImageUnits; |
| 585 | unsigned MaxTessPatchComponents; |
| 586 | unsigned MaxTessControlTotalOutputComponents; |
| 587 | unsigned MaxTessControlUniformComponents; |
| 588 | unsigned MaxTessEvaluationUniformComponents; |
| 589 | |
| 590 | /* GL 4.5 / OES_sample_variables */ |
| 591 | unsigned MaxSamples; |
| 592 | } Const; |
| 593 | |
| 594 | /** |
| 595 | * During AST to IR conversion, pointer to current IR function |
| 596 | * |
| 597 | * Will be \c NULL whenever the AST to IR conversion is not inside a |
| 598 | * function definition. |
| 599 | */ |
| 600 | class ir_function_signature *current_function; |
| 601 | |
| 602 | /** |
| 603 | * During AST to IR conversion, pointer to the toplevel IR |
| 604 | * instruction list being generated. |
| 605 | */ |
| 606 | exec_list *toplevel_ir; |
| 607 | |
| 608 | /** Have we found a return statement in this function? */ |
| 609 | bool found_return; |
| 610 | |
| 611 | /** Have we found the interlock builtins in this function? */ |
| 612 | bool found_begin_interlock; |
| 613 | bool found_end_interlock; |
| 614 | |
| 615 | /** Was there an error during compilation? */ |
| 616 | bool error; |
| 617 | |
| 618 | /** |
| 619 | * Are all shader inputs / outputs invariant? |
| 620 | * |
| 621 | * This is set when the 'STDGL invariant(all)' pragma is used. |
| 622 | */ |
| 623 | bool all_invariant; |
| 624 | |
| 625 | /** Loop or switch statement containing the current instructions. */ |
| 626 | class ast_iteration_statement *loop_nesting_ast; |
| 627 | |
| 628 | struct glsl_switch_state switch_state; |
| 629 | |
| 630 | /** List of structures defined in user code. */ |
| 631 | const glsl_type **user_structures; |
| 632 | unsigned num_user_structures; |
| 633 | |
| 634 | char *info_log; |
| 635 | |
| 636 | /** |
| 637 | * Are warnings enabled? |
| 638 | * |
| 639 | * Emission of warngins is controlled by '#pragma warning(...)'. |
| 640 | */ |
| 641 | bool warnings_enabled; |
| 642 | |
| 643 | /** |
| 644 | * \name Enable bits for GLSL extensions |
| 645 | */ |
| 646 | /*@{*/ |
| 647 | /* ARB extensions go here, sorted alphabetically. |
| 648 | */ |
| 649 | bool ARB_ES3_1_compatibility_enable; |
| 650 | bool ARB_ES3_1_compatibility_warn; |
| 651 | bool ARB_ES3_2_compatibility_enable; |
| 652 | bool ARB_ES3_2_compatibility_warn; |
| 653 | bool ARB_arrays_of_arrays_enable; |
| 654 | bool ARB_arrays_of_arrays_warn; |
| 655 | bool ARB_bindless_texture_enable; |
| 656 | bool ARB_bindless_texture_warn; |
| 657 | bool ARB_compatibility_enable; |
| 658 | bool ARB_compatibility_warn; |
| 659 | bool ARB_compute_shader_enable; |
| 660 | bool ARB_compute_shader_warn; |
| 661 | bool ARB_compute_variable_group_size_enable; |
| 662 | bool ARB_compute_variable_group_size_warn; |
| 663 | bool ARB_conservative_depth_enable; |
| 664 | bool ARB_conservative_depth_warn; |
| 665 | bool ARB_cull_distance_enable; |
| 666 | bool ARB_cull_distance_warn; |
| 667 | bool ARB_derivative_control_enable; |
| 668 | bool ARB_derivative_control_warn; |
| 669 | bool ARB_draw_buffers_enable; |
| 670 | bool ARB_draw_buffers_warn; |
| 671 | bool ARB_draw_instanced_enable; |
| 672 | bool ARB_draw_instanced_warn; |
| 673 | bool ARB_enhanced_layouts_enable; |
| 674 | bool ARB_enhanced_layouts_warn; |
| 675 | bool ARB_explicit_attrib_location_enable; |
| 676 | bool ARB_explicit_attrib_location_warn; |
| 677 | bool ARB_explicit_uniform_location_enable; |
| 678 | bool ARB_explicit_uniform_location_warn; |
| 679 | bool ARB_fragment_coord_conventions_enable; |
| 680 | bool ARB_fragment_coord_conventions_warn; |
| 681 | bool ARB_fragment_layer_viewport_enable; |
| 682 | bool ARB_fragment_layer_viewport_warn; |
| 683 | bool ARB_fragment_shader_interlock_enable; |
| 684 | bool ARB_fragment_shader_interlock_warn; |
| 685 | bool ARB_gpu_shader5_enable; |
| 686 | bool ARB_gpu_shader5_warn; |
| 687 | bool ARB_gpu_shader_fp64_enable; |
| 688 | bool ARB_gpu_shader_fp64_warn; |
| 689 | bool ARB_gpu_shader_int64_enable; |
| 690 | bool ARB_gpu_shader_int64_warn; |
| 691 | bool ARB_post_depth_coverage_enable; |
| 692 | bool ARB_post_depth_coverage_warn; |
| 693 | bool ARB_sample_shading_enable; |
| 694 | bool ARB_sample_shading_warn; |
| 695 | bool ARB_separate_shader_objects_enable; |
| 696 | bool ARB_separate_shader_objects_warn; |
| 697 | bool ARB_shader_atomic_counter_ops_enable; |
| 698 | bool ARB_shader_atomic_counter_ops_warn; |
| 699 | bool ARB_shader_atomic_counters_enable; |
| 700 | bool ARB_shader_atomic_counters_warn; |
| 701 | bool ARB_shader_ballot_enable; |
| 702 | bool ARB_shader_ballot_warn; |
| 703 | bool ARB_shader_bit_encoding_enable; |
| 704 | bool ARB_shader_bit_encoding_warn; |
| 705 | bool ARB_shader_clock_enable; |
| 706 | bool ARB_shader_clock_warn; |
| 707 | bool ARB_shader_draw_parameters_enable; |
| 708 | bool ARB_shader_draw_parameters_warn; |
| 709 | bool ARB_shader_group_vote_enable; |
| 710 | bool ARB_shader_group_vote_warn; |
| 711 | bool ARB_shader_image_load_store_enable; |
| 712 | bool ARB_shader_image_load_store_warn; |
| 713 | bool ARB_shader_image_size_enable; |
| 714 | bool ARB_shader_image_size_warn; |
| 715 | bool ARB_shader_precision_enable; |
| 716 | bool ARB_shader_precision_warn; |
| 717 | bool ARB_shader_stencil_export_enable; |
| 718 | bool ARB_shader_stencil_export_warn; |
| 719 | bool ARB_shader_storage_buffer_object_enable; |
| 720 | bool ARB_shader_storage_buffer_object_warn; |
| 721 | bool ARB_shader_subroutine_enable; |
| 722 | bool ARB_shader_subroutine_warn; |
| 723 | bool ARB_shader_texture_image_samples_enable; |
| 724 | bool ARB_shader_texture_image_samples_warn; |
| 725 | bool ARB_shader_texture_lod_enable; |
| 726 | bool ARB_shader_texture_lod_warn; |
| 727 | bool ARB_shader_viewport_layer_array_enable; |
| 728 | bool ARB_shader_viewport_layer_array_warn; |
| 729 | bool ARB_shading_language_420pack_enable; |
| 730 | bool ARB_shading_language_420pack_warn; |
| 731 | bool ARB_shading_language_include_enable; |
| 732 | bool ARB_shading_language_include_warn; |
| 733 | bool ARB_shading_language_packing_enable; |
| 734 | bool ARB_shading_language_packing_warn; |
| 735 | bool ARB_tessellation_shader_enable; |
| 736 | bool ARB_tessellation_shader_warn; |
| 737 | bool ARB_texture_cube_map_array_enable; |
| 738 | bool ARB_texture_cube_map_array_warn; |
| 739 | bool ARB_texture_gather_enable; |
| 740 | bool ARB_texture_gather_warn; |
| 741 | bool ARB_texture_multisample_enable; |
| 742 | bool ARB_texture_multisample_warn; |
| 743 | bool ARB_texture_query_levels_enable; |
| 744 | bool ARB_texture_query_levels_warn; |
| 745 | bool ARB_texture_query_lod_enable; |
| 746 | bool ARB_texture_query_lod_warn; |
| 747 | bool ARB_texture_rectangle_enable; |
| 748 | bool ARB_texture_rectangle_warn; |
| 749 | bool ARB_uniform_buffer_object_enable; |
| 750 | bool ARB_uniform_buffer_object_warn; |
| 751 | bool ARB_vertex_attrib_64bit_enable; |
| 752 | bool ARB_vertex_attrib_64bit_warn; |
| 753 | bool ARB_viewport_array_enable; |
| 754 | bool ARB_viewport_array_warn; |
| 755 | |
| 756 | /* KHR extensions go here, sorted alphabetically. |
| 757 | */ |
| 758 | bool KHR_blend_equation_advanced_enable; |
| 759 | bool KHR_blend_equation_advanced_warn; |
| 760 | |
| 761 | /* OES extensions go here, sorted alphabetically. |
| 762 | */ |
| 763 | bool OES_EGL_image_external_enable; |
| 764 | bool OES_EGL_image_external_warn; |
| 765 | bool OES_EGL_image_external_essl3_enable; |
| 766 | bool OES_EGL_image_external_essl3_warn; |
| 767 | bool OES_geometry_point_size_enable; |
| 768 | bool OES_geometry_point_size_warn; |
| 769 | bool OES_geometry_shader_enable; |
| 770 | bool OES_geometry_shader_warn; |
| 771 | bool OES_gpu_shader5_enable; |
| 772 | bool OES_gpu_shader5_warn; |
| 773 | bool OES_primitive_bounding_box_enable; |
| 774 | bool OES_primitive_bounding_box_warn; |
| 775 | bool OES_sample_variables_enable; |
| 776 | bool OES_sample_variables_warn; |
| 777 | bool OES_shader_image_atomic_enable; |
| 778 | bool OES_shader_image_atomic_warn; |
| 779 | bool OES_shader_io_blocks_enable; |
| 780 | bool OES_shader_io_blocks_warn; |
| 781 | bool OES_shader_multisample_interpolation_enable; |
| 782 | bool OES_shader_multisample_interpolation_warn; |
| 783 | bool OES_standard_derivatives_enable; |
| 784 | bool OES_standard_derivatives_warn; |
| 785 | bool OES_tessellation_point_size_enable; |
| 786 | bool OES_tessellation_point_size_warn; |
| 787 | bool OES_tessellation_shader_enable; |
| 788 | bool OES_tessellation_shader_warn; |
| 789 | bool OES_texture_3D_enable; |
| 790 | bool OES_texture_3D_warn; |
| 791 | bool OES_texture_buffer_enable; |
| 792 | bool OES_texture_buffer_warn; |
| 793 | bool OES_texture_cube_map_array_enable; |
| 794 | bool OES_texture_cube_map_array_warn; |
| 795 | bool OES_texture_storage_multisample_2d_array_enable; |
| 796 | bool OES_texture_storage_multisample_2d_array_warn; |
| 797 | bool OES_viewport_array_enable; |
| 798 | bool OES_viewport_array_warn; |
| 799 | |
| 800 | /* All other extensions go here, sorted alphabetically. |
| 801 | */ |
| 802 | bool AMD_conservative_depth_enable; |
| 803 | bool AMD_conservative_depth_warn; |
| 804 | bool AMD_gpu_shader_int64_enable; |
| 805 | bool AMD_gpu_shader_int64_warn; |
| 806 | bool AMD_shader_stencil_export_enable; |
| 807 | bool AMD_shader_stencil_export_warn; |
| 808 | bool AMD_shader_trinary_minmax_enable; |
| 809 | bool AMD_shader_trinary_minmax_warn; |
| 810 | bool AMD_texture_texture4_enable; |
| 811 | bool AMD_texture_texture4_warn; |
| 812 | bool AMD_vertex_shader_layer_enable; |
| 813 | bool AMD_vertex_shader_layer_warn; |
| 814 | bool AMD_vertex_shader_viewport_index_enable; |
| 815 | bool AMD_vertex_shader_viewport_index_warn; |
| 816 | bool ANDROID_extension_pack_es31a_enable; |
| 817 | bool ANDROID_extension_pack_es31a_warn; |
| 818 | bool EXT_blend_func_extended_enable; |
| 819 | bool EXT_blend_func_extended_warn; |
| 820 | bool EXT_clip_cull_distance_enable; |
| 821 | bool EXT_clip_cull_distance_warn; |
| 822 | bool EXT_demote_to_helper_invocation_enable; |
| 823 | bool EXT_demote_to_helper_invocation_warn; |
| 824 | bool EXT_draw_buffers_enable; |
| 825 | bool EXT_draw_buffers_warn; |
| 826 | bool EXT_draw_instanced_enable; |
| 827 | bool EXT_draw_instanced_warn; |
| 828 | bool EXT_frag_depth_enable; |
| 829 | bool EXT_frag_depth_warn; |
| 830 | bool EXT_geometry_point_size_enable; |
| 831 | bool EXT_geometry_point_size_warn; |
| 832 | bool EXT_geometry_shader_enable; |
| 833 | bool EXT_geometry_shader_warn; |
| 834 | bool EXT_gpu_shader4_enable; |
| 835 | bool EXT_gpu_shader4_warn; |
| 836 | bool EXT_gpu_shader5_enable; |
| 837 | bool EXT_gpu_shader5_warn; |
| 838 | bool EXT_primitive_bounding_box_enable; |
| 839 | bool EXT_primitive_bounding_box_warn; |
| 840 | bool EXT_separate_shader_objects_enable; |
| 841 | bool EXT_separate_shader_objects_warn; |
| 842 | bool EXT_shader_framebuffer_fetch_enable; |
| 843 | bool EXT_shader_framebuffer_fetch_warn; |
| 844 | bool EXT_shader_framebuffer_fetch_non_coherent_enable; |
| 845 | bool EXT_shader_framebuffer_fetch_non_coherent_warn; |
| 846 | bool EXT_shader_image_load_formatted_enable; |
| 847 | bool EXT_shader_image_load_formatted_warn; |
| 848 | bool EXT_shader_image_load_store_enable; |
| 849 | bool EXT_shader_image_load_store_warn; |
| 850 | bool EXT_shader_implicit_conversions_enable; |
| 851 | bool EXT_shader_implicit_conversions_warn; |
| 852 | bool EXT_shader_integer_mix_enable; |
| 853 | bool EXT_shader_integer_mix_warn; |
| 854 | bool EXT_shader_io_blocks_enable; |
| 855 | bool EXT_shader_io_blocks_warn; |
| 856 | bool EXT_shader_samples_identical_enable; |
| 857 | bool EXT_shader_samples_identical_warn; |
| 858 | bool EXT_tessellation_point_size_enable; |
| 859 | bool EXT_tessellation_point_size_warn; |
| 860 | bool EXT_tessellation_shader_enable; |
| 861 | bool EXT_tessellation_shader_warn; |
| 862 | bool EXT_texture_array_enable; |
| 863 | bool EXT_texture_array_warn; |
| 864 | bool EXT_texture_buffer_enable; |
| 865 | bool EXT_texture_buffer_warn; |
| 866 | bool EXT_texture_cube_map_array_enable; |
| 867 | bool EXT_texture_cube_map_array_warn; |
| 868 | bool EXT_texture_query_lod_enable; |
| 869 | bool EXT_texture_query_lod_warn; |
| 870 | bool EXT_texture_shadow_lod_enable; |
| 871 | bool EXT_texture_shadow_lod_warn; |
| 872 | bool INTEL_conservative_rasterization_enable; |
| 873 | bool INTEL_conservative_rasterization_warn; |
| 874 | bool INTEL_shader_atomic_float_minmax_enable; |
| 875 | bool INTEL_shader_atomic_float_minmax_warn; |
| 876 | bool INTEL_shader_integer_functions2_enable; |
| 877 | bool INTEL_shader_integer_functions2_warn; |
| 878 | bool MESA_shader_integer_functions_enable; |
| 879 | bool MESA_shader_integer_functions_warn; |
| 880 | bool NV_compute_shader_derivatives_enable; |
| 881 | bool NV_compute_shader_derivatives_warn; |
| 882 | bool NV_fragment_shader_interlock_enable; |
| 883 | bool NV_fragment_shader_interlock_warn; |
| 884 | bool NV_image_formats_enable; |
| 885 | bool NV_image_formats_warn; |
| 886 | bool NV_shader_atomic_float_enable; |
| 887 | bool NV_shader_atomic_float_warn; |
| 888 | bool NV_viewport_array2_enable; |
| 889 | bool NV_viewport_array2_warn; |
| 890 | /*@}*/ |
| 891 | |
| 892 | /** Extensions supported by the OpenGL implementation. */ |
| 893 | const struct gl_extensions *extensions; |
| 894 | |
| 895 | bool uses_builtin_functions; |
| 896 | bool fs_uses_gl_fragcoord; |
| 897 | |
| 898 | /** |
| 899 | * For geometry shaders, size of the most recently seen input declaration |
| 900 | * that was a sized array, or 0 if no sized input array declarations have |
| 901 | * been seen. |
| 902 | * |
| 903 | * Unused for other shader types. |
| 904 | */ |
| 905 | unsigned gs_input_size; |
| 906 | |
| 907 | bool fs_early_fragment_tests; |
| 908 | |
| 909 | bool fs_inner_coverage; |
| 910 | |
| 911 | bool fs_post_depth_coverage; |
| 912 | |
| 913 | bool fs_pixel_interlock_ordered; |
| 914 | bool fs_pixel_interlock_unordered; |
| 915 | bool fs_sample_interlock_ordered; |
| 916 | bool fs_sample_interlock_unordered; |
| 917 | |
| 918 | unsigned fs_blend_support; |
| 919 | |
| 920 | /** |
| 921 | * For tessellation control shaders, size of the most recently seen output |
| 922 | * declaration that was a sized array, or 0 if no sized output array |
| 923 | * declarations have been seen. |
| 924 | * |
| 925 | * Unused for other shader types. |
| 926 | */ |
| 927 | unsigned tcs_output_size; |
| 928 | |
| 929 | /** Atomic counter offsets by binding */ |
| 930 | unsigned atomic_counter_offsets[MAX_COMBINED_ATOMIC_BUFFERS(15 * 6)]; |
| 931 | |
| 932 | /** Whether gl_Layer output is viewport-relative. */ |
| 933 | bool redeclares_gl_layer; |
| 934 | bool layer_viewport_relative; |
| 935 | |
| 936 | bool allow_extension_directive_midshader; |
| 937 | bool allow_builtin_variable_redeclaration; |
| 938 | bool allow_layout_qualifier_on_function_parameter; |
| 939 | |
| 940 | /** |
| 941 | * Known subroutine type declarations. |
| 942 | */ |
| 943 | int num_subroutine_types; |
| 944 | ir_function **subroutine_types; |
| 945 | |
| 946 | /** |
| 947 | * Functions that are associated with |
| 948 | * subroutine types. |
| 949 | */ |
| 950 | int num_subroutines; |
| 951 | ir_function **subroutines; |
| 952 | |
| 953 | /** |
| 954 | * field selection temporary parser storage - |
| 955 | * did the parser just parse a dot. |
| 956 | */ |
| 957 | bool is_field; |
| 958 | |
| 959 | /** |
| 960 | * seen values for clip/cull distance sizes |
| 961 | * so we can check totals aren't too large. |
| 962 | */ |
| 963 | unsigned clip_dist_size, cull_dist_size; |
| 964 | }; |
| 965 | |
| 966 | # define YYLLOC_DEFAULT(Current, Rhs, N)do { if (N) { (Current).first_line = YYRHSLOC(Rhs, 1).first_line ; (Current).first_column = YYRHSLOC(Rhs, 1).first_column; (Current ).last_line = YYRHSLOC(Rhs, N).last_line; (Current).last_column = YYRHSLOC(Rhs, N).last_column; (Current).path = YYRHSLOC(Rhs , N).path; } else { (Current).first_line = (Current).last_line = YYRHSLOC(Rhs, 0).last_line; (Current).first_column = (Current ).last_column = YYRHSLOC(Rhs, 0).last_column; (Current).path = YYRHSLOC(Rhs, 0).path; } (Current).source = 0; } while (0) \ |
| 967 | do { \ |
| 968 | if (N) \ |
| 969 | { \ |
| 970 | (Current).first_line = YYRHSLOC(Rhs, 1).first_line; \ |
| 971 | (Current).first_column = YYRHSLOC(Rhs, 1).first_column; \ |
| 972 | (Current).last_line = YYRHSLOC(Rhs, N).last_line; \ |
| 973 | (Current).last_column = YYRHSLOC(Rhs, N).last_column; \ |
| 974 | (Current).path = YYRHSLOC(Rhs, N).path; \ |
| 975 | } \ |
| 976 | else \ |
| 977 | { \ |
| 978 | (Current).first_line = (Current).last_line = \ |
| 979 | YYRHSLOC(Rhs, 0).last_line; \ |
| 980 | (Current).first_column = (Current).last_column = \ |
| 981 | YYRHSLOC(Rhs, 0).last_column; \ |
| 982 | (Current).path = YYRHSLOC(Rhs, 0).path; \ |
| 983 | } \ |
| 984 | (Current).source = 0; \ |
| 985 | } while (0) |
| 986 | |
| 987 | /** |
| 988 | * Emit a warning to the shader log |
| 989 | * |
| 990 | * \sa _mesa_glsl_error |
| 991 | */ |
| 992 | extern void _mesa_glsl_warning(const YYLTYPE *locp, |
| 993 | _mesa_glsl_parse_state *state, |
| 994 | const char *fmt, ...); |
| 995 | |
| 996 | extern void _mesa_glsl_lexer_ctor(struct _mesa_glsl_parse_state *state, |
| 997 | const char *string); |
| 998 | |
| 999 | extern void _mesa_glsl_lexer_dtor(struct _mesa_glsl_parse_state *state); |
| 1000 | |
| 1001 | union YYSTYPE; |
| 1002 | extern int _mesa_glsl_lexer_lex(union YYSTYPE *yylval, YYLTYPE *yylloc, |
| 1003 | void *scanner); |
| 1004 | |
| 1005 | extern int _mesa_glsl_parse(struct _mesa_glsl_parse_state *); |
| 1006 | |
| 1007 | /** |
| 1008 | * Process elements of the #extension directive |
| 1009 | * |
| 1010 | * \return |
| 1011 | * If \c name and \c behavior are valid, \c true is returned. Otherwise |
| 1012 | * \c false is returned. |
| 1013 | */ |
| 1014 | extern bool _mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp, |
| 1015 | const char *behavior, |
| 1016 | YYLTYPE *behavior_locp, |
| 1017 | _mesa_glsl_parse_state *state); |
| 1018 | |
| 1019 | #endif /* __cplusplus */ |
| 1020 | |
| 1021 | |
| 1022 | /* |
| 1023 | * These definitions apply to C and C++ |
| 1024 | */ |
| 1025 | #ifdef __cplusplus201703L |
| 1026 | extern "C" { |
| 1027 | #endif |
| 1028 | |
| 1029 | struct glcpp_parser; |
| 1030 | struct _mesa_glsl_parse_state; |
| 1031 | |
| 1032 | typedef void (*glcpp_extension_iterator)( |
| 1033 | struct _mesa_glsl_parse_state *state, |
| 1034 | void (*add_builtin_define)(struct glcpp_parser *, const char *, int), |
| 1035 | struct glcpp_parser *data, |
| 1036 | unsigned version, |
| 1037 | bool es); |
| 1038 | |
| 1039 | extern int glcpp_preprocess(void *ctx, const char **shader, char **info_log, |
| 1040 | glcpp_extension_iterator extensions, |
| 1041 | struct _mesa_glsl_parse_state *state, |
| 1042 | struct gl_context *gl_ctx); |
| 1043 | |
| 1044 | void add_builtin_defines(struct _mesa_glsl_parse_state *state, |
| 1045 | void (*add_builtin_define)(struct glcpp_parser *, const char *, int), |
| 1046 | struct glcpp_parser *data, |
| 1047 | unsigned version, |
| 1048 | bool es); |
| 1049 | |
| 1050 | extern void |
| 1051 | _mesa_glsl_copy_symbols_from_table(struct exec_list *shader_ir, |
| 1052 | struct glsl_symbol_table *src, |
| 1053 | struct glsl_symbol_table *dest); |
| 1054 | |
| 1055 | #ifdef __cplusplus201703L |
| 1056 | } |
| 1057 | #endif |
| 1058 | |
| 1059 | |
| 1060 | #endif /* GLSL_PARSER_EXTRAS_H */ |