OSDN Git Service

glsl: add GL_EXT_clip_cull_distance define, add helpers
authorIlia Mirkin <imirkin@alum.mit.edu>
Tue, 24 May 2016 23:57:47 +0000 (19:57 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Wed, 25 May 2016 13:50:07 +0000 (09:50 -0400)
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de>
docs/relnotes/11.3.0.html
src/compiler/glsl/builtin_variables.cpp
src/compiler/glsl/glcpp/glcpp-parse.y
src/compiler/glsl/glsl_parser_extras.h

index 5871ec8..8d6caa2 100644 (file)
@@ -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>
index c6668e8..d8b6f6e 100644 (file)
@@ -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");
    }
index e44f074..ee0d8f1 100644 (file)
@@ -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)
index 3ae3c82..0c8405d 100644 (file)
@@ -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);