diff --git a/src/front/spv/mod.rs b/src/front/spv/mod.rs index fc07e58b4e..b0a09dbcd1 100644 --- a/src/front/spv/mod.rs +++ b/src/front/spv/mod.rs @@ -34,6 +34,7 @@ use std::{convert::TryInto, num::NonZeroU32, path::PathBuf}; pub const SUPPORTED_CAPABILITIES: &[spirv::Capability] = &[ spirv::Capability::Shader, spirv::Capability::CullDistance, + spirv::Capability::ImageQuery, spirv::Capability::StorageImageExtendedFormats, ]; pub const SUPPORTED_EXTENSIONS: &[&str] = &[]; @@ -2016,6 +2017,7 @@ impl> Parser { let mut members = Vec::with_capacity(inst.wc as usize - 2); let mut member_type_ids = Vec::with_capacity(members.capacity()); + let mut host_shared = false; for i in 0..u32::from(inst.wc) - 2 { let type_id = self.next()?; member_type_ids.push(type_id); @@ -2024,6 +2026,8 @@ impl> Parser { .future_member_decor .remove(&(id, i)) .unwrap_or_default(); + // this is a bit of a hack + host_shared |= decor.offset.is_some(); members.push(crate::StructMember { name: decor.name, span: None, //TODO @@ -2032,7 +2036,7 @@ impl> Parser { } let inner = crate::TypeInner::Struct { - block: block_decor.is_some(), + block: block_decor.is_some() || host_shared, members, }; let ty_handle = module.types.append(crate::Type {