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.:
`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.
-- v3: vkd3d-shader/hlsl: Use add_unary_arithmetic_expr() in intrinsic_pow(). vkd3d-shader/hlsl: Allow elementwise_intrinsic_convert_args() to also convert args to float. vkd3d-shader/hlsl: Convert elementwise intrinsics args to the proper common type. tests: Test for common type conversion for element-wise intrinsics. vkd3d-shader/hlsl: Support smoothstep() intrinsic. vkd3d-shader/hlsl: Support transpose() intrinsic.