NVIDIA releases OpenGL 4.1 drivers

Hi,

Here is a series bugs I encounter:
1 - nVidia drivers doesn’t support precision qualifier for input and output varyings.

2 - gl_ViewportIndex isn’t supported.

3 - nVidia drivers behave weirdly with precision qualifiers. On one side there are more of less discard, on other side there are interpreted as int8_t or int16_t which are defined in GL_NV_vertex_attrib_integer_64bit but I don’t use it.

4 - I have a misleading warning with the following simple shader:
0(21) : warning C7050: “GeomColor” might be used before being initialized

#version 400 core

layout(triangles, invocations = 6) in;

in vec3 VertColor[];
layout(stream = 0) out vec3 GeomColor;

uniform mat4 MVP;

void main()
{	
	for(int i = 0; i < gl_in.length(); ++i)
	{
		gl_Position = MVP * (gl_in[i].gl_Position + vec4(vec2(0.0), - 0.3 + float(0.1) * float(gl_InvocationID), 0.0));
		GeomColor = (vec3(gl_InvocationID + 1) / 6.0 + VertColor[i]) / 2.0; 
		EmitVertex();
	}
	EndPrimitive();
}

It is followed by a invalid operation error at draw call.

5 - More misleading errors with a simple control shader:

#version 400 core

layout(vertices = 4) out;

in vert
{
	vec4 Color;
} Vert[];

out cont
{
	vec4 Color;
} Cont[];

void main()
{	
	gl_TessLevelInner[0] = 16.0;
	gl_TessLevelInner[1] = 16.0;
	gl_TessLevelOuter[0] = 8.0;
	gl_TessLevelOuter[1] = 8.0;
	gl_TessLevelOuter[2] = 8.0;
	gl_TessLevelOuter[3] = 8.0;
	gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
	Cont[gl_InvocationID].Color = Vert[gl_InvocationID].Color;
}

0(14) : error C5121: multiple bindings to output semantics
“ATTR0”
0(14) : error C5121: multiple bindings to output semantics “ATTR0”
0(14) : error C5121: multiple bindings to output semantics “ATTR0”

Yes, I have it 3 times…

6 - More geometry shader issue:

#version 410 core

// Declare all the semantics
#define ATTR_POSITION	0
#define ATTR_COLOR		3
#define ATTR_TEXCOORD	4

#define VERT_POSITION	0
#define VERT_COLOR		3
#define VERT_TEXCOORD	4
#define VERT_INSTANCE	7

#define GEOM_COLOR		3

#define FRAG_COLOR		0
#define FRAG_RED		0
#define FRAG_GREEN		1
#define FRAG_BLUE		2
#define FRAG_ALPHA		3

layout(triangles, invocations = 6) in;

layout(location = VERT_COLOR) in vec3 Color[];
layout(location = GEOM_COLOR, stream = 0) out vec3 GeomColor;

uniform mat4 MVP;

void main()
{	
	for(int i = 0; i < gl_in.length(); ++i)
	{
		gl_Position = MVP * (gl_in[i].gl_Position + vec4(vec2(0.0), - 0.3 + float(0.1) * float(gl_InvocationID), 0.0));
		GeomColor = (vec3(gl_InvocationID + 1) / 6.0 + Color[i]) / 2.0; 
		EmitVertex();
	}
	EndPrimitive();
}

which generates the message: (0) fatal error C9999: *** exception during compilation ***

Actually, I didn’t manage to run any gemetry shader code…

Outch

Shared uniform buffer across a block array isn’t supported:
http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=281984#Post281984

what hardware and driver version do I need to be able to use the es2 profile extension (http://developer.download.nvidia.com/opengl/specs/glx_create_context_es2_profile.txt).

So far, I’ve tried downloading the latest driver available for my linux laptop (I have a 9400M, when downloading off the nvidia site, it reported 256.53 as the latest driver for that chip) and I’m not seeing the extension reported via glxinfo.

what hw / driver version do I need?
thanks

nevermind, posted too soon. Had to grab the driver from here: http://developer.nvidia.com/object/opengl_driver.html

with this driver installed, I now see the extension reported on my 9400M. Time to use it :)…

Ok, I was able to create an ES2 context. I verified that if I use an OpenGL call not legal in ES2, that I get an OpenGL error (the same call with a GL3 context does not report an error). Good. That solves half the problem. Thank you :slight_smile:

However, it does seem as though getting an ES2 context is not enough to enforce that GLSL compilation is restricted to the GLSL that is valid for ES2. (I was able to use roundEven() and other calls that aren’t in the ES2 GLSL spec). Is there a way to enforce restricting the compiler to only compile GLSL that is valid for ES2?

I was able to use roundEven() and other calls that aren’t in the ES2 GLSL spec

Then that would be a driver bug. The EXT_create_context_ES2_profile extension is very clear on this:

hi,
are there any news when a new OpenGL 4.1 beta or release driver will be released which addresses some of the more serious reported issues? ([1] gives a nice overview)

I hit a brick wall on my current project when trying to use viewport arrays due to the missing gl_ViewportIndex variable.

[1] http://www.g-truc.net/post-0321.html

FYI, the latest official beta driver (260.63) exposes OpenGL 4.1 but also has these problems (so it is not really a OpenGL 4.1 driver).

This topic was automatically closed 183 days after the last reply. New replies are no longer allowed.