【问题标题】:iOS Metal Unknown type name 'simd_half3'; did you mean 'simd_char3'?iOS Metal Unknown 类型名称 'simd_half3';你的意思是“simd_char3”吗?
【发布时间】:2021-02-18 00:08:43
【问题描述】:

我正在尝试使用更小的数据结构来存储 Metal 顶点数据。 Particle 结构在 Swift 和 Metal 之间共享,但出现以下错误:

Unknown type name 'simd_half3'; did you mean 'simd_char3'

我需要导入什么来克服这个编译错误?

(直接粘贴到金属着色器文件中时会编译相同的结构)。是不是因为 Swift 中没有 half 类型?

ShaderTypes.h - C 头文件

#ifndef ShaderTypes_h
#define ShaderTypes_h

#include <simd/simd.h>

struct Particle {
    simd_float3 floatTuple; // works fine
    simd_char3 charTuple; // works fine

    simd_half3 halfTuple; // Unknown type name 'simd_half3'; did you mean 'simd_char3'
};

#endif /* ShaderTypes_h */

所有这些类型都定义在同一个文件中,使用命令单击,我可以跳转到它们的定义(因此编辑器知道类型),但我仍然得到那个构建错误。

【问题讨论】:

    标签: swift shader metal ios14


    【解决方案1】:

    我认为问题在于直到最近才在 Swift 中输入 Half(现在在 Xcode 12 中有 Float16)。但是好像还是没有simd_halfN,至少simd/vector_types.h标头中没有列出来。

    对您来说最简单的选择可能是暂时使用float

    【讨论】:

      【解决方案2】:

      在 Swift 中有一个 half 类型,它是 Float16。至于 simd 类型,在 Swift 中,simd_floatN 只是 typealiasSIMDN&lt;Float&gt;

      定义如下:public typealias simd_float3 = SIMD3&lt;Float&gt;

      由于 Swift 现在支持 Float16 用于半精度浮点数,因此您可以将其传递给 SIMDN 泛型,因为它的定义如下(例如 SIMD3

      @frozen public struct SIMD3&lt;Scalar&gt; : SIMD where Scalar : SIMDScalar

      还有一个扩展

      extension Float16 : SIMDScalar

      使Float16符合SIMDScalar

      所以你可以使用SIMDN&lt;Float16&gt;,如果你愿意,你甚至可以在你的代码中输入别名。

      【讨论】:

      • 您提供了高质量的答案 :) 我仍然无法转换,因为 Swift 和它的预编译头文件正在查看 include/simd.h 内部,它没有“一半”的概念或“float16”。 half类型是在“金属扩展向量”中定义的,不能包含在内。我还发现有一些关于矢量大小和填充的东西。 [在早期版本的 simd 库中,向量的对齐方式可能 * 大于 16B,最大为 16、32 或 64 的“架构向量大小”]因此 3 float16 的 8 字节填充向量将与此相反。
      • 你在哪个平台上?我的意思是 Xcode 和 macOS/iOS。 Float16 很新,我认为它只在 Swift 5.3 中可用,但不要引用我的话。此外,如果您可以复制您得到的确切错误,那将很有帮助。 Float16 的可用性是 Xcode 12.0+,所以是的。另外,这里有一个文档链接:developer.apple.com/documentation/swift/float16
      • 我在 iOS 14 上,我在所有这些可以追溯到 iOS11 的示例中看到的类型转换和转换量都非常大。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      相关资源
      最近更新 更多