From 05f050fad485763bf7bf6e1ad4206007b52bc345 Mon Sep 17 00:00:00 2001 From: teoxoy <28601907+teoxoy@users.noreply.github.com> Date: Sun, 20 Mar 2022 21:31:55 +0100 Subject: [PATCH] insert padding between struct members --- src/back/hlsl/writer.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/back/hlsl/writer.rs b/src/back/hlsl/writer.rs index fce74ee91f..e082927e7a 100644 --- a/src/back/hlsl/writer.rs +++ b/src/back/hlsl/writer.rs @@ -712,7 +712,20 @@ impl<'a, W: fmt::Write> super::Writer<'a, W> { let struct_name = &self.names[&NameKey::Type(handle)]; writeln!(self.out, "struct {} {{", struct_name)?; + let mut last_offset = 0; for (index, member) in members.iter().enumerate() { + if member.binding.is_none() && member.offset > last_offset { + // using int as padding should work as long as the backend + // doesn't support a type that's less than 4 bytes in size + // (Error::UnsupportedScalar catches this) + let padding = (member.offset - last_offset) / 4; + for i in 0..padding { + writeln!(self.out, "{}int _pad{}_{};", back::INDENT, index, i)?; + } + } + let ty_inner = &module.types[member.ty].inner; + last_offset = member.offset + ty_inner.size(&module.constants); + // The indentation is only for readability write!(self.out, "{}", back::INDENT)?;