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.:
float2x3
is 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.