У меня есть металлический шейдер с функциями, настроенными с нетиповыми аргументами.Я не могу понять, как вызывать эти функции, используя константы функций:
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;
.
Константа доступна, когда шейдер скомпилирован, поэтому это должно быть возможно.