#include <stdlib.h>
#include "glsl_symbol_table.h"
+/* THIS is a macro defined somewhere deep in the Windows MSVC header files.
+ * Undefine it here to avoid collision with the lexer's THIS token.
+ */
+#undef THIS
+
struct gl_context;
struct glsl_switch_state {
bool check_bitwise_operations_allowed(YYLTYPE *locp)
{
- return check_version(130, 300, locp, "bit-wise operations are forbidden");
+ return EXT_gpu_shader4_enable ||
+ check_version(130, 300, locp, "bit-wise operations are forbidden");
}
bool check_explicit_attrib_stream_allowed(YYLTYPE *locp)
bool has_int64() const
{
- return ARB_gpu_shader_int64_enable;
+ return ARB_gpu_shader_int64_enable ||
+ AMD_gpu_shader_int64_enable;
}
bool has_420pack() const
bool has_framebuffer_fetch() const
{
return EXT_shader_framebuffer_fetch_enable ||
- MESA_shader_framebuffer_fetch_enable ||
- MESA_shader_framebuffer_fetch_non_coherent_enable;
+ EXT_shader_framebuffer_fetch_non_coherent_enable;
}
bool has_texture_cube_map_array() const
return ARB_bindless_texture_enable;
}
+ bool has_image_load_formatted() const
+ {
+ return EXT_shader_image_load_formatted_enable;
+ }
+
+ bool has_implicit_conversions() const
+ {
+ return EXT_shader_implicit_conversions_enable || is_version(120, 0);
+ }
+
+ bool has_implicit_uint_to_int_conversion() const
+ {
+ return ARB_gpu_shader5_enable ||
+ MESA_shader_integer_functions_enable ||
+ EXT_shader_implicit_conversions_enable ||
+ is_version(400, 0);
+ }
+
void process_version_directive(YYLTYPE *locp, int version,
const char *ident);
*/
bool cs_input_local_size_variable_specified;
+ /**
+ * Arrangement of invocations used to calculate derivatives in a compute
+ * shader. From NV_compute_shader_derivatives.
+ */
+ enum gl_derivative_group cs_derivative_group;
+
/**
* True if a shader declare bindless_sampler/bindless_image, and
* respectively bound_sampler/bound_image at global scope as specified by
unsigned MaxVertexOutputComponents;
unsigned MaxGeometryInputComponents;
unsigned MaxGeometryOutputComponents;
+ unsigned MaxGeometryShaderInvocations;
unsigned MaxFragmentInputComponents;
unsigned MaxGeometryTextureImageUnits;
unsigned MaxGeometryOutputVertices;
char *info_log;
+ /**
+ * Are warnings enabled?
+ *
+ * Emission of warngins is controlled by '#pragma warning(...)'.
+ */
+ bool warnings_enabled;
+
/**
* \name Enable bits for GLSL extensions
*/
bool ARB_arrays_of_arrays_warn;
bool ARB_bindless_texture_enable;
bool ARB_bindless_texture_warn;
+ bool ARB_compatibility_enable;
+ bool ARB_compatibility_warn;
bool ARB_compute_shader_enable;
bool ARB_compute_shader_warn;
bool ARB_compute_variable_group_size_enable;
bool ARB_fragment_coord_conventions_warn;
bool ARB_fragment_layer_viewport_enable;
bool ARB_fragment_layer_viewport_warn;
+ bool ARB_fragment_shader_interlock_enable;
+ bool ARB_fragment_shader_interlock_warn;
bool ARB_gpu_shader5_enable;
bool ARB_gpu_shader5_warn;
bool ARB_gpu_shader_fp64_enable;
*/
bool OES_EGL_image_external_enable;
bool OES_EGL_image_external_warn;
+ bool OES_EGL_image_external_essl3_enable;
+ bool OES_EGL_image_external_essl3_warn;
bool OES_geometry_point_size_enable;
bool OES_geometry_point_size_warn;
bool OES_geometry_shader_enable;
*/
bool AMD_conservative_depth_enable;
bool AMD_conservative_depth_warn;
+ bool AMD_gpu_shader_int64_enable;
+ bool AMD_gpu_shader_int64_warn;
bool AMD_shader_stencil_export_enable;
bool AMD_shader_stencil_export_warn;
bool AMD_shader_trinary_minmax_enable;
bool AMD_shader_trinary_minmax_warn;
+ bool AMD_texture_texture4_enable;
+ bool AMD_texture_texture4_warn;
bool AMD_vertex_shader_layer_enable;
bool AMD_vertex_shader_layer_warn;
bool AMD_vertex_shader_viewport_index_enable;
bool EXT_geometry_point_size_warn;
bool EXT_geometry_shader_enable;
bool EXT_geometry_shader_warn;
+ bool EXT_gpu_shader4_enable;
+ bool EXT_gpu_shader4_warn;
bool EXT_gpu_shader5_enable;
bool EXT_gpu_shader5_warn;
bool EXT_primitive_bounding_box_enable;
bool EXT_separate_shader_objects_warn;
bool EXT_shader_framebuffer_fetch_enable;
bool EXT_shader_framebuffer_fetch_warn;
+ bool EXT_shader_framebuffer_fetch_non_coherent_enable;
+ bool EXT_shader_framebuffer_fetch_non_coherent_warn;
+ bool EXT_shader_image_load_formatted_enable;
+ bool EXT_shader_image_load_formatted_warn;
+ bool EXT_shader_implicit_conversions_enable;
+ bool EXT_shader_implicit_conversions_warn;
bool EXT_shader_integer_mix_enable;
bool EXT_shader_integer_mix_warn;
bool EXT_shader_io_blocks_enable;
bool EXT_texture_buffer_warn;
bool EXT_texture_cube_map_array_enable;
bool EXT_texture_cube_map_array_warn;
+ bool EXT_texture_query_lod_enable;
+ bool EXT_texture_query_lod_warn;
bool INTEL_conservative_rasterization_enable;
bool INTEL_conservative_rasterization_warn;
- bool MESA_shader_framebuffer_fetch_enable;
- bool MESA_shader_framebuffer_fetch_warn;
- bool MESA_shader_framebuffer_fetch_non_coherent_enable;
- bool MESA_shader_framebuffer_fetch_non_coherent_warn;
+ bool INTEL_shader_atomic_float_minmax_enable;
+ bool INTEL_shader_atomic_float_minmax_warn;
bool MESA_shader_integer_functions_enable;
bool MESA_shader_integer_functions_warn;
+ bool NV_compute_shader_derivatives_enable;
+ bool NV_compute_shader_derivatives_warn;
+ bool NV_fragment_shader_interlock_enable;
+ bool NV_fragment_shader_interlock_warn;
bool NV_image_formats_enable;
bool NV_image_formats_warn;
+ bool NV_shader_atomic_float_enable;
+ bool NV_shader_atomic_float_warn;
/*@}*/
/** Extensions supported by the OpenGL implementation. */
bool fs_post_depth_coverage;
+ bool fs_pixel_interlock_ordered;
+ bool fs_pixel_interlock_unordered;
+ bool fs_sample_interlock_ordered;
+ bool fs_sample_interlock_unordered;
+
unsigned fs_blend_support;
/**
bool allow_extension_directive_midshader;
bool allow_builtin_variable_redeclaration;
+ bool allow_layout_qualifier_on_function_parameter;
/**
* Known subroutine type declarations.
#endif
struct glcpp_parser;
+struct _mesa_glsl_parse_state;
typedef void (*glcpp_extension_iterator)(
struct _mesa_glsl_parse_state *state,
struct _mesa_glsl_parse_state *state,
struct gl_context *gl_ctx);
+extern void _mesa_init_shader_compiler_types(void);
+extern void _mesa_destroy_shader_compiler_types(void);
extern void _mesa_destroy_shader_compiler(void);
extern void _mesa_destroy_shader_compiler_caches(void);
+extern void
+_mesa_glsl_copy_symbols_from_table(struct exec_list *shader_ir,
+ struct glsl_symbol_table *src,
+ struct glsl_symbol_table *dest);
+
#ifdef __cplusplus
}
#endif