Creating a uniform buffer object that contains a matrix causes the shader compiler to become unstable and occationally crash.
A rather long shader was failing to link, so I whittled it down to a short form that captures this behavior:
#version 300 eslayout(std140) uniform GlobalsPS_Type {mat4 g_controls;} GlobalsPS;layout(location = 0) out highp vec4 Output0;void main(){vec4 Temp[2];Temp[0].xyz = vec3(1.0, 1.0, 1.0);// Commenting out these lines allows the program to compile and link.Temp[1].xyz = (Temp[0].yyy * GlobalsPS.g_controls[1].zxy);Temp[0].xyw = (Temp[0].xxx * GlobalsPS.g_controls[0].zxy + Temp[1].xyz);Temp[0].xyz = (Temp[0].zzz * GlobalsPS.g_controls[2].zxy + Temp[0].xyw);Temp[0].xyz = (Temp[0].xyz + GlobalsPS.g_controls[3].zxy);Output0 = Temp[0];}