This patch (or separate) could also change the keyword line in glsl_lexer.ll:412.


On 04/30/2015 02:26 AM, Ian Romanick wrote:
From: Ian Romanick <ian.d.roman...@intel.com>

Signed-off-by: Ian Romanick <ian.d.roman...@intel.com>
---
  src/glsl/builtin_variables.cpp  | 35 +++++++++++++++++++++++++++++++----
  src/glsl/glsl_parser_extras.cpp | 10 ++++++++++
  src/glsl/glsl_parser_extras.h   | 12 +++++++++++-
  3 files changed, 52 insertions(+), 5 deletions(-)

diff --git a/src/glsl/builtin_variables.cpp b/src/glsl/builtin_variables.cpp
index 9d0b272..6806aa1 100644
--- a/src/glsl/builtin_variables.cpp
+++ b/src/glsl/builtin_variables.cpp
@@ -656,16 +656,43 @@ builtin_variable_generator::generate_constants()
     if (state->has_atomic_counters()) {
        add_const("gl_MaxVertexAtomicCounters",
                  state->Const.MaxVertexAtomicCounters);
-      add_const("gl_MaxGeometryAtomicCounters",
-                state->Const.MaxGeometryAtomicCounters);
        add_const("gl_MaxFragmentAtomicCounters",
                  state->Const.MaxFragmentAtomicCounters);
        add_const("gl_MaxCombinedAtomicCounters",
                  state->Const.MaxCombinedAtomicCounters);
        add_const("gl_MaxAtomicCounterBindings",
                  state->Const.MaxAtomicBufferBindings);
-      add_const("gl_MaxTessControlAtomicCounters", 0);
-      add_const("gl_MaxTessEvaluationAtomicCounters", 0);
+
+      /* When Mesa adds support for GL_OES_geometry_shader and
+       * GL_OES_tessellation_shader, this will need to change.
+       */
+      if (!state->es_shader) {
+         add_const("gl_MaxGeometryAtomicCounters",
+                   state->Const.MaxGeometryAtomicCounters);
+         add_const("gl_MaxTessControlAtomicCounters", 0);
+         add_const("gl_MaxTessEvaluationAtomicCounters", 0);
+      }
+   }
+
+   if (state->is_version(420, 310)) {
+      add_const("gl_MaxVertexAtomicCounterBuffers",
+                state->Const.MaxVertexAtomicCounterBuffers);
+      add_const("gl_MaxFragmentAtomicCounterBuffers",
+                state->Const.MaxFragmentAtomicCounterBuffers);
+      add_const("gl_MaxCombinedAtomicCounterBuffers",
+                state->Const.MaxCombinedAtomicCounterBuffers);
+      add_const("gl_MaxAtomicCounterBufferSize",
+                state->Const.MaxAtomicCounterBufferSize);
+
+      /* When Mesa adds support for GL_OES_geometry_shader and
+       * GL_OES_tessellation_shader, this will need to change.
+       */
+      if (!state->es_shader) {
+         add_const("gl_MaxGeometryAtomicCounterBuffers",
+                   state->Const.MaxGeometryAtomicCounterBuffers);
+         add_const("gl_MaxTessControlAtomicCounterBuffers", 0);
+         add_const("gl_MaxTessEvaluationAtomicCounterBuffers", 0);
+      }
     }

     if (state->is_version(430, 0) || state->ARB_compute_shader_enable) {
diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp
index 91f225e..59e1d6e 100644
--- a/src/glsl/glsl_parser_extras.cpp
+++ b/src/glsl/glsl_parser_extras.cpp
@@ -117,6 +117,16 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct 
gl_context *_ctx,
     this->Const.MaxFragmentAtomicCounters = 
ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxAtomicCounters;
     this->Const.MaxCombinedAtomicCounters = 
ctx->Const.MaxCombinedAtomicCounters;
     this->Const.MaxAtomicBufferBindings = ctx->Const.MaxAtomicBufferBindings;
+   this->Const.MaxVertexAtomicCounterBuffers =
+      ctx->Const.Program[MESA_SHADER_VERTEX].MaxAtomicBuffers;
+   this->Const.MaxGeometryAtomicCounterBuffers =
+      ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxAtomicBuffers;
+   this->Const.MaxFragmentAtomicCounterBuffers =
+      ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxAtomicBuffers;
+   this->Const.MaxCombinedAtomicCounterBuffers =
+      ctx->Const.MaxCombinedAtomicBuffers;
+   this->Const.MaxAtomicCounterBufferSize =
+      ctx->Const.MaxAtomicBufferSize;

     /* Compute shader constants */
     for (unsigned i = 0; i < ARRAY_SIZE(this->Const.MaxComputeWorkGroupCount); 
i++)
diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
index 61d4c93..42b7442 100644
--- a/src/glsl/glsl_parser_extras.h
+++ b/src/glsl/glsl_parser_extras.h
@@ -192,7 +192,7 @@ struct _mesa_glsl_parse_state {

     bool has_atomic_counters() const
     {
-      return ARB_shader_atomic_counters_enable || is_version(400, 0);
+      return ARB_shader_atomic_counters_enable || is_version(400, 310);
     }

     bool has_explicit_attrib_stream() const
@@ -353,6 +353,16 @@ struct _mesa_glsl_parse_state {
        unsigned MaxCombinedAtomicCounters;
        unsigned MaxAtomicBufferBindings;

+      /* These are also atomic counter related, but they weren't added to
+       * until atomic counters were added to core in GLSL 4.20 and GLSL ES
+       * 3.10.
+       */
+      unsigned MaxVertexAtomicCounterBuffers;
+      unsigned MaxGeometryAtomicCounterBuffers;
+      unsigned MaxFragmentAtomicCounterBuffers;
+      unsigned MaxCombinedAtomicCounterBuffers;
+      unsigned MaxAtomicCounterBufferSize;
+
        /* ARB_compute_shader */
        unsigned MaxComputeWorkGroupCount[3];
        unsigned MaxComputeWorkGroupSize[3];

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to