summaryrefslogtreecommitdiff
path: root/source/slang/core.meta.slang
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-02-08 18:29:32 -0800
committerGitHub <noreply@github.com>2024-02-08 18:29:32 -0800
commitf44da6cc5c0f211c13bd1eb0743d79c7861ea64e (patch)
tree3ad4edb5e7806c41003280ebf60fd6419a742105 /source/slang/core.meta.slang
parenta16f712bb99e426519c9a556b17b54bcc4d1d22d (diff)
Support pointers in SPIRV. (#3561)
* Support pointers in SPIRV. * Fix test. * Enhance test. * Fix test. * Cleanup.
Diffstat (limited to 'source/slang/core.meta.slang')
-rw-r--r--source/slang/core.meta.slang24
1 files changed, 9 insertions, 15 deletions
diff --git a/source/slang/core.meta.slang b/source/slang/core.meta.slang
index f3ab38582..1e1ef061e 100644
--- a/source/slang/core.meta.slang
+++ b/source/slang/core.meta.slang
@@ -719,19 +719,7 @@ struct Ptr
__subscript(int index) -> T
{
- [__unsafeForceInlineEarly]
- get
- {
- return __load(__getElementPtr(this, index));
- }
-
- [__unsafeForceInlineEarly]
- set(T newValue)
- {
- __store(__getElementPtr(this, index), newValue);
- }
-
- __intrinsic_op($(kIROp_GetElementPtr))
+ __intrinsic_op($(kIROp_GetOffsetPtr))
ref;
}
};
@@ -748,6 +736,12 @@ Ptr<T> __getElementPtr<T>(Ptr<T> ptr, int index);
__intrinsic_op($(kIROp_GetElementPtr))
Ptr<T> __getElementPtr<T>(Ptr<T> ptr, int64_t index);
+__intrinsic_op($(kIROp_GetOffsetPtr))
+Ptr<T> __getOffsetPtr<T>(Ptr<T> ptr, int index);
+
+__intrinsic_op($(kIROp_GetOffsetPtr))
+Ptr<T> __getOffsetPtr<T>(Ptr<T> ptr, int64_t index);
+
__generic<T>
__intrinsic_op($(kIROp_Less))
bool operator<(Ptr<T> p1, Ptr<T> p2);
@@ -1543,14 +1537,14 @@ __intrinsic_op(0)
__prefix Ptr<T> operator&(__ref T value);
__generic<T>
-__intrinsic_op($(kIROp_GetElementPtr))
+__intrinsic_op($(kIROp_GetOffsetPtr))
Ptr<T> operator+(Ptr<T> value, int64_t offset);
__generic<T>
[__unsafeForceInlineEarly]
Ptr<T> operator-(Ptr<T> value, int64_t offset)
{
- return __getElementPtr(value, -offset);
+ return __getOffsetPtr(value, -offset);
}
__generic<T : IArithmetic>