首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >金属数据类型对应的Swift数据类型?

金属数据类型对应的Swift数据类型?
EN

Stack Overflow用户
提问于 2019-07-31 22:18:12
回答 1查看 828关注 0票数 1

我正在传递我的金属内核和着色函数的参数结构。我找不到任何地方指定要使用什么Swift数据类型来匹配金属中的数据类型。

我已经尽了最大的努力来猜测在Swift方面使用哪些数据类型,但是我在结构中定义变量的顺序似乎很挑剔。这让我相信他们是不一致的。

例如,以下是我在Metal中使用的数据类型:

代码语言:javascript
复制
struct ComputeParameters {
    bool yesNo;
    int count;
    float scale;
    float2 point;
    float4 color;
};

这是我在Swift中的对应结构:

代码语言:javascript
复制
struct ComputeParameters {
    var yesNo: Bool = false
    var count: Int32 = 0
    var scale: Float32 = 1.0
    var point: float2 = float2(0.0, 0.0)
    var color: float4 = float4(0.0, 0.0, 0.0, 1.0)
}

下面是我从上面使用的数据类型表。

代码语言:javascript
复制
Metal _________ Swift

bool            Bool
int             Int32
float           Float32
float2          float2
float4          float4

这些是对的吗?参数数据类型是否有文档化的地方?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-01 18:22:35

Swift中Int类型的大小取决于目标平台。它可能等于Int32Int64,尽管现在几乎总是Int64。因此,您应该使用更显式的Int32类型来匹配金属的32位int类型。

从Swift 5开始,float2float4分别被反对为SIMD2<Float>SIMD4<Float>。这与金属的float2float4完全一致。

我相信你的其他信件都是正确的。

然而,在Swift中定义这些结构可能并不明智。Swift不保证结构布局(填充、对齐和成员顺序)。因此,您可能会遇到Swift和MSL之间的布局不匹配(我还没有看到这种情况,但关键是它可以)。

我认为,当前的指导方针是在C/Objective中定义此类结构,并通过桥接头导入它们。这使得将结构的memcpy-style复制到金属缓冲区的可能性更大。始终要注意大小和对齐,特别是因为手动重新排序结构成员可以更改结构的大小和/或步幅。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57299520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档