Driver bug for shader? GLSL incompatibility with ATI 4870, 8.9

Discussion created by page3d on Sep 25, 2008
GLSL spec says column-major for matrices; ATI seems to use row-major

I have a vertex shader that I've developed for an nVidia 8800. I am testing and porting it to an ATI 4870 (8.9 driver).

My understanding of the GLSL spec is that matrices (i.e. mat4) are initialized using column-major ordering. Here's an example where mxy denotes a matrix element at row x and column y:

mat4  M = mat4(  m00, m10, m20, m30, m01, m11, m21, m31, m02, m12, m22, m32, m03, m13, m23, m33 );

However, on my ATI card, I have to use row-major ordering to get the proper result from the shader.

mat4  M = mat4(  m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33 );

Have I mis-read the GLSL spec or is there a bug in the implementation of GLSL on the ATI 4870s?