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.
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."
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);.
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."
Imagine an OpenGL world with Direct State Access, extensive debugging functionnalities and finer memory control... Pretty nice and ineluctable future!
Once again, don't forget to contribute to the OpenGL community by reporting your bugs!
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 tests | AMD 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-matching | glGetAttribLocation fails to return the location here | glGetAttribLocation fails to return the location here | ||
420-image-unpack | Unpack isn't correct? | Unpack isn't correct? | ||
420-image-store | ||||
420-image-load | ||||
420-draw-base-instance | ||||
420-direct-state-access-ext | Unsupported DSA storage functions | Unsupported DSA storage functions | ||
420-buffer-uniform | ||||
420-atomic-counter | ||||
410-program-separate-dsa-ext | ||||
410-program-binary | May crash if the binary is not AMD's | May crash if the binary is not AMD's | ||
410-program-64 | ||||
410-primitive-tessellation-5 | Bug on the shader interface matching: Block member not active with linked separated program | Bug 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-stream | max_vertices affects the alignment in the transform feedback buffer | max_vertices affects the alignment in the transform feedback buffer | ||
400-transform-feedback-object | EXT_transform_feedback extension string missing | EXT_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-output | DebugControl doesn't work, null-terminated strings generate errors | DebugControl 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-format | SNORM conversion not performed | SNORM conversion not performed | EXT_texture_snorm string missing | EXT_texture_snorm string missing |
330-primitive-point-sprite | Pop free clipping | Pop free clipping | ||
330-fbo-srgb | ||||
330-error-sampler-offset | ||||
330-draw-without-vertex-attrib | ||||
330-buffer-type | i32 vertex input data not supported | i32 vertex input data not supported |
OpenGL Samples Pack 4.2.3.1, proprietary features | AMD 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-amd | AMD_depth_clamp_separate not supported | AMD_depth_clamp_separate not supported | ||
420-primitive-bindless-nv | NV_shader_buffer_load not supported | NV_shader_buffer_load not supported | ||
420-fbo-srgb-decode-ext | EXT_texture_sRGB_decode not supported | EXT_texture_sRGB_decode not supported | ||
420-fbo-multisample-position-amd | AMD_sample_positions not supported | AMD_sample_positions not supported | ||
420-fbo-multisample-dsa-nv | NV_texture_multisample not supported | NV_texture_multisample not supported | ||
420-draw-indirect-amd | AMD_multi_draw_indirect not supported | AMD_multi_draw_indirect not supported | ||
420-buffer-pinned-amd | AMD_pinned_memory not supported | AMD_pinned_memory not supported | ||
420-buffer-barrier-gtc | Not tested | Works as desired | Generates an invalid operation as specified | Generates an invalid operation as specified |
420-blend-op-amd | This is a Radeon 6900+ series feature | This is a Radeon 6900+ series feature | ||
330-fbo-multisample-explicit-nv |