Metal has two major address spaces, device and constant.
And these are used like this in a shader function.

void foo(device int *data [[buffer(0)]]) { ... }
void bar(constant int *data [[buffer(0)]]) { ... }

I can understand what they are. But I cannot understand how to make them.
How to make a buffer in device(or constant) address space?

At first, I assume that MTLDevice.makeBuffer(length:options:) will do it.
But it doesn't. There are no options for device or constant address space.

我很困惑.我错过了什么?

Thank you.
Sincerely.

推荐答案

简单的答案是:你不能创造constantMTLBuffer,你也不需要这样做.您可以将任何MTLBuffer绑定为constantdevice内存.

长长的答案:constant有点像是对编译器的一个提示.它告诉编译器该缓冲区中的数据将是只读的,但不完全是const意义上的.

这是一段2016年的WWDC视频,其中讨论了这一点,这里有一个带有时间戳的链接:https://developer.apple.com/wwdc16/606?time=272

我认为,这是视频中的关键点:

[.]这是针对具有大量数据重用的情况而优化的地址空间.因此,您希望在有意义的时候利用此地址空间.

但我建议观看演示文稿的这一部分,以了解更多信息.

Swift相关问答推荐

SWIFT Vapor控制台应用程序-操作无法完成.权限被拒绝

在Swift中,是否只有iOS版本超过15才能导入Swift包?

如何在SWIFT中使用DiscardingTaskGroup获得任务结果

是否可以循环遍历SWIFT子类并访问它们的静态变量S?

不能将符合协议的SWIFT类的实例分配给需要该协议的Objective-C属性

从`compactMap()`闭包返回`nil`未通过结果类型判断

Swift 运算符中 inout 的行为

是否可以限制 ExpressibleByIntegerLiteral struct 的初始值?

如何根据 DatePicker 中选定的日期实现 TabView 页面切换?

有没有办法让文本字段以不同的 colored颜色 显示而不影响半透明背景?

如何将视图添加到多行文本视图的末尾?

在 Swift 中增量写入大型文本文件的最佳方法

如何使用 ISO 国家代码(2 个字母)查找区域设置标识符

组合 flatMap 不会返回预期的上下文结果类型

如何防止 UITableViewCell 移动(Swift 5)

为 UIActivityViewController Swift 设置不同的活动项

如何在 Swift 中遍历 struct 属性?

使用 phimagemanager 将图像保存到自定义相册?

在 xcode8 中找不到 ModuleName-Swift.h 文件

Swift 中的单元测试致命错误