微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

顺序:在顶点 OP 之后保证片段 OP?逻辑和光栅化顺序似乎很弱

如何解决顺序:在顶点 OP 之后保证片段 OP?逻辑和光栅化顺序似乎很弱

为了完全理解同步,我偶然发现了不同的顺序保证。我认为最强的是光栅化顺序,它为单个像素的片段操作顺序提供了强有力的保证。

更弱和更一般的顺序是流水线阶段的逻辑顺序。引用圣经:

作为命令的结果而执行的流水线阶段以特定顺序在逻辑上完成执行,这样逻辑上较晚的流水线阶段的完成不得发生在逻辑上较早的阶段完成之前。 [...] 同样,逻辑上较早的流水线阶段的启动不得在逻辑上较晚的流水线阶段启动后发生。

这种保证似乎很弱,因为它似乎允许同时运行所有管道阶段,只要它们以正确的顺序开始和结束即可。

这让我得出一个结论:这一切难道不会让顶点阶段在片段阶段开始之前无法完成吗?这是考虑单个三角形的情况。由于我认为这绝对不是正在发生的事情(或可能发生的事情),所以最好能找出规范在哪里做出保证。

解决方法

你的想法有问题。管道不是有限状态机。当用图表表示时,它们可能看起来相同,但它们并不相同。管道阶段不会“运行”,因为它们不是 FSM 状态。相反,队列操作通过管道运行(因此得名)。实际上,一个命令可以产生多个顶点着色器调用。几何着色器可以产生多个(或没有)片段着色器调用。这里唯一可以保证的是,事情不会与流程的管道方向背道而驰(例如,片段着色器调用永远不会产生新的顶点着色器)。

话虽如此,您正在查看规范的错误部分。您“仅”引用的段落指定了逻辑顺序。 IE。适当地将流水线阶段隐式添加到同步命令中。逻辑上较早的阶段被隐式添加到任何源范围参数,而逻辑上较晚的阶段被添加到任何目标阶段参数。但请注意,这并没有说明着色器的副作用,也不适用于内存依赖,后者必须明确声明要工作的阶段。

您正在寻找的是Shader Execution章节:

不同着色器类型调用的相对执行顺序在很大程度上是未定义的。但是,在调用其输入是从前一流水线阶段生成的着色器时,保证来自前一阶段的着色器调用已执行到足以为所有所需输入生成输入值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。