GLSL片段着色器的兼容性问题

时间:2014-06-19 13:26:17

标签: opengl glsl shader fragment-shader pixel-shader

我发现处理片段着色器的GPU之间存在一些差异。一个例子是pow(x) x为负。一个GPU处理得很好而另一个失败了。

另一种情况是我用if()语句重写了step()语句,并且着色器运行良好。我把这归咎于分支限制或其他什么。

现在我的情况是我的片段着色器在某些GPU上运行,而在某些GPU上运行。我试图搜索GPU /着色器限制和类似信息,但一无所获。

除了我的GTX 780之外,我尝试的所有地方的最新测试都是here online(Shadertoy)

我要求提供任何指示或指向着色器限制的链接以及兼容性方面最常见的问题。

1 个答案:

答案 0 :(得分:1)

着色器限制和规范是特定于供应商的,并且随GPU架构版本而变化。

简单地说,没有统一的方法来“统治所有人”。某些GPU处理分支的方式不同,有些更好,有些更差。有些GPU在数学函数中允许负值,有些则不允许。这完全取决于已使用的体系结构,着色语言的版本以及着色器的编译版本中允许的指令。

最好在特定GPU上尝试/测试着色器,而不是阅读并尝试了解哪种卡有效。对于试图“解决问题”所花费的资源,这可能是最合理的决定。

要直接回答这个问题,没有(易于查找的)资源列出了特定体系结构中使用的编译器的整个规范,您只需按照提示学习,并应用建议和观察结果由其他人。