WWDC 2016の "What's new in Metal"ビデオでfunction_constantsについて学びました。それはUberShadersにかなりの数の言及がありました。 simplePassThrough、defferredなどのようなパスの異なる種類に使用できる断片的なシェーダを作成したいと考えています。以下は、どのように使用したいかです。Metalのfunction_constantsを使って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にブランチが多く見えますか?