28/08/2011 August 2011 OpenGL drivers status: OpenGL 4.2 introduced

The too early OpenGL 4.2 drivers status

No only the Khronos Group has announced OpenGL 4.2 but AMD and NVIDIA have released their OpenGL 4.2 beta drivers at the same time. I didn't expect too much for them as usually OpenGL drivers released at the same time of specifications have they share of issues.

Both AMD and NVIDIA had time to update their OpenGL 4.2 drivers and has already fixed quite some issues, NVIDIA being incredibly fast once again with only two updates instead of three for AMD.

In the first AMD drivers, the OpenGL 4.2 context wasn't exposed so that we had to use extensions but some was missing. Their were just missing because as I could run a sample using the unexposed atomic counter. This is enough evidence for me to conclude that AMD is working with a version control system like SVN or Perforce and enable and disable features using #define to compensate for weak branching capabilities. That the kind of example which makes me love Git (or Mercurial but I use Git) even more where these issues can't happened! It's the 21th centuary, everyone should use a version control system that works unfortunately development and ecosystem legacy is a pain.

Actually, the best of these drivers update is that AMD has fixed a lot of bugs including the horrible crashes of the GLSL compiler when some errors occurred. We can finally take advantage of the great AMD debug output implementation!

AMD debug output goodness

It is fair to say that I am always developing on both AMD and NVIDIA platform as I have both a Radeon HD 5850 and a GeForce GTX 470 on my main machine and I hardly understand how we could work otherwise. However, there is obviously a "main display" where the application will be launch by default. This "main display" change all the time for me, there are periods where it's my AMD card and there are periods my NVIDIA card and there are some where "Ah, it's running on that card". What condition my choice could be a feature that I am exploring or a bug that annoyed me for example. This time I am back on AMD thanks to the amazing job that has been done by AMD to provide meaningful debug output log.

On NVIDIA implementation of the debug output, the log will only report the equivalent of glGetError and we will catch it in the debug output function using a break point. The benefit from glGetError is that all the errors are reported with no need to search it using a dycotomic method based on loads of glGetError everywhere...! (yes yes, we all did it as some point!) However this is still way too limited compare to the potential of this extension! AMD implementation of debug output is much more advanced and will return very often some relevant and detailled feedback. Here is two examples I ran into rescently and saved for this post:

1008: glBindVertexArray parameter 'array' has an invalid value '5': must be a valid vertex array object name (GL_INVALID_OPERATION) AMD debug output

2163: glNamedFramebufferTextureEXT failed because the image can not be attached to the referenced attachment point through the called function (GL_INVALID_OPERATION) AMD debug output

Isn't it great? Ok ok, it's not great it's freaking awesome and an OpenGL programmer's dream coming true!!!

In any case, if you are using OpenGL, I don't want to know any excuse but the first thing you must do is checking if GL_ARB_debug_output is available and initialing it. It's going to take you 15 minutes but save you hours!

Drivers test results nomenclature:
  • White: Unsupported or untested.
  • 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!

For this report, I have indicated, as comments, the error fixed from the first OpenGL 4.2 drivers released by AMD and NVIDIA using "Beta 1" and "280.28" respectively. AMD OpenGL 4.2 driver beta 3 didn't fix any issue from this drivers status compare to Beta 2. These tests have been done on Seven 64 with the OpenGL Samples Pack 4.2.1.1 just released.

Notice that there are still issues on the shader interface matching which affect NVIDIA in the samples 420-sampler-fetch, 420-sampler-load and 420-image-unpack and AMD in the samples 410-primitive-tessellation-5 and 420-transform-feedback-instanced. I bet that if I was looking for it, I would break the drivers in many more ways as it only continues to expose the specification problem.

OpenGL Samples Pack 4.2.1.1, OpenGL specification testsAMD Catalyst 11.8 preview (26/07/2011)AMD Catalyst 11.8 OpenGL 4.2 beta 3 (30/08/2011)NVIDIA Forceware 280.19 (27/07/2011)NVIDIA Forceware 280.36 (24/08/2011)
420-transform-feedback-instancedCan't readback built-in variables. max_vertices affects the alignment in the transform feedback buffer
420-texture-storage280.28: No trilinear filtering
420-texture-pixel-storeBeta 1: Loading not correct
420-texture-compressedTexture storage with BPTC generates invalid operation errors
420-test-depth-conservative
420-sampler-fetchBug on the shader interface matching
420-memory-barrier
420-image-unpackUnpack isn't correct?280.36: Bug on the shader interface matching. 280.28: Parsing error of the binding layout qualifier
420-image-load280.36: Flat color. 280.28: Parsing error of the binding layout qualifier
420-draw-base-instance
420-direct-state-access-ext280.28: Invalid operation
420-buffer-uniformUnsupported uniform block array
420-atomic-counterglMapBufferRange on atomic counter failsThe buffer must be initialized to be allocated
410-program-separate-dsa-ext280.28: Invalid operation
410-program-binary
410-program-64
410-primitive-tessellation-5Bug on the shader interface matching: Block member not active with linked separated programBug on the shader interface matching: Block member not active with linked separated program
410-primitive-tessellation-2
410-primitive-instancedlayout(location = 0) flat out vec4 Color; generates a parsing error.
410-fbo-multisample-dsa-ext280.28: Invalid operation
410-fbo-layered
400-transform-feedback-streamlayout(location = 0, stream = 0) result in error: layout location can only set once. Only half of the geometry renderedmax_vertices affects the alignment in the transform feedback buffer
400-transform-feedback-object
400-texture-buffer-rgb
400-sampler-gather
400-sampler-fetch
400-sampler-array
400-program-varying-structs
400-program-varying-blocks
400-program-subroutine
400-program-64
400-primitive-tessellation
400-primitive-smooth-shading
400-primitive-instanced
400-fbo-rtt-texture-array
400-fbo-rtt
400-fbo-multisample
400-fbo-layered
400-draw-indirect
400-buffer-uniformUnsupported uniform block arrayUnsupported uniform block array
400-blend-rtt
330-texture-pixel-store
330-transform-feedback-separatedGetTransformFeedbackVarying returns the wrong value for the size parameter
330-transform-feedback-interleavedGetTransformFeedbackVarying returns the wrong value for the size parameter
330-primitive-point-spriteglPointParameteri (GL_POINT_SPRITE_COORD_ORIGIN, ...) ignoredglPointParameteri (GL_POINT_SPRITE_COORD_ORIGIN, ...) ignoredPop free clippingPop free clipping
330-fbo-srgbA scissor test optimizations introduce a rendering bug
330-error-sampler-offsetGLSL compiler crash
330-draw-without-dataLocation 0 must be boundLocation 0 must be bound
330-buffer-typei32 vertex input data not supportedi32 vertex input data not supported
OpenGL Samples Pack 4.2.1.1, proprietary featuresAMD Catalyst 11.8 preview (26/07/2011)AMD Catalyst 11.8 OpenGL 4.2 beta 3 (30/08/2011)NVIDIA Forceware 280.19 (27/07/2011)NVIDIA Forceware 280.36 (24/08/2011)
410-texture-copy-nvNV_copy_image not supportedNV_copy_image not supported
410-primitive-bindless-nvNV_shader_buffer_load not supportedNV_shader_buffer_load not supported
410-fbo-multisample-amdAMD_sample_positions not supportedAMD_sample_positions not supported
410-fbo-multisample-dsa-nvNV_texture_multisample not supportedNV_texture_multisample not supported280.28: Invalid operation
410-draw-indirect-amdAMD_multi_draw_indirect not supportedAMD_multi_draw_indirect not supported
OpenGL Samples Pack 4.2.1.1, specification bugs workaroundAMD Catalyst 11.8 preview (26/07/2011)AMD Catalyst 11.8 OpenGL 4.2 beta 3 (30/08/2011)NVIDIA Forceware 280.19 (27/07/2011)NVIDIA Forceware 280.36 (24/08/2011)
420-glsl-interface-matching-array-gtcCan write a valid vertex shader output with no valid geometry shader input possibleCan write a valid vertex shader output with no valid geometry shader input possibleCan write a valid vertex shader output with no valid geometry shader input possibleCan write a valid vertex shader output with no valid geometry shader input possible
400-sampler-array-gtcNo workaround for this specification bugNo workaround for this specification bugAllows dynamic indexing of the sampler arrayAllows dynamic indexing of the sampler array
330-draw-instanced-array-dsa-gtcNo workaround for this specification bugNo workaround for this specification bugNo workaround for this specification bugNo workaround for this specification bug
GLM 0.9.2.4 released >
< OpenGL Samples Pack 4.2.1.1 released (updated)
Copyright Christophe Riccio 2002-2013 all rights reserved
Designed for Chrome 9, Firefox 4, Opera 11 and Safari 5