glsl: Add extension plumbing for OES/EXT_tessellation_shader.
This adds the #extension directive support, built-in #defines, lexer keyword support, and updates has_tessellation_shader(). Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
@@ -311,7 +311,7 @@ invariant KEYWORD(120, 100, 120, 100, INVARIANT);
|
|||||||
flat KEYWORD(130, 100, 130, 300, FLAT);
|
flat KEYWORD(130, 100, 130, 300, FLAT);
|
||||||
smooth KEYWORD(130, 300, 130, 300, SMOOTH);
|
smooth KEYWORD(130, 300, 130, 300, SMOOTH);
|
||||||
noperspective KEYWORD(130, 300, 130, 0, NOPERSPECTIVE);
|
noperspective KEYWORD(130, 300, 130, 0, NOPERSPECTIVE);
|
||||||
patch KEYWORD_WITH_ALT(0, 300, 400, 0, yyextra->ARB_tessellation_shader_enable, PATCH);
|
patch KEYWORD_WITH_ALT(0, 300, 400, 320, yyextra->has_tessellation_shader(), PATCH);
|
||||||
|
|
||||||
sampler1D DEPRECATED_ES_KEYWORD(SAMPLER1D);
|
sampler1D DEPRECATED_ES_KEYWORD(SAMPLER1D);
|
||||||
sampler2D return SAMPLER2D;
|
sampler2D return SAMPLER2D;
|
||||||
|
@@ -1274,7 +1274,8 @@ layout_qualifier_id:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($$.flags.i && !state->has_geometry_shader()) {
|
if ($$.flags.i && !state->has_geometry_shader() &&
|
||||||
|
!state->has_tessellation_shader()) {
|
||||||
_mesa_glsl_error(& @1, state, "#version 150 layout "
|
_mesa_glsl_error(& @1, state, "#version 150 layout "
|
||||||
"qualifier `%s' used", $1);
|
"qualifier `%s' used", $1);
|
||||||
}
|
}
|
||||||
|
@@ -634,6 +634,8 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = {
|
|||||||
EXT(OES_shader_io_blocks),
|
EXT(OES_shader_io_blocks),
|
||||||
EXT(OES_shader_multisample_interpolation),
|
EXT(OES_shader_multisample_interpolation),
|
||||||
EXT(OES_standard_derivatives),
|
EXT(OES_standard_derivatives),
|
||||||
|
EXT(OES_tessellation_point_size),
|
||||||
|
EXT(OES_tessellation_shader),
|
||||||
EXT(OES_texture_3D),
|
EXT(OES_texture_3D),
|
||||||
EXT(OES_texture_buffer),
|
EXT(OES_texture_buffer),
|
||||||
EXT(OES_texture_storage_multisample_2d_array),
|
EXT(OES_texture_storage_multisample_2d_array),
|
||||||
@@ -653,6 +655,8 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = {
|
|||||||
EXT(EXT_shader_integer_mix),
|
EXT(EXT_shader_integer_mix),
|
||||||
EXT(EXT_shader_io_blocks),
|
EXT(EXT_shader_io_blocks),
|
||||||
EXT(EXT_shader_samples_identical),
|
EXT(EXT_shader_samples_identical),
|
||||||
|
EXT(EXT_tessellation_point_size),
|
||||||
|
EXT(EXT_tessellation_shader),
|
||||||
EXT(EXT_texture_array),
|
EXT(EXT_texture_array),
|
||||||
EXT(EXT_texture_buffer),
|
EXT(EXT_texture_buffer),
|
||||||
EXT(MESA_shader_integer_functions),
|
EXT(MESA_shader_integer_functions),
|
||||||
|
@@ -279,7 +279,10 @@ struct _mesa_glsl_parse_state {
|
|||||||
|
|
||||||
bool has_tessellation_shader() const
|
bool has_tessellation_shader() const
|
||||||
{
|
{
|
||||||
return ARB_tessellation_shader_enable || is_version(400, 0);
|
return ARB_tessellation_shader_enable ||
|
||||||
|
OES_tessellation_shader_enable ||
|
||||||
|
EXT_tessellation_shader_enable ||
|
||||||
|
is_version(400, 320);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool has_clip_distance() const
|
bool has_clip_distance() const
|
||||||
@@ -649,6 +652,10 @@ struct _mesa_glsl_parse_state {
|
|||||||
bool OES_shader_multisample_interpolation_warn;
|
bool OES_shader_multisample_interpolation_warn;
|
||||||
bool OES_standard_derivatives_enable;
|
bool OES_standard_derivatives_enable;
|
||||||
bool OES_standard_derivatives_warn;
|
bool OES_standard_derivatives_warn;
|
||||||
|
bool OES_tessellation_point_size_enable;
|
||||||
|
bool OES_tessellation_point_size_warn;
|
||||||
|
bool OES_tessellation_shader_enable;
|
||||||
|
bool OES_tessellation_shader_warn;
|
||||||
bool OES_texture_3D_enable;
|
bool OES_texture_3D_enable;
|
||||||
bool OES_texture_3D_warn;
|
bool OES_texture_3D_warn;
|
||||||
bool OES_texture_buffer_enable;
|
bool OES_texture_buffer_enable;
|
||||||
@@ -684,6 +691,10 @@ struct _mesa_glsl_parse_state {
|
|||||||
bool EXT_shader_io_blocks_warn;
|
bool EXT_shader_io_blocks_warn;
|
||||||
bool EXT_shader_samples_identical_enable;
|
bool EXT_shader_samples_identical_enable;
|
||||||
bool EXT_shader_samples_identical_warn;
|
bool EXT_shader_samples_identical_warn;
|
||||||
|
bool EXT_tessellation_point_size_enable;
|
||||||
|
bool EXT_tessellation_point_size_warn;
|
||||||
|
bool EXT_tessellation_shader_enable;
|
||||||
|
bool EXT_tessellation_shader_warn;
|
||||||
bool EXT_texture_array_enable;
|
bool EXT_texture_array_enable;
|
||||||
bool EXT_texture_array_warn;
|
bool EXT_texture_array_warn;
|
||||||
bool EXT_texture_buffer_enable;
|
bool EXT_texture_buffer_enable;
|
||||||
|
Reference in New Issue
Block a user