We now follow the same rules than for basic types, when performing mixed-precision operations, e.g.: float3 + double3 -> double3 double3 + float3 -> double3 dot(float3, double3) -> double In particular, e.g. swapping the arguments to arithmetic operations now always yields to the same result type (before, float3 + double3 would not return the same type than double3 + float3).