summaryrefslogtreecommitdiff
path: root/source/slang/core.meta.slang
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-09-15 20:37:45 -0700
committerGitHub <noreply@github.com>2022-09-15 20:37:45 -0700
commita5d3bec25d70f23da1e79cd7773981ff34593611 (patch)
tree92c8cb983c57bbee141d4e6f3f91f265e04d6a08 /source/slang/core.meta.slang
parenta6032446c6bf7f64d1e201bf438a4c7605a3dbb4 (diff)
Run simple compute kernel in gfx-smoke test. (#2400)
Diffstat (limited to 'source/slang/core.meta.slang')
-rw-r--r--source/slang/core.meta.slang50
1 files changed, 48 insertions, 2 deletions
diff --git a/source/slang/core.meta.slang b/source/slang/core.meta.slang
index 5d4b57543..82783c0b6 100644
--- a/source/slang/core.meta.slang
+++ b/source/slang/core.meta.slang
@@ -571,12 +571,58 @@ T __attachToNativeRef(NativeRef<T> nativeVal)
__magic_type(StringType)
__intrinsic_type($(kIROp_StringType))
struct String
-{};
+{
+ __target_intrinsic(cpp)
+ __init(int val);
+ __target_intrinsic(cpp)
+ __init(uint val);
+ __target_intrinsic(cpp)
+ __init(int64_t val);
+ __target_intrinsic(cpp)
+ __init(uint64_t val);
+ __target_intrinsic(cpp)
+ __init(float val);
+ __target_intrinsic(cpp)
+ __init(double val);
+
+ __target_intrinsic(cpp)
+ int64_t getLength();
+
+ property int length
+ {
+ get { return (int)getLength(); }
+ }
+};
__magic_type(NativeStringType)
__intrinsic_type($(kIROp_NativeStringType))
struct NativeString
-{};
+{
+ __target_intrinsic(cpp, "int(strlen($0))")
+ int getLength();
+
+ __target_intrinsic(cpp, "(void*)((const char*)($0))")
+ Ptr<void> getBuffer();
+
+ property int length { [__unsafeForceInlineEarly] get{return getLength();} }
+};
+
+extension Ptr<void>
+{
+ __implicit_conversion($(kConversionCost_PtrToVoidPtr))
+ [__unsafeForceInlineEarly]
+ __init(NativeString nativeStr) { this = nativeStr.getBuffer(); }
+
+ __generic<T>
+ __intrinsic_op(0)
+ __implicit_conversion($(kConversionCost_PtrToVoidPtr))
+ __init(Ptr<T> ptr);
+
+ __generic<T>
+ __intrinsic_op(0)
+ __implicit_conversion($(kConversionCost_PtrToVoidPtr))
+ __init(NativeRef<T> ptr);
+}
__magic_type(DynamicType)
__intrinsic_type($(kIROp_DynamicType))