From 973cfbc5d39b0a10c6863d20c30b8eb8a97cac12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristoffer=20S=C3=B8holm?= Date: Mon, 2 Nov 2020 21:40:04 +0100 Subject: [PATCH] [glsl-in] Add support for interface blocks --- src/front/glsl/parser.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/front/glsl/parser.rs b/src/front/glsl/parser.rs index b32b711f0d..bf10899fc2 100644 --- a/src/front/glsl/parser.rs +++ b/src/front/glsl/parser.rs @@ -1071,7 +1071,29 @@ pomelo! { ); if let Some(id) = id { extra.lookup_global_variables.insert(id, h); + } else { + // variables in interface blocks without an instance name are in the global namespace + // https://www.khronos.org/opengl/wiki/Interface_Block_(GLSL) + if let TypeInner::Struct { members } = &extra.module.types[d.ty].inner { + for m in members { + if let Some(name) = &m.name { + let h = extra + .module + .global_variables + .fetch_or_append(GlobalVariable { + name: Some(name.into()), + class, + binding: binding.clone(), + ty: m.ty, + interpolation, + storage_access: StorageAccess::empty(), // TODO + }); + extra.lookup_global_variables.insert(name.into(), h); + } + } + } } + } }