vkd3d-shader/hlsl: transpose(), smoothstep(), and properly convert args of element-wise intrinsics.
This patch series 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.:
float2x3is compatible withfloat3x2, resulting infloat2x2.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.