This patch includes an implementation of the long-pending `transpose` intrinsic and the `smoothstep` intrinsic. While implementing `smoothstep` I realized that some intrinsics have different rules for the allowed data types than expressions: - Vectors and matrices at the same time are not allowed, regardless of their dimensions. Even if they have the same number of components. - Any combination of matrices is always allowed, even those when no matrix fits inside another, e.g.: `float2x3` is compatible with `float3x2`, resulting in `float2x2`. The common data type is the min on each dimension. This is the case for `max`, `pow`, `ldexp`, `clamp` and `smoothstep`; which suggest that it is the case for all intrinsics where the operation is applied element-wise. So this was corrected. A minor fix in `pow`'s type conversion is also included. -- https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/53