我有一个Metal着色器,其功能以非类型参数为模板。我不知道如何使用函数常量来调用这些函数:
constant constexpr int inputImageDepth [[function_constant(4)]];
...
template<int index_depth>
void calculateDepthContribution( ...stuff... )
{
// do stuff...
calculateDepthContribution<index_depth-1>( ...stuff... );
}
template<>
void calculateDepthContribution<0>( ...stuff... )
{
// base case does nothing
}
...
kernel void entrypoint( ...stuff... )
{
// do stuff...
calculateDepthContribution<inputImageDepth>( ...stuff... );
// do more stuff...
}
我一直收到invalid explicitly-specified argument for template parameter 'index_depth'
编译错误。我已经通过使用固定常数进行测试来检查着色器中的所有其他功能,即
constant constexpr int inputImageDepth = 4;
。
在编译着色器时可以使用该常量,因此应该可以。