From 7758625d3fea67e55e98e7e4103d56c9918365be Mon Sep 17 00:00:00 2001 From: ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> Date: Fri, 29 Aug 2025 15:52:34 -0700 Subject: [CBP] Pointer frontend changes + groupshared pointer support (#7848) Resolves #7628 Resolves: #8197 Primary Goals: 1. Add `Access` to pointer 2. AddressSpace::GroupShared support for pointers (SPIR-V) 3. Add `__getAddress()` to replace `&` * `&` is not updated to `require(cpu)` since slangpy uses `&`. This means we must: (1) merge PR; (2) replace `&` with `__getAddress()`; (3) add `require(cpu)` to `&` Changes: * Added to `Ptr` the `Access` generic argument & logic (for `Access::Read`). * Moved the generic argument `AddressSpace` from `Ptr` to the end of the type. * Added pointer casting support between any `Ptr` as long as the `AddressSpace` is the same * Disallow globallycoherent T* and coherent T* * Disallow const T*, T const*, and const T* * Fixed .natvis display of `ConstantValue` `ValOperandNode` * Support generic resolution of type-casted integers * Added `VariablePointer` emitting for spirv + other minor logic needed for groupshared pointers Breaking Changes: * Anyone using the `AddressSpace` of `Ptr` will now have to account for the `Access` argument * we disallow various syntax paired with `Ptr` and `T*` --------- Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> --- tests/language-feature/pointer/pointer-self-reference.slang | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'tests/language-feature/pointer/pointer-self-reference.slang') diff --git a/tests/language-feature/pointer/pointer-self-reference.slang b/tests/language-feature/pointer/pointer-self-reference.slang index e78b70db0..75ff4e7a9 100644 --- a/tests/language-feature/pointer/pointer-self-reference.slang +++ b/tests/language-feature/pointer/pointer-self-reference.slang @@ -1,6 +1,8 @@ // pointer-self-reference.slang -//TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -output-using-type -shaderobj +// We are disabling this test because '&' is intentionally not supported. +// Design for pointers in Slang are not yet finalized. +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -output-using-type -shaderobj //TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer RWStructuredBuffer outputBuffer; @@ -18,13 +20,13 @@ void computeMain(int3 dispatchThreadID: SV_DispatchThreadID) Thing things[2]; - things[0].next = &things[1]; + things[0].next = __getAddress(things[1]); things[0].value = 27; - things[1].next = &things[0]; + things[1].next = __getAddress(things[0]); things[1].value = idx * idx; - Ptr cur = &things[0]; + Ptr cur = __getAddress(things[0]); for (int i = 0; cur && i < idx; ++i) { -- cgit v1.2.3