【发布时间】:2019-01-18 07:18:27
【问题描述】:
在使用 Metal 时,我发现类型的数量令人眼花缭乱,而且我并不总是清楚应该在哪种情况下使用哪种类型。
在 Apple 的 Metal Shading Language Specification 中,有一个非常清晰的表格,说明 Metal 着色器文件中支持哪些类型。但是,有大量可用的示例代码似乎使用了 SIMD 中的其他类型。在 macOS(Objective-C)方面,Metal 类型不可用,但 SIMD 类型可用,我不确定应该使用哪些。
例如:
在 Metal Spec 中,float2 被描述为代表两个浮动组件的“矢量”数据类型。
在应用程序方面,以下所有内容似乎都以某种身份被使用或表示:
-
float2,即vector_types.h中的typedef ::simd_float2 float2注意:“在 C 或 Objective-C 中,此类型可用作 simd_float2。”
-
vector_float2,即typedef simd_float2 vector_float2注意:“此类型已弃用;您应该改用 simd_float2 或 simd::float2”
-
simd_float2,即typedef __attribute__((__ext_vector_type__(2))) float simd_float2
-
::simd_float2和simd::float2?
矩阵类型也存在类似情况:
-
matrix_float4x4、simd_float4x4、::simd_float4x4和float4x4、
有人能解释一下为什么有这么多看似重叠功能的 typedef 吗?如果您今天(2018 年)在 Objective-C / Objective-C++ 中编写一个新应用程序,您应该使用哪种类型来表示两个浮点值(x/y)以及可以在应用程序代码和 Metal 之间共享的矩阵变换的类型?
【问题讨论】:
标签: objective-c macos cocoa simd metal