Использование константы функции в качестве аргумента шаблона в шейдере Metal - PullRequest
0 голосов
/ 28 января 2019

У меня есть металлический шейдер с функциями, настроенными с нетиповыми аргументами.Я не могу понять, как вызывать эти функции, используя константы функций:

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;.

Константа доступна, когда шейдер скомпилирован, поэтому это должно быть возможно.

...