diff options
| author | Yong He <yonghe@outlook.com> | 2024-10-27 09:40:50 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-27 09:40:50 -0700 |
| commit | faa7d6ba4d73d8e3d89f083deea103afda456a21 (patch) | |
| tree | e72377a1c0daf3e72d4fa6e5d6ba11109abb734b | |
| parent | 14f4b45d4b977805c5dbe472e327bdd3e856fb94 (diff) | |
Add implicit cast for generic vector types. (#5413)
| -rw-r--r-- | source/slang/core.meta.slang | 22 | ||||
| -rw-r--r-- | tests/language-feature/generics/generic-vector-cast.slang | 17 |
2 files changed, 39 insertions, 0 deletions
diff --git a/source/slang/core.meta.slang b/source/slang/core.meta.slang index 478487250..249a084b1 100644 --- a/source/slang/core.meta.slang +++ b/source/slang/core.meta.slang @@ -1642,6 +1642,17 @@ extension vector<T,N> : IInteger [__unsafeForceInlineEarly] __init(int v) { this = vector<T,N>(T(v)); } [OverloadRank(-1)] [__unsafeForceInlineEarly] __init(int64_t v) { this = vector<T,N>(T(v)); } + + [OverloadRank(-1)] + __implicit_conversion($(kConversionCost_Default)) + __intrinsic_op($(kIROp_CastFloatToInt)) + __generic<U:__BuiltinFloatingPointType> + __init(vector<U, N> other); + + [OverloadRank(-1)] + __intrinsic_op($(kIROp_IntCast)) + __generic<U:__BuiltinIntegerType> + __init(vector<U, N> other); } __generic<T:__BuiltinFloatingPointType, let N : int> @@ -1660,6 +1671,17 @@ extension vector<T,N> : IFloat [__unsafeForceInlineEarly] float toFloat() { return __realCast<float>(this[0]); } [OverloadRank(-1)] + __implicit_conversion($(kConversionCost_Default)) + __intrinsic_op($(kIROp_FloatCast)) + __generic<U:__BuiltinFloatingPointType> + __init(vector<U, N> other); + + [OverloadRank(-1)] + __intrinsic_op($(kIROp_CastIntToFloat)) + __generic<U:__BuiltinIntegerType> + __init(vector<U, N> other); + + [OverloadRank(-1)] [__unsafeForceInlineEarly] __init(int v) { this = vector<T,N>(T(v)); } [OverloadRank(-1)] [__unsafeForceInlineEarly] __init(float v) { this = vector<T,N>(T(v)); } diff --git a/tests/language-feature/generics/generic-vector-cast.slang b/tests/language-feature/generics/generic-vector-cast.slang new file mode 100644 index 000000000..716416bf5 --- /dev/null +++ b/tests/language-feature/generics/generic-vector-cast.slang @@ -0,0 +1,17 @@ +//TEST:SIMPLE(filecheck=CHECK): -target spirv + +// CHECK: OpEntryPoint + +struct SomeStruct<Real : __BuiltinFloatingPointType> { + vector<Real, 3> color; + __init() { + vector<float, 3> _color = vector<float, 3>(0); + color = _color; // error 30019: expected an expression of type 'vector<Real,3>', got 'vector<float,3>' + color = vector<Real, 3>(_color); // also does not work + } +} + +[numthreads(1, 1, 1)] +void computeMain() { + SomeStruct<float> s; +}
\ No newline at end of file |
