我正在将一些基本的OpenCL代码移植到Metal计算着色器中。在尝试转换杂项辅助函数时遇到了困难。例如,在.metal
文件中包含以下函数会导致Xcode(7.1)给出“函数没有先前的原型”的警告:
float maxComponent(float4 a) {
return fmax(a.x, fmax(a.y, fmax(a.z, a.w)));
}
这应该采用"底层"的方式来完成吗?
我知道三种方式:
(我重写了函数成为一个重载函数,更容易理解)
实际上声明原型:
float fmax(float4 float4);
float fmax(float4 float4) {
return fmax(
fmax(float4[0], float4[1]),
fmax(float4[2], float4[3])
);
}
使用 static 关键字将作用域限定为文件:
static float fmax(float4 float4) {
return fmax(
fmax(float4[0], float4[1]),
fmax(float4[2], float4[3])
);
}
将其放在匿名命名空间中:
namespace {
float fmax(float4 float4) {
return metal::fmax(
metal::fmax(float4[0], float4[1]),
metal::fmax(float4[2], float4[3])
);
}
}