diff --git a/src/front/glsl/constants.rs b/src/front/glsl/constants.rs index 1143b90f34..9f5036aa80 100644 --- a/src/front/glsl/constants.rs +++ b/src/front/glsl/constants.rs @@ -340,10 +340,10 @@ impl<'a> ConstantSolver<'a> { left: Handle, right: Handle, ) -> Result, ConstantSolvingError> { - let left = &self.constants[left].inner; - let right = &self.constants[right].inner; + let left_inner = &self.constants[left].inner; + let right_inner = &self.constants[right].inner; - let inner = match (left, right) { + let inner = match (left_inner, right_inner) { ( &ConstantInner::Scalar { value: left_value, @@ -416,6 +416,20 @@ impl<'a> ConstantSolver<'a> { ConstantInner::Scalar { value, width } } + (&ConstantInner::Composite { ref components, ty }, &ConstantInner::Scalar { .. }) => { + let mut components = components.clone(); + for comp in components.iter_mut() { + *comp = self.binary_op(op, *comp, right)?; + } + ConstantInner::Composite { ty, components } + } + (&ConstantInner::Scalar { .. }, &ConstantInner::Composite { ref components, ty }) => { + let mut components = components.clone(); + for comp in components.iter_mut() { + *comp = self.binary_op(op, left, *comp)?; + } + ConstantInner::Composite { ty, components } + } _ => return Err(ConstantSolvingError::InvalidBinaryOpArgs), };