AMD and nVidia have released some fresh drivers which has significantly raise the OpenGL support.

On nVidia side, the OpenGL 4.1 implementation has reach the stable drivers as it fixes a lot of issues and seems to work pretty well.

On AMD side, the Catalyst 10.10c provides an OpenGL 4.1 drivers for the first time but I believe it happens as accident: First Catalyst 10.10a were released with the OpenGL 4.1 drivers but without any information then the Catalyst 10.10c has been release with OpenGL 4.1 beta support in the release note. Unfortunately, nothing seems to work yet... It probably only means that AMD has just started working on the OpenGL 4.1 drivers.

nVidia drivers still doesn't support varying structures but worse the drivers report an error that claims through an error message that varying structures are not supported in OpenGL... but they should support varying structure according to the spec. That's why I called these warnings "offensive" and following some proofs:

Fragment inputs can only be signed and unsigned integers and integer vectors, floating point scalars, floating-point vectors, matrices, or arrays or structures of these OpenGL Shading Language 4.10 specification section 4.3.4 Inputs

Vertex, tessellation evaluation, and geometry output variables output per-vertex data and are declared using the out, centroid out, or sample out storage qualifiers, or the deprecated varying storage qualifier. It is an error to use patch out in a vertex, tessellation evaluation, or geometry shader. Output variables can only be floating-point scalars, floating-point vectors, matrices, signed or unsigned integers or integer vectors, or arrays or structures of any these. OpenGL Shading Language 4.10 specification section 4.3.6 Outputs

Tessellation control shader output variables are may be used to output per-vertex and per-patch data. Pervertex output variables are arrayed (see arrayed under 4.3.4 Inputs) and declared using out or centroid out storage qualifiers. Per-patch output variables are declared using the patch out storage qualifier. Pervertex and per-patch output variables can only be floating-point scalars, floating-point vectors, matrices, signed or unsigned integers or integer vectors, or arrays or structures of any these. OpenGL Shading Language 4.10 specification section 4.3.6 Outputs

Varying structures have only limitations on input of the vertex shader and output of the fragment shader.

Vertex shader inputs can also form arrays of these types, but not structures. OpenGL Shading Language 4.10 specification section 4.3.4 Inputs

Fragment outputs output per-fragment data and are declared using the out storage qualifier. It is an error to use centroid out, sample out, or patch out in a fragment shader. Fragment outputs can only be float, floating-point vectors, signed or unsigned integers or integer vectors, or arrays of any these. Matrices and structures cannot be output. OpenGL Shading Language 4.10 specification section 4.3.6 Outputs

Varying structure is a great GLSL feature that should be supported as it provides a way to define and garanty how to communicate between stages!

This drivers status has been made under Seven 64 with a GeForce GTX 470 and a Radeon HD 5850 using the OpenGL Samples Pack 4.1.3.1.

White: Unsupported.

Blue: The sample works but it doesn't follow the OpenGL specification.

Green: The sample works following the OpenGL specification.

Orange: The sample doesn't work correctly but a workaround is possible.

Red: The sample does't work and I haven't found any workaround.

Black: Really distubing problem!

Drivers: nVidia Forceware 259.31 (beta) nVidia Forceware 260.99 (stable) nVidia Forceware 260.93 (beta) 410-program-separate 410-program-binary Crash 410-program-64 410-primitive-tessellation Doesn't support varying struct and offensive error message Doesn't support varying struct and offensive error message Doesn't support varying struct and offensive error message 410-primitive-instanced Exception during compilation Unexpected warning Unexpected warning 410-fbo-layered gl_ViewportIndex unsupported gl_ViewportIndex unsupported 410-debug-output 400-sampler-array-gtc A warning would be wellcome as it's a great but non standard behaviours A warning would be wellcome as it's a great but non standard behaviours A warning would be wellcome as it's a great but non standard behaviours 400-buffer-uniform-shared-gtc A warning would be wellcome as it's a great but non standard behaviours A warning would be wellcome as it's a great but non standard behaviours A warning would be wellcome as it's a great but non standard behaviours 400-transform-feedback-object 400-texture-compression-arb 400-texture-buffer-rgb 400-sampler-gather 400-sampler-fetch 400-sampler-array 400-program-varying-structs Doesn't support varying struct and offensive error message Doesn't support varying struct and offensive error message Doesn't support varying struct and offensive error message 400-program-varying-blocks Build error with misleading messages Unexpected warning / gl_in.length() not fully supported Unexpected warning / gl_in.length() not fully supported 400-program-subroutine 400-program-64 400-primitive-tessellation Unexpected warning Unexpected warning Unexpected warning 400-primitive-smooth-shading Unexpected warning Unexpected warning Unexpected warning 400-primitive-instanced Unexpected warning Unexpected warning Unexpected warning 400-fbo-rtt-texture-array 400-fbo-rtt Not tested Not tested 400-fbo-multisample 400-fbo-layered 400-draw-indirect 400-buffer-uniform Unsupported block array 400-blend-rtt 330-texture-array Not tested Not tested

Despite its number Forceware 260.99 seems older than Forceware 260.93 as Forceware 260.93 brings even more fixes. I stringly recommand Forceware 260.93 for OpenGL developers who wants to work on OpenGL 4.X software.

UPDATE ON 28/10/2010: Thanks to some feedbacks from nVidia, I fixed the sample 400-fbo-rtt where I made a mistake. Also the varying structure bug should be fixed for next stable release of nVidia drivers.

Drivers: AMD Catalyst 10.9 (stable) AMD Catalyst 10.10 (stable) AMD Catalyst 10.10c (beta) 410-debug-output-arb AMD_debug_output support only AMD_debug_output support only AMD_debug_output support only 410-program-separate Doesn't support explicit varying locations with unified program 410-program-binary Doesn't support explicit varying locations with unified program 410-program-64 glVertexAttribLPointer is null 410-primitive-tessellation Doesn't support explicit varying locations with unified program 410-primitive-instanced Doesn't support explicit varying locations with unified program 410-fbo-layered Parsing error on flat qualifier and gl_ViewportIndex remains 0 400-buffer-uniform-shared-gtc Not supported as OpenGL specify Not supported as OpenGL specify Not supported as OpenGL specify 400-sampler-array-gtc Not supported as OpenGL specify Not supported as OpenGL specify Not supported as OpenGL specify 400-transform-feedback-object 400-texture-compression-arb 400-texture-buffer-rgb RGB32 TBO fetch not correct RGB32 TBO fetch not correct 400-sampler-gather 400-sampler-fetch ARB GLSL function instead of core GLSL function 400-sampler-array 400-program-varying-structs 400-program-varying-blocks 400-program-subroutine 400-program-64 Draw calls ignored, double not supported 400-primitive-tessellation 400-primitive-smooth-shading 400-primitive-instanced 400-fbo-rtt-texture-array 400-fbo-rtt Not tested Not tested 400-fbo-multisample Min/mag tex param and glMinSampleShading ARB required 400-fbo-layered 400-draw-indirect 400-buffer-uniform Unsupported block array/freeze the program Unsupported block array/freeze the program Unsupported block array 400-blend-rtt 330-texture-array Not tested Not tested Required glTexParameteri to setup filtering

AMD has released it's first OpenGL 4.1 drivers but unfortunately the implementation is quite limited as no OpenGL sample run correctly... However, Catalyst 10.10c remains a great improvement on the regard of the OpenGL 4.0 implementation which fixes a lot of issues since Catalyst 10.9.

UPDATE ON 29/10/2010: I have updated the result on AMD to be more accurate on my report and the problems I have encountered. According to AMD, it's debattable to know if explicit varying locations in unified program is part of OpenGL 4.1... I would say that according to the specification it must be supported but you can make your own opinion by reading section 2.11.4 which specifies the shader interface matching. Using exact match does fix several samples.

The inputs and outputs on an interface between programs need not match exactly when input and output location qualifiers (sections 4.3.8.1 and 4.3.8.2 of the OpenGL Shading Language Specification) are used. OpenGL 4.10 specification section 2.11.4

Also I would like to make clear that 400-buffer-uniform-shared-gtc and 400-sampler-array-gtc are not suposed to be suported and they are OpenGL 4.2 feature requests which is why they have the post-fix 'gtc'.