diff options
author | Danylo Piliaiev <[email protected]> | 2018-09-04 11:42:04 +0300 |
---|---|---|
committer | Jordan Justen <[email protected]> | 2019-03-21 23:28:08 -0700 |
commit | ea9bde151f1394ff82b73d028c2a3a747723e525 (patch) | |
tree | a75bb87a5fc1b550dfcab077bfc2a6f89e22cd96 /src/compiler/glsl/ir_reader.cpp | |
parent | 1d996ef7144f97ce948fb8e8ec5792898bea56f6 (diff) |
glsl: Cross validate variable's invariance by explicit invariance only
'invariant' qualifier is propagated on variables which are used
to calculate other invariant variables, however when we are matching
variable's declarations we should take into account only explicitly
declared invariance because invariance propagation is an implementation
specific detail.
Thus new flag is added to ir_variable_data which indicates 'invariant'
qualifier being explicitly set in the shader.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100316
Fixes: 89b60492 ('glsl: Add a pass to propagate the "invariant" and
"precise" qualifiers')
Signed-off-by: Danylo Piliaiev <[email protected]>
Reviewed-by: Jordan Justen <[email protected]>
Diffstat (limited to 'src/compiler/glsl/ir_reader.cpp')
-rw-r--r-- | src/compiler/glsl/ir_reader.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/compiler/glsl/ir_reader.cpp b/src/compiler/glsl/ir_reader.cpp index b87933ba511..d4f0e58b155 100644 --- a/src/compiler/glsl/ir_reader.cpp +++ b/src/compiler/glsl/ir_reader.cpp @@ -419,8 +419,10 @@ ir_reader::read_declaration(s_expression *expr) var->data.sample = 1; } else if (strcmp(qualifier->value(), "patch") == 0) { var->data.patch = 1; + } else if (strcmp(qualifier->value(), "explicit_invariant") == 0) { + var->data.explicit_invariant = true; } else if (strcmp(qualifier->value(), "invariant") == 0) { - var->data.invariant = 1; + var->data.invariant = true; } else if (strcmp(qualifier->value(), "uniform") == 0) { var->data.mode = ir_var_uniform; } else if (strcmp(qualifier->value(), "shader_storage") == 0) { |