使用 **packed** 顶点结构有任何速度损失吗?

Is there any speed penalty to use **packed** vertex structure?

我在我的金属着色器实现中有这个声明:

    struct InVertex {
      packed_float3 pos;
      packed_float2 textureCoord;
      packed_uchar4 color;
    };

使用 packed 声明是否有任何速度损失?如果是,如何测量?

基于此Metal Shading Language Specification

  • 您不能使用 stage_in 属性来声明 packed 的结构成员 向量、矩阵、结构、位域、类型的引用或指针,或标量数组, 向量或矩阵。

  • MSL 函数和参数有以下附加限制: return 类型的顶点或片段函数不能包含 packed 向量类型、矩阵类型、结构类型的元素, 引用或指向类型的指针。

  • 您可以使用数组索引来访问 packed 矢量数据类型的组件。然而,你 不能使用 .xyzw 或 .rgba 选择语法访问 packed 矢量数据的组件 类型。

Is there any speed penalty to use packed vertex structure?

这个 中描述得非常好,简而言之,您会从速度方面受益,尤其是在传递大量数据时。