Metalのシェーダーで転送した情報のうち、一部が欠ける


MetalでVertexShaderにマテリアルの情報を転送するために、以下のような構造体を定義してmakebufferしてからの、データをマッピングしたとき、21個のマテリアル情報をセットしたのに、実際は17個分しか転送されなかった。

struct material
{
    float4 ambientColor;
    float4 diffuseColor;
    float4 specularColor;
    float specularPower;
};

以下のように構造体のByte数を無理やり16の倍数に変更すると正しく動作した。

struct material//計64Byte
{
    float4 ambientColor;// 4 * 4 = 16Byte
    float4 diffuseColor;// 4 * 4 = 16Byte
    float4 specularColor;// 4 * 4 = 16Byte
    float specularPower;// 4Byte
    float space1;// 4Byte
    float space2;// 4Byte
    float space3;// 4Byte
};

Metalへデータを転送するときに構造体を使用するときは、1つの構造体のByte数が16の倍数になるようにしないといけないみたいです。