Массивы ссылок не разрешены в C ++, и MSL не поддерживает их как расширение.
Однако вы можете взять указатель на тип, содержащийся в массиве:
fragment vec4 fragment_func(constant float4 *colors [[buffer(0)]], ...) {...}
При необходимости вы можете передать размер массива в качестве другого параметра буфера или просто убедиться, что ваша функция шейдера не читает больше элементов, чем присутствует в буфере.
Тогда доступ к элементам так же просто, как обычный разыменование:
float4 color0 = *colors; // or, more likely:
float4 color2 = colors[2];