在Metal着色器中使用函数常量作为模板参数

时间:2019-01-28 10:55:04

标签: shader metal

我有一个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;

在编译着色器时可以使用该常量,因此应该可以。

0 个答案:

没有答案