填充一个结构,使其大小是 16 字节的倍数

Pad a struct so its size is a multiple of 16 bytes

我试图让我的 C# 结构匹配一些复杂的 padding and packing rules

使用 StructLayout 属性我可以确保字段在 4 字节边界上对齐。

[StructLayout(LayoutKind.Sequential, Pack=4)]
struct Foo
{
    float a;
    float b;
}

但是查看 StructLayout 属性的其他选项,我看不到将结构填充为 16 字节的倍数的选项。在 C# 中没有选项吗?

我看到的唯一选项是使用 StructLayout 属性的 Size 属性 手动设置正确的大小。但这对我来说似乎很脆弱。因为每次有人向这个结构添加一个字段时,他们应该注意不要忘记更新大小。

经过更多搜索,看起来我确实必须手动设置 Size 和 FieldOffset 才能在 DirectX/HLSL/C# 互操作代码中获得常量缓冲区的正确打包规则。

在我自己的项目中,这甚至有点复杂。因为我使用源代码生成器来创建这些结构。但最终我还是弄明白了。对于那些感兴趣的人,可以找到源代码 here.