From faa7d6ba4d73d8e3d89f083deea103afda456a21 Mon Sep 17 00:00:00 2001 From: Yong He Date: Sun, 27 Oct 2024 09:40:50 -0700 Subject: Add implicit cast for generic vector types. (#5413) --- source/slang/core.meta.slang | 22 ++++++++++++++++++++++ .../generics/generic-vector-cast.slang | 17 +++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 tests/language-feature/generics/generic-vector-cast.slang 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 : IInteger [__unsafeForceInlineEarly] __init(int v) { this = vector(T(v)); } [OverloadRank(-1)] [__unsafeForceInlineEarly] __init(int64_t v) { this = vector(T(v)); } + + [OverloadRank(-1)] + __implicit_conversion($(kConversionCost_Default)) + __intrinsic_op($(kIROp_CastFloatToInt)) + __generic + __init(vector other); + + [OverloadRank(-1)] + __intrinsic_op($(kIROp_IntCast)) + __generic + __init(vector other); } __generic @@ -1659,6 +1670,17 @@ extension vector : IFloat __intrinsic_op($(kIROp_Mul)) This scale(T1 s); [__unsafeForceInlineEarly] float toFloat() { return __realCast(this[0]); } + [OverloadRank(-1)] + __implicit_conversion($(kConversionCost_Default)) + __intrinsic_op($(kIROp_FloatCast)) + __generic + __init(vector other); + + [OverloadRank(-1)] + __intrinsic_op($(kIROp_CastIntToFloat)) + __generic + __init(vector other); + [OverloadRank(-1)] [__unsafeForceInlineEarly] __init(int v) { this = vector(T(v)); } [OverloadRank(-1)] 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 { + vector color; + __init() { + vector _color = vector(0); + color = _color; // error 30019: expected an expression of type 'vector', got 'vector' + color = vector(_color); // also does not work + } +} + +[numthreads(1, 1, 1)] +void computeMain() { + SomeStruct s; +} \ No newline at end of file -- cgit v1.2.3