28/10/2010 OpenGL 4.1 drivers status: A step up! (updated)

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.

Drivers test results nomenclature:
  • 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-binaryCrash
410-program-64
410-primitive-tessellationDoesn't support varying struct and offensive error messageDoesn't support varying struct and offensive error messageDoesn't support varying struct and offensive error message
410-primitive-instancedException during compilationUnexpected warningUnexpected warning
410-fbo-layeredgl_ViewportIndex unsupportedgl_ViewportIndex unsupported
410-debug-output
400-sampler-array-gtcA warning would be wellcome as it's a great but non standard behavioursA warning would be wellcome as it's a great but non standard behavioursA warning would be wellcome as it's a great but non standard behaviours
400-buffer-uniform-shared-gtcA warning would be wellcome as it's a great but non standard behavioursA warning would be wellcome as it's a great but non standard behavioursA 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-structsDoesn't support varying struct and offensive error messageDoesn't support varying struct and offensive error messageDoesn't support varying struct and offensive error message
400-program-varying-blocksBuild error with misleading messagesUnexpected warning / gl_in.length() not fully supportedUnexpected warning / gl_in.length() not fully supported
400-program-subroutine
400-program-64
400-primitive-tessellationUnexpected warningUnexpected warningUnexpected warning
400-primitive-smooth-shadingUnexpected warningUnexpected warningUnexpected warning
400-primitive-instancedUnexpected warningUnexpected warningUnexpected warning
400-fbo-rtt-texture-array
400-fbo-rttNot testedNot tested
400-fbo-multisample
400-fbo-layered
400-draw-indirect
400-buffer-uniformUnsupported block array
400-blend-rtt
330-texture-arrayNot testedNot 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-arbAMD_debug_output support onlyAMD_debug_output support onlyAMD_debug_output support only
410-program-separateDoesn't support explicit varying locations with unified program
410-program-binaryDoesn't support explicit varying locations with unified program
410-program-64glVertexAttribLPointer is null
410-primitive-tessellationDoesn't support explicit varying locations with unified program
410-primitive-instancedDoesn't support explicit varying locations with unified program
410-fbo-layeredParsing error on flat qualifier and gl_ViewportIndex remains 0
400-buffer-uniform-shared-gtcNot supported as OpenGL specifyNot supported as OpenGL specifyNot supported as OpenGL specify
400-sampler-array-gtcNot supported as OpenGL specifyNot supported as OpenGL specifyNot supported as OpenGL specify
400-transform-feedback-object
400-texture-compression-arb
400-texture-buffer-rgbRGB32 TBO fetch not correctRGB32 TBO fetch not correct
400-sampler-gather
400-sampler-fetchARB GLSL function instead of core GLSL function
400-sampler-array
400-program-varying-structs
400-program-varying-blocks
400-program-subroutine
400-program-64Draw calls ignored, double not supported
400-primitive-tessellation
400-primitive-smooth-shading
400-primitive-instanced
400-fbo-rtt-texture-array
400-fbo-rttNot testedNot tested
400-fbo-multisample Min/mag tex param and glMinSampleShadingARB required
400-fbo-layered
400-draw-indirect
400-buffer-uniformUnsupported block array/freeze the programUnsupported block array/freeze the programUnsupported block array
400-blend-rtt
330-texture-arrayNot testedNot testedRequired 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'.

  • Download: OpenGL Samples Pack 4.1.3.1 (ZIP, 14.25 MB) (7Z, 7.42 MB)
  • Link: Report a bug or submit a request
  • GLM 0.9.0.5 released >
    < OpenGL Samples Pack 4.1.2.0 released
    Copyright Christophe Riccio 2002-2013 all rights reserved
    Designed for Chrome 9, Firefox 4, Opera 11 and Safari 5