我刚看了一段 WWDC2016 中的 "Metal 新特性" 视频,学到了关于 function_constants 的知识,并且其中多次提到了 UberShaders。我想创建一个能用于各种通道(如 simplePassThrough、defferred 等)的片元 UberShader。以下是我想要使用它的方式。
constant int passType [[function_constant(0)]];
constant bool simplePassThrough = (passType == 0);
constant bool forwardShading = (passType == 1);
constant bool deferredShading = (passType == 2);
fragment FragmentOutStruct UberFragmentShader()
{
FragmentOutputStruct frgOut;
if (simplePassThrough) {
// Update frgOut
} else if (forwardShading) {
// Update frgOut
} else if (deferredShading) {
// Update frgOut
}
return frgOut;
}
这是正确的方法吗?如果我使用这种方法,我的最终编译MTLFunction是否会看到太多的分支?