30/01/2012 January 2012 OpenGL drivers status

For this month OpenGL drivers status, the drivers haven't really evolved as surprizingly NVIDIA didn't release any drivers and AMD drivers doesn't fix anything I noticed compare to last month. However, the just released OpenGL Samples Pack 4.2.3 brings a set of changes that give us some new information.

Rendering without fragment shader output variables

First of all, I fixed the results of 420-image-store on NVIDIA as I found some languages that demonstrates that the results of the framebuffer is undefined as NVIDIA implementation leads to.

"If a fragment shader writes to none of gl_FragColor, gl_FragData, nor any user-defined output variables, the values of the fragment colors following shader execution are undefined, and may differ for each fragment color." GLSL 4.20.8 specification, section 4.2.1 Selecting Buffers for Writing

I pretty much think that this language could be changed to get a more sensible result for rendering without fragment shader output variable but in the meantime we will have to use glColorMaski(AttachementIndex, GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);.

Using and updating a buffer simultaneously

For four or five years, I have in mind "it's all about memory bandwidth" and this remains true to me even if the problem has slightly evolved. These days some interesting solutions are coming with programmable vertex pulling, partially resident resources or voxel representations which all converge toward the need for alternative representations of the asserts and a finer control of our accesses and updates the data. OpenGL buffer usage flags days are numbered. There is still a long way to go but I added a trivial embodiment of this direction with 420-buffer-barrier-gtc which updates a buffer and use it at the same time but ensures a fine granularity synchronization with glMemoryBarrier. According to the OpenGL specification, this idea should generates an invalide operation error but it appears to work fine on AMD implementation. We would probably need a better API to reach something really interesting but it's an interesting start to me.

"Most, but not all GL commands will detect attempts to read data from a mapped buffer object. When such an attempt is detected, an INVALID_OPERATION error will be generated. Any command which does not detect these attempts, and performs such an invalid read, has undefined results and may result in GL interruption or termination." GLSL 4.20.8 specification, Effects of Mapping Buffers on Other GL Commands

Imagine an OpenGL world with Direct State Access, extensive debugging functionnalities and finer memory control... Pretty nice and ineluctable future!

  • 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!

Once again, don't forget to contribute to the OpenGL community by reporting your bugs!

The test

These tests have been done on Windows 7 64 with the OpenGL Samples Pack 4.2.3.1 on an GeForce GTX 470 and a Radeon HD 5850.

OpenGL Samples Pack 4.2.3.1, OpenGL specification testsAMD Catalyst 12.1a preview (06/01/2012)AMD Catalyst 12.2 preview (25/01/2012)NVIDIA Forceware 290.36 (28/11/2011)NVIDIA Forceware 290.53 (22/12/2012)
420-transform-feedback-instanced
420-texture-storage
420-texture-pixel-store
420-texture-compressed
420-test-depth-conservative
420-sampler-fetch
420-memory-barrier
420-interface-matchingglGetAttribLocation fails to return the location hereglGetAttribLocation fails to return the location here
420-image-unpackUnpack isn't correct?Unpack isn't correct?
420-image-store
420-image-load
420-draw-base-instance
420-direct-state-access-extUnsupported DSA storage functionsUnsupported DSA storage functions
420-buffer-uniform
420-atomic-counter
410-program-separate-dsa-ext
410-program-binaryMay crash if the binary is not AMD'sMay crash if the binary is not AMD's
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-instanced
410-fbo-layered
400-transform-feedback-streammax_vertices affects the alignment in the transform feedback buffermax_vertices affects the alignment in the transform feedback buffer
400-transform-feedback-objectEXT_transform_feedback extension string missingEXT_transform_feedback extension string missing
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
420-debug-outputDebugControl doesn't work, null-terminated strings generate errorsDebugControl doesn't work, null-terminated strings generate errors
400-blend-rtt
330-transform-feedback-separated
330-transform-feedback-interleaved
330-texture-pixel-store
330-texture-formatSNORM conversion not performedSNORM conversion not performedEXT_texture_snorm string missingEXT_texture_snorm string missing
330-primitive-point-spritePop free clippingPop free clipping
330-fbo-srgb
330-error-sampler-offset
330-draw-without-vertex-attrib
330-buffer-typei32 vertex input data not supportedi32 vertex input data not supported
OpenGL Samples Pack 4.2.3.1, proprietary featuresAMD Catalyst 12.1a preview (06/01/2012)AMD Catalyst 12.2 preview (25/01/2012)NVIDIA Forceware 290.36 (28/11/2011)NVIDIA Forceware 290.53 (22/12/2012)
420-texture-copy-nv
420-test-depth-clamp-separate-amdAMD_depth_clamp_separate not supportedAMD_depth_clamp_separate not supported
420-primitive-bindless-nvNV_shader_buffer_load not supportedNV_shader_buffer_load not supported
420-fbo-srgb-decode-extEXT_texture_sRGB_decode not supportedEXT_texture_sRGB_decode not supported
420-fbo-multisample-position-amdAMD_sample_positions not supportedAMD_sample_positions not supported
420-fbo-multisample-dsa-nvNV_texture_multisample not supportedNV_texture_multisample not supported
420-draw-indirect-amdAMD_multi_draw_indirect not supportedAMD_multi_draw_indirect not supported
420-buffer-pinned-amdAMD_pinned_memory not supportedAMD_pinned_memory not supported
420-buffer-barrier-gtcNot testedWorks as desiredGenerates an invalid operation as specifiedGenerates an invalid operation as specified
420-blend-op-amdThis is a Radeon 6900+ series featureThis is a Radeon 6900+ series feature
330-fbo-multisample-explicit-nv
OpenGL Samples Pack 4.2.3.1 released >
< OpenGL Samples Pack 4.2.3.0 released
Copyright Christophe Riccio 2002-2016 all rights reserved
Designed for Chrome 9, Firefox 4, Opera 11 and Safari 5