变量和参数的地址空间修饰符
Metal 着色语言使用地址空间修饰符来辨识函数的变量或者参数是分配在哪块地址空间的. 下面的修饰符就是Metal着色语言所支持的的不同的地址空间类型:
- device
- threadgroup
- constant
- thread
Graphics函数(vertex或者fragment)和并行运算函数(kernel)的参数,如果是指针或者引用的话, 必须用地址空间修饰符加以声明. Graphics函数的指针或者饮用参数必须被声明为device或者constant类型. kernel 函数的指针或者引用参数必须被声明为device, threadgroup或者constant类型. 下面就是一个不同的地址空间修饰符的使用例子(例子中的函数参数l_data是用threadgroup修饰的,因此这个函数只能是并行计算函数):
void foo(device int *g_data, threadgroup int *l_data, constant float *c_data) { ... }在程序域(program scope)声明的变量只能用constant来修饰. 所有的指针或者引用变量都必须用地址空间修饰符来声明, 否则会引发编译错误.