【发布时间】:2019-10-26 19:29:27
【问题描述】:
我的金属着色器实现中有这个声明:
struct InVertex {
packed_float3 pos;
packed_float2 textureCoord;
packed_uchar4 color;
};
使用 packed 声明是否有任何速度损失?如果是,如何测量?
【问题讨论】:
我的金属着色器实现中有这个声明:
struct InVertex {
packed_float3 pos;
packed_float2 textureCoord;
packed_uchar4 color;
};
使用 packed 声明是否有任何速度损失?如果是,如何测量?
【问题讨论】:
基于此Metal Shading Language Specification
您不能使用 stage_in 属性来声明 packed 结构的成员 向量、矩阵、结构、位域、类型的引用或指针,或标量数组, 向量或矩阵。
MSL 函数和参数具有以下附加限制: 顶点或片段函数的返回类型不能包含 packed 向量类型、矩阵类型、结构类型的元素, 引用,或指向类型的指针。
您可以使用数组索引来访问 packed 矢量数据类型的组件。然而,你 不能使用 .xyzw 或 .rgba 选择语法来访问 packed 矢量数据的组件 输入。
使用 packed 顶点结构是否会降低速度?
在answer 中对其进行了很好的描述,简而言之,您将从使用它中受益,在速度方面,尤其是在传递大量数据时。
【讨论】: