diff options
author | Iago Toral Quiroga <[email protected]> | 2015-11-27 12:46:20 +0100 |
---|---|---|
committer | Iago Toral Quiroga <[email protected]> | 2015-12-01 08:30:52 +0100 |
commit | 750393ff7d6162372f368f5ed726b23f4cae49a0 (patch) | |
tree | 31157762cd169a9284cf584b4b3f24391231e65e | |
parent | 4f347225752b48f3dc5a59a6be71fe78616252a7 (diff) |
glsl/dead_builin_varyings: Fix gl_FragData array lowering
The current implementation looks for array dereferences on gl_FragData and
immediately proceeds to lower them, however this is not enough because we
can have array access on vector variables too, like in this code:
out vec4 color;
void main()
{
int i;
for (i = 0; i < 4; i++)
color[i] = 1.0;
}
Fix it by making sure that the actual variable being dereferenced is an array.
Fixes a crash in:
spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-ldexp-dvec4.shader_test
Reviewed-by: Tapani Pälli <[email protected]>
-rw-r--r-- | src/glsl/opt_dead_builtin_varyings.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/glsl/opt_dead_builtin_varyings.cpp b/src/glsl/opt_dead_builtin_varyings.cpp index 68b70eedf92..53871130e12 100644 --- a/src/glsl/opt_dead_builtin_varyings.cpp +++ b/src/glsl/opt_dead_builtin_varyings.cpp @@ -85,7 +85,7 @@ public: { ir_variable *var = ir->variable_referenced(); - if (!var || var->data.mode != this->mode) + if (!var || var->data.mode != this->mode || !var->type->is_array()) return visit_continue; if (this->find_frag_outputs && var->data.location == FRAG_RESULT_DATA0) { |