glsl: Create and use a has_uniform_buffer_objects() helper.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 24 Sep 2013 01:18:14 +0000 (18:18 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 26 Sep 2013 23:55:18 +0000 (16:55 -0700)
This is better than overriding the extension enable based on the
language version; it's robust against shaders that do:

   #version 140
   #extension GL_ARB_uniform_buffer_object : disable

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/glsl/glsl_parser.yy
src/glsl/glsl_parser_extras.cpp
src/glsl/glsl_parser_extras.h

index 56ca4ad8b07dcc1bfd751813ecb1c3ab315ad667..912931a4786c10584d97d38afd170ba122b37370 100644 (file)
@@ -1200,7 +1200,7 @@ layout_qualifier_id:
       }
 
       /* See also interface_block_layout_qualifier. */
-      if (!$$.flags.i && state->ARB_uniform_buffer_object_enable) {
+      if (!$$.flags.i && state->has_uniform_buffer_objects()) {
          if (strcmp($1, "std140") == 0) {
             $$.flags.q.std140 = 1;
          } else if (strcmp($1, "shared") == 0) {
@@ -1328,7 +1328,7 @@ layout_qualifier_id:
    {
       $$ = $1;
       /* Layout qualifiers for ARB_uniform_buffer_object. */
-      if ($$.flags.q.uniform && !state->ARB_uniform_buffer_object_enable) {
+      if ($$.flags.q.uniform && !state->has_uniform_buffer_objects()) {
          _mesa_glsl_error(& @1, state,
                           "#version 140 / GL_ARB_uniform_buffer_object "
                           "layout qualifier `%s' is used", $1);
@@ -2138,7 +2138,7 @@ basic_interface_block:
       block->declarations.push_degenerate_list_at_head(& $4->link);
 
       if ($1.flags.q.uniform) {
-         if (!state->ARB_uniform_buffer_object_enable) {
+         if (!state->has_uniform_buffer_objects()) {
             _mesa_glsl_error(& @1, state,
                              "#version 140 / GL_ARB_uniform_buffer_object "
                              "required for defining uniform blocks");
index a2b52ef004ff2e20e8e697f4cbbda2e1aec9bb92..e9922fc1456c1cc6222ec1f2c4b164106a560462 100644 (file)
@@ -299,10 +299,6 @@ _mesa_glsl_parse_state::process_version_directive(YYLTYPE *locp, int version,
         break;
       }
    }
-
-   if (this->language_version >= 140) {
-      this->ARB_uniform_buffer_object_enable = true;
-   }
 }
 
 extern "C" {
index 27ebbcff88ee9abc136f0d448d6991ff3b94b53f..cef4436f672b542f80abfa8d08555c559f375ea3 100644 (file)
@@ -126,6 +126,11 @@ struct _mesa_glsl_parse_state {
       return ARB_explicit_attrib_location_enable || is_version(330, 300);
    }
 
+   bool has_uniform_buffer_objects() const
+   {
+      return ARB_uniform_buffer_object_enable || is_version(140, 300);
+   }
+
    void process_version_directive(YYLTYPE *locp, int version,
                                   const char *ident);