未知的类型名称数组

时间:2017-08-14 05:56:50

标签: macos graphics metal

我在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上的金属不支持纹理数组,但我不确定这是否适用于其他类型的数组。任何帮助都会非常有用,谢谢!

1 个答案:

答案 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 +。