我将一些基本的OpenCL代码移植到Metal计算着色器。在尝试转换其他辅助函数时很快就卡住了。例如,在.metal
文件中包含类似以下函数的Xcode(7.1)给了我一个"没有以前的函数原型"警告
float maxComponent(float4 a) {
return fmax(a.x, fmax(a.y, fmax(a.z, a.w)));
}
'金属'这样做的方法?
答案 0 :(得分:6)
我知道的三种方式:
(我把这个函数改写为重载,对我来说更具可读性。)
实际上宣布原型:
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])
);
}
}