我在macOS 2上有一个金属10.12着色器,我正在尝试将int数组传递到其中,但是XCodeUnknown type name 'array'
给了我一个编译时错误。这是我正在使用的代码:
kernel void computeMandelbrot(texture2d<float, access::write> output [[texture(0)]], constant int &maxIterations [[buffer(1)]], const array<int, 10> &hist [[buffer(2)]], uint2 gid [[thread_position_in_grid]]) {
// Compute Mandelbrot
}
我也尝试使用关键字constant
而不是const
但随后我也收到错误Parameter may not be qualified with an address space
.我读过 macOS 上的金属不支持纹理数组,但我不确定这是否适用于其他类型的数组。任何帮助将不胜感激,谢谢!
几件事:
-
Metal2在 macOS 10.12 中不可用。它是 10.13 的新功能。
-
array
在 macOS 上不可用 <=10.12。它在带有Metal 2的macOS 10.13 +上可用。 -
您可以将参数声明为
constant int *hist [[buffer(2)]]
。它不会有明确的长度,而只是限制你引用的元素。
array
只能与纹理和采样器一起使用。编辑:我错了array
只能与纹理和采样器一起使用。该规范通过在标题为"纹理和采样器数组"的部分中介绍它并仅以这种方式说明其用法来建议这种情况,但模板类本身似乎通常很有用。
但是,在Metal 2之前,它在macOS上不可用。换句话说,它仅在macOS 10.13 +上可用。