From e7d712e608c8aa415d6fe0e3c9785d26ac8cfb9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Capucho?= Date: Sun, 20 Jun 2021 11:00:31 +0100 Subject: [PATCH] [glsl-in] Apply constant binary ops to composites --- src/front/glsl/constants.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) 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), };