summaryrefslogtreecommitdiffstats
path: root/src/compiler
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2016-07-08 12:00:30 -0700
committerKenneth Graunke <[email protected]>2016-08-08 09:59:03 -0700
commit58709d36d73419c21b899d4b9d08a4a82a2cc28b (patch)
treeb9c24748c0dc598491c56c208c830ee2370d7970 /src/compiler
parent722fd10456f8e92d61c492b662a24215eb4cd166 (diff)
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 <[email protected]> Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/glsl/glsl_lexer.ll2
-rw-r--r--src/compiler/glsl/glsl_parser.yy3
-rw-r--r--src/compiler/glsl/glsl_parser_extras.cpp4
-rw-r--r--src/compiler/glsl/glsl_parser_extras.h13
4 files changed, 19 insertions, 3 deletions
diff --git a/src/compiler/glsl/glsl_lexer.ll b/src/compiler/glsl/glsl_lexer.ll
index 11711eea231..7be2b89acbe 100644
--- a/src/compiler/glsl/glsl_lexer.ll
+++ b/src/compiler/glsl/glsl_lexer.ll
@@ -311,7 +311,7 @@ invariant KEYWORD(120, 100, 120, 100, INVARIANT);
flat KEYWORD(130, 100, 130, 300, FLAT);
smooth KEYWORD(130, 300, 130, 300, SMOOTH);
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);
sampler2D return SAMPLER2D;
diff --git a/src/compiler/glsl/glsl_parser.yy b/src/compiler/glsl/glsl_parser.yy
index 146589a5aa4..4ab9e145001 100644
--- a/src/compiler/glsl/glsl_parser.yy
+++ b/src/compiler/glsl/glsl_parser.yy
@@ -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 "
"qualifier `%s' used", $1);
}
diff --git a/src/compiler/glsl/glsl_parser_extras.cpp b/src/compiler/glsl/glsl_parser_extras.cpp
index e7022919750..14a5540063c 100644
--- a/src/compiler/glsl/glsl_parser_extras.cpp
+++ b/src/compiler/glsl/glsl_parser_extras.cpp
@@ -634,6 +634,8 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = {
EXT(OES_shader_io_blocks),
EXT(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_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_io_blocks),
EXT(EXT_shader_samples_identical),
+ EXT(EXT_tessellation_point_size),
+ EXT(EXT_tessellation_shader),
EXT(EXT_texture_array),
EXT(EXT_texture_buffer),
EXT(MESA_shader_integer_functions),
diff --git a/src/compiler/glsl/glsl_parser_extras.h b/src/compiler/glsl/glsl_parser_extras.h
index f9c1ffca842..991cfc6ebc9 100644
--- a/src/compiler/glsl/glsl_parser_extras.h
+++ b/src/compiler/glsl/glsl_parser_extras.h
@@ -279,7 +279,10 @@ struct _mesa_glsl_parse_state {
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
@@ -649,6 +652,10 @@ struct _mesa_glsl_parse_state {
bool OES_shader_multisample_interpolation_warn;
bool OES_standard_derivatives_enable;
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_warn;
bool OES_texture_buffer_enable;
@@ -684,6 +691,10 @@ struct _mesa_glsl_parse_state {
bool EXT_shader_io_blocks_warn;
bool EXT_shader_samples_identical_enable;
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_warn;
bool EXT_texture_buffer_enable;