在我们的OpenGL游戏中,我们在ATI Radeon x800卡上出现了着色器链接失败。 glGetProgramInfoLog
报告:
Fragment shader(s) failed to link, vertex shader(s) linked.
Fragment Shader not supported by HW
一些谷歌搜索表明,由于片段着色器非常长,我们可能会达到ALU指令限制。有什么方法可以验证吗?
我无法找到x800的详细规格,也无法在运行时查询指令限制。即使我能够查询它,我如何确定着色器的指令数量?
答案 0 :(得分:3)
您可能会遇到几个限制:
从技术上讲,X800是一个着色器型号2 GPU,与GLSL 1.20提供的一样。当我使用Radeon 9800开始着色器编程,而X800在技术上只是一个升级的9800时,我很快就放弃了用GLSL做这个的想法。这太有限了。而且,当计算机只有有限的资源和功能时,通常就是使用汇编。在这种情况下,我指的是由ARB_fragment_program扩展提供的程序集。
答案 1 :(得分:3)
GLview是一个很好的工具,可以轻松查看GPU /驱动程序组合的所有限制和支持GL扩展。如果我没记错的话,我之前使用过AMD GPU ShaderAnalyzer,它允许你看到GLSL着色器的汇编编译版本。 NVidia使用nvemulate工具提供相同的功能。
与当前的GPU相比,x800的着色器功率非常有限。对于这种低端GPU来说,你可能不得不削减你的着色器复杂性以获得适当的性能。如果您的GLSL版本正在运行,只需为X800选择不同的片段着色器可能是最明智的方法。