我在macOS 10.12上有一个金属2着色器,我试图将一个int数组传入,但是XCode给了我一个编译时错误Unknown 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上的金属不支持纹理数组,但我不确定这是否适用于其他类型的数组。任何帮助都会非常有用,谢谢!
答案 0 :(得分:0)
一些事情:
MacOS 10.12中没有金属 2 。这是10.13的新功能。
array
仅适用于纹理和采样器。
array
在macOS&lt; = 10.12上不可用。它可以在带有Metal 2的macOS 10.13+上使用。
您可以将参数声明为constant int *hist [[buffer(2)]]
。它没有明确的长度,只是限制你引用的元素。
编辑:{错误} array
只能用于纹理和采样器。该规范建议通过在标题为“纹理和采样器阵列”的部分中引入它并仅以这种方式说明其使用,但模板类本身似乎通常有用。
然而,在Metal 2之前,它在macOS上不可用。换句话说,它仅适用于macOS 10.13 +。