According to a post on gamedev.net, HLSL by default expects column-major packed matrix, and not row-major.Having single column in one constant registerallows to quickly calculate resulting vector component with one dot instruction. Single mul (row-vector, column-major-matrix) will be calculated as: dp4 oPos.x, v0, c0 dp4 oPos.y, v0, c1 dp4 oPos.z, v0, c2 dp4 oPos.w, v0, c3.