安装最新的NVidia Quadro驱动程序后出现Shader链接错误(311.35)

时间:2013-04-08 20:22:24

标签: opengl gpu

我刚刚为Quadro 4000卡安装了最新的NVidia驱动程序。从这时起,我的任何着色器链接都会失败并出现着色器链接错误。 值得注意的是我使用OpenGL 4.2和单独的着色器对象。我的操作系统是Windows7 64位。 在更新之前,我有309.x版本的驱动程序,一切正常。 现在我回滚到版本295.x并再次运行。 任何人都知道它的事情吗?它可能是一个驱动程序错误?如果是的话,可以做些什么呢?

这是一个简单的顶点着色器通过失败:

#version 420 core

layout(location = 0) in vec4 position;
layout(location = 1) in vec2 uvs;
layout(location = 2) in vec3 normal;


smooth out vec2 uvsOut;
void main()
{
    uvsOut=uvs;
    gl_Position = position;
}

另一个问题是,NVIdia可能会收紧着色器版本语义规则吗?我的意思是,我使用OpenGL兼容性配置文件,但在GLSL标记#version 420 core.Can它是问题吗?

更新

来自节目信息日志的更多信息:

错误C7592:ARB_separate_shader_objects要求在访问其成员之前重新声明内置块gl_PerVertex。

是的,司机作家也有拼写错误“访问”;)

现在,我实际上通过添加以下内容解决了链接错误:

out gl_PerVertex
{
    vec4 gl_Position;
};

奇怪的是,之前的驱动程序没有强制重新定义gl_PerVertex块。现在,虽然这个插件解决了链接的问题,但它打开了另一个不同的制服不起作用。例如我在顶点着色器中:

  out vec4 diffuseOut;

在片段着色器中:

 in vec4 diffuseOut;

然后

  OUTPUT = diffuseOut;/// returns black while red is expected.

更新2: 好吧,现在它变得清晰了 - 新的驱动程序对着色器输入/输出变量更严格。使用较旧的驱动程序,我可以在顶点着色器中定义几个“出口”,但是也没有在片段着色器中定义它们的“in”匹配。它工作了现在看来我被迫在vert和frag program中声明了“ins”和“outs”之间的完全匹配。转换为没有抛出错误但结果是定义的“ins”在目标中变空。

0 个答案:

没有答案