小编m3v*_*rik的帖子

GPU驱动程序如何对MTLCommandBuffer中的编码命令进行排序?

我正在尝试使用 Metal 编写一个 3D 引擎。我想了解渲染/计算/blit命令的编码顺序如何影响执行顺序?驱动程序是否遵循应用程序编码的顺序,或者是否尝试进行优化?

换句话说,当一个渲染通道为下一个渲染通道生成数据时,编码顺序是否足以确保渲染目标上没有 RAW 风险?

ios metal

5
推荐指数
1
解决办法
592
查看次数

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

我刚从WWDC 2016的"金属中有什么新东西"视频中了解到function_constants,并且很多次提到UberShaders.我想创建一个片段超级着色器,可以用于不同类型的传递,如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;
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?如果我使用这种方法,我最终编译的MTLFunction是否会看到太多分支?

shader ios metal

4
推荐指数
2
解决办法
344
查看次数

标签 统计

ios ×2

metal ×2

shader ×1