replying to myself...
The first problem seems not to be a shader related problem, but more likely a GPU memory managment issue.
In fact, the mat4 comes from an uniform array of mat4 passed to the shader in a UBO.
Apparently, the matrix are extracted from this structure is transposed on nvidia, and not transposed on ATI.
I'll do some more test to figure what's going on.
Estraven
EDIT :
The Layout of UBO needs to be manually specified. I added "layout(row_major)" to my UBO declaration, now the behavior is consistent between nVidia and ATI.
layout(row_major) uniform animation_ubo {
vec4 bones_absolute_positions[100] ;
vec4 bones_rotated_positions[100] ;
vec4 bones_conjugate_quaternions[100] ;
mat4 bones_conjugate_composition_quaternions[100] ;
};
My guess is that, when unspecified, ATI uses Row_Major, whereas nVidia uses Column_Major....
For those interested, see :
http://www.opengl.org/wiki/Uniform_Buffer_ObjectAny clues on the Depth_Component ??