7/03/2008

ATI/AMD driver stuttering - or - a bug in Catalyst 8.6 ATI drivers' GLSL compiler

A few minutes ago, I just put my dreaded AMD Radeon HD 2600 test board in my computer. My point is to fix a compatibility problem encountered by a customer...

As I had horrible experiences with this board at its release date, I'm not surprised to see that my first run of my OpenGL tools almost fail miserably.

I just wanted to archive the problem I'm encountering right now with Catalyst 8.6 on by Windows XP 32 SP2 box.

On some of my GLSL shaders, the call to 'glGetObjectParameteriv(..., GL_OBJECT_ACTIVE_UNIFORMS, ...)' gives me a plain wrong value, superior to the real one.

So, my enumeration, just following this query, using
'glGetActiveUniform', fails with a GL_INVALID_VALUE error for the dangling indices... Of course I was not checking the error code, which lead to a stuttering-like behaviour where the last given uniform name was repeated 2 or 3 times (in my case).

Edit :: In fact, the number of active uniforms is the good value ; the problem comes from the enumeration, I'm getting a GL_INVALID_VALUE for an index that should be valid. As a result, I miss some valid and active uniforms...

I just wonder why this happens...

I already had troubles with my multi-shader-objects-linked-together-with-external-functions-that-the-linker-normally-resolves approach ; so this may be linked...

I won't neither take the time to investigate or provide a minimum reproduction case to AMD ; but, this morning, before all this, I was toying with the idea to have a set of simple (python?) scripts that could "unit test" the drivers I use.

Does any one know if such a thing exists in a public place ? I'd be glad to try to contribute !

Edit :: Hum, it seems that I'll have to find a workaround and investigate some more... I should have turned my hand 7 times around my keyboard before posting !

Edit (2) :: I finally set up a python unit test that reproduces the problem, it needs PyOpenGL and is available here.