diff --git a/src/compiler/glsl/opt_dead_code_local.cpp b/src/compiler/glsl/opt_dead_code_local.cpp index fc979afcd81..a4038794c6b 100644 --- a/src/compiler/glsl/opt_dead_code_local.cpp +++ b/src/compiler/glsl/opt_dead_code_local.cpp @@ -106,9 +106,12 @@ public: int used = 0; used |= 1 << ir->mask.x; - used |= 1 << ir->mask.y; - used |= 1 << ir->mask.z; - used |= 1 << ir->mask.w; + if (ir->mask.num_components > 1) + used |= 1 << ir->mask.y; + if (ir->mask.num_components > 2) + used |= 1 << ir->mask.z; + if (ir->mask.num_components > 3) + used |= 1 << ir->mask.w; use_channels(deref->var, used);