From 605bab12e31672cc4523cd11975ebb5bf9bc61c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Capucho?= Date: Sun, 6 Jun 2021 18:52:12 +0100 Subject: [PATCH] [glsl-in] Don't load unsized types --- src/front/glsl/ast.rs | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/front/glsl/ast.rs b/src/front/glsl/ast.rs index 9759635617..3e02c16e3d 100644 --- a/src/front/glsl/ast.rs +++ b/src/front/glsl/ast.rs @@ -260,7 +260,24 @@ impl<'function> Context<'function> { .expressions .append(Expression::AccessIndex { base, index }); - (expr, true) + (expr, { + let ty = program.module.global_variables[handle].ty; + + match program.module.types[ty].inner { + TypeInner::Struct { ref members, .. } => { + if let TypeInner::Array { + size: crate::ArraySize::Dynamic, + .. + } = program.module.types[members[index as usize].ty].inner + { + false + } else { + true + } + } + _ => true, + } + }) } }; @@ -437,7 +454,18 @@ impl<'function> Context<'function> { let base = self.lower_expect(program, base, lhs, body)?.0; let index = self.lower_expect(program, index, false, body)?.0; - self.add_expression(Expression::Access { base, index }, body) + let pointer = self.add_expression(Expression::Access { base, index }, body); + + if let TypeInner::Pointer { .. } = *program.resolve_type(self, pointer, meta)? { + if !lhs { + return Ok(( + Some(self.add_expression(Expression::Load { pointer }, body)), + meta, + )); + } + } + + pointer } HirExprKind::Select { base, field } => { let base = self.lower_expect(program, base, lhs, body)?.0;