OSDN Git Service

glsl: Allow dynamic sampler array indexing with GLSL ES < 3.00
authorTapani Pälli <tapani.palli@intel.com>
Tue, 9 Jun 2015 10:28:44 +0000 (13:28 +0300)
committerEmil Velikov <emil.l.velikov@gmail.com>
Wed, 1 Jul 2015 14:22:40 +0000 (15:22 +0100)
Dynamic indexing of sampler arrays is prohibited by GLSL ES 3.00.
Earlier versions allow 'constant-index-expression' indexing, where
index can contain a loop induction variable.

Patch allows dynamic indexing for sampler arrays when GLSL ES < 3.00.
This change makes 'sampler-array-index.frag' parser test in Piglit
pass + fishgl.com works when running Chrome on OpenGL ES 2.0 backend

v2: small change and some more commit message (Tapani)
v3: refactor checks to make it more readable (Ian Romanick)
v4: change warning comment in GLSL ES case (Curro)

Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Signed-off-by: Kalyan Kondapally <kalyan.kondapally@intel.com>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Cc: "10.5" and "10.6" <mesa-stable@lists.freedesktop.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=84225
(cherry picked from commit edb8383c98ee23385731d0fc23a6b6673528a8ec)
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Conflicts:
src/glsl/ast_array_index.cpp

src/glsl/ast_array_index.cpp

index ff0c757..460e6e0 100644 (file)
@@ -228,24 +228,26 @@ _mesa_ast_array_index_to_hir(void *mem_ctx,
        * dynamically uniform expression is undefined.
        */
       if (array->type->element_type()->is_sampler()) {
-        if (!state->is_version(130, 100)) {
-           if (state->es_shader) {
-              _mesa_glsl_warning(&loc, state,
-                                 "sampler arrays indexed with non-constant "
-                                 "expressions is optional in %s",
-                                 state->get_version_string());
-           } else {
-              _mesa_glsl_warning(&loc, state,
-                                 "sampler arrays indexed with non-constant "
-                                 "expressions will be forbidden in GLSL 1.30 "
-                                 "and later");
-           }
-        } else if (!state->is_version(400, 0) && !state->ARB_gpu_shader5_enable) {
-           _mesa_glsl_error(&loc, state,
-                            "sampler arrays indexed with non-constant "
-                            "expressions is forbidden in GLSL 1.30 and "
-                            "later");
-        }
+         if (!state->is_version(400, 0) && !state->ARB_gpu_shader5_enable) {
+            if (!state->is_version(130, 100)) {
+               if (state->es_shader) {
+                  _mesa_glsl_warning(&loc, state,
+                                     "sampler arrays indexed with non-constant "
+                                     "expressions is optional in %s",
+                                     state->get_version_string());
+               } else {
+                  _mesa_glsl_warning(&loc, state,
+                                    "sampler arrays indexed with non-constant "
+                                    "expressions will be forbidden in GLSL 1.30 "
+                                    "and later");
+               }
+            } else if (!state->is_version(400, 0) && !state->ARB_gpu_shader5_enable) {
+               _mesa_glsl_error(&loc, state,
+                                "sampler arrays indexed with non-constant "
+                                "expressions is forbidden in GLSL 1.30 and "
+                                "later");
+            }
+         }
       }
    }