gpt4 book ai didi

ios - 在 Metal 中使用 function_constants 创建 UberShader 的正确方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 05:03:40 24 4
gpt4 key购买 nike

我刚刚在 WWDC 2016 的“Metal 的新功能”视频中了解了 function_constants,它多次提到了 UberShaders。我想创建一个片段 super 着色器,可用于不同类型的 channel ,如 simplePassThrough、defferred 等。下面是我想如何使用它。

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 会看到太多分支吗?

最佳答案

这是函数常量的合法用例,在运行时不会有分支成本。这是因为编译器将删除它确定永远不会执行的代码(例如,因为它等同于 if(false) { ... })。

关于ios - 在 Metal 中使用 function_constants 创建 UberShader 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40029139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com