summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIlia Mirkin <[email protected]>2016-05-24 19:57:47 -0400
committerIlia Mirkin <[email protected]>2016-05-25 09:50:07 -0400
commit601a5195ebab77220c4d1447c3e734bc5f769e7a (patch)
treebc1af859aaf880742a3e201d6d522e9cd6af1f53
parent9690ab0cdf3cdbcdabce4858fd84711b3afbb9aa (diff)
glsl: add GL_EXT_clip_cull_distance define, add helpers
Signed-off-by: Ilia Mirkin <[email protected]> Reviewed-by: Tobias Klausmann <[email protected]>
-rw-r--r--docs/relnotes/11.3.0.html1
-rw-r--r--src/compiler/glsl/builtin_variables.cpp10
-rw-r--r--src/compiler/glsl/glcpp/glcpp-parse.y2
-rw-r--r--src/compiler/glsl/glsl_parser_extras.h12
4 files changed, 19 insertions, 6 deletions
diff --git a/docs/relnotes/11.3.0.html b/docs/relnotes/11.3.0.html
index 5871ec80a1a..8d6caa24f5e 100644
--- a/docs/relnotes/11.3.0.html
+++ b/docs/relnotes/11.3.0.html
@@ -59,6 +59,7 @@ Note: some of the new features are only available with certain drivers.
<li>GL_ARB_shader_storage_buffer_objects on radeonsi, softpipe</li>
<li>GL_ATI_fragment_shader on all Gallium drivers</li>
<li>GL_EXT_base_instance on all drivers that support GL_ARB_base_instance</li>
+<li>GL_EXT_clip_cull_distance on all drivers that support GL_ARB_cull_distance</li>
<li>GL_OES_draw_buffers_indexed and GL_EXT_draw_buffers_indexed on all drivers that support GL_ARB_draw_buffers_blend</li>
<li>GL_OES_sample_shading on i965, nvc0, r600, radeonsi</li>
<li>GL_OES_sample_variables on i965, nvc0, r600, radeonsi</li>
diff --git a/src/compiler/glsl/builtin_variables.cpp b/src/compiler/glsl/builtin_variables.cpp
index c6668e86517..d8b6f6edf97 100644
--- a/src/compiler/glsl/builtin_variables.cpp
+++ b/src/compiler/glsl/builtin_variables.cpp
@@ -674,14 +674,13 @@ builtin_variable_generator::generate_constants()
state->Const.MaxProgramTexelOffset);
}
- if (state->is_version(130, 0) || state->EXT_clip_cull_distance_enable) {
+ if (state->has_clip_distance()) {
add_const("gl_MaxClipDistances", state->Const.MaxClipPlanes);
}
if (state->is_version(130, 0)) {
add_const("gl_MaxVaryingComponents", state->ctx->Const.MaxVarying * 4);
}
- if (state->is_version(450, 0) || state->ARB_cull_distance_enable ||
- state->EXT_clip_cull_distance_enable) {
+ if (state->has_cull_distance()) {
add_const("gl_MaxCullDistances", state->Const.MaxClipPlanes);
add_const("gl_MaxCombinedClipAndCullDistances",
state->Const.MaxClipPlanes);
@@ -1253,12 +1252,11 @@ builtin_variable_generator::generate_varyings()
}
}
- if (state->is_version(130, 0) || state->EXT_clip_cull_distance_enable) {
+ if (state->has_clip_distance()) {
add_varying(VARYING_SLOT_CLIP_DIST0, array(float_t, 0),
"gl_ClipDistance");
}
- if (state->is_version(450, 0) || state->ARB_cull_distance_enable ||
- state->EXT_clip_cull_distance_enable) {
+ if (state->has_cull_distance()) {
add_varying(VARYING_SLOT_CULL_DIST0, array(float_t, 0),
"gl_CullDistance");
}
diff --git a/src/compiler/glsl/glcpp/glcpp-parse.y b/src/compiler/glsl/glcpp/glcpp-parse.y
index e44f0749e85..ee0d8f1942f 100644
--- a/src/compiler/glsl/glcpp/glcpp-parse.y
+++ b/src/compiler/glsl/glcpp/glcpp-parse.y
@@ -2310,6 +2310,8 @@ _glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t versio
add_builtin_define(parser, "GL_OES_texture_storage_multisample_2d_array", 1);
if (extensions->ARB_blend_func_extended)
add_builtin_define(parser, "GL_EXT_blend_func_extended", 1);
+ if (extensions->ARB_cull_distance)
+ add_builtin_define(parser, "GL_EXT_clip_cull_distance", 1);
if (version >= 310) {
if (extensions->ARB_shader_image_load_store)
diff --git a/src/compiler/glsl/glsl_parser_extras.h b/src/compiler/glsl/glsl_parser_extras.h
index 3ae3c82a70d..0c8405d02fc 100644
--- a/src/compiler/glsl/glsl_parser_extras.h
+++ b/src/compiler/glsl/glsl_parser_extras.h
@@ -270,6 +270,18 @@ struct _mesa_glsl_parse_state {
return OES_geometry_shader_enable || is_version(150, 320);
}
+ bool has_clip_distance() const
+ {
+ return EXT_clip_cull_distance_enable || is_version(130, 0);
+ }
+
+ bool has_cull_distance() const
+ {
+ return EXT_clip_cull_distance_enable ||
+ ARB_cull_distance_enable ||
+ is_version(450, 0);
+ }
+
void process_version_directive(YYLTYPE *locp, int version,
const char *ident);