From 6209f69f335a604604a5032b0f5c38b4b8bc861a Mon Sep 17 00:00:00 2001 From: Darren Wihandi <65404740+fairywreath@users.noreply.github.com> Date: Fri, 23 May 2025 00:57:08 -0400 Subject: Add default constructor for Ptr type (#7214) * Add default constructor for Ptr type * Make pointers c-style type, remove __init() constructor --- source/slang/slang-check-conversion.cpp | 3 ++- tests/spirv/pointer-default-constructor.slang | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 tests/spirv/pointer-default-constructor.slang diff --git a/source/slang/slang-check-conversion.cpp b/source/slang/slang-check-conversion.cpp index 705da89e3..fcbc83673 100644 --- a/source/slang/slang-check-conversion.cpp +++ b/source/slang/slang-check-conversion.cpp @@ -246,7 +246,8 @@ bool SemanticsVisitor::isCStyleType(Type* type, HashSet& isVisit) // 1. It has to be basic scalar, vector or matrix type, or user-defined struct. if (as(type) || as(type) || - as(type) || isDeclRefTypeOf(type).getDecl()) + as(type) || isDeclRefTypeOf(type).getDecl() || + as(type)) return cacheResult(true); diff --git a/tests/spirv/pointer-default-constructor.slang b/tests/spirv/pointer-default-constructor.slang new file mode 100644 index 000000000..6ab29f125 --- /dev/null +++ b/tests/spirv/pointer-default-constructor.slang @@ -0,0 +1,26 @@ +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-vk -emit-spirv-directly -output-using-type + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer +RWStructuredBuffer outputBuffer; + +struct MyStruct +{ + int* ptr; +} + +[shader("compute")] +[numthreads(1, 1, 1)] +void computeMain() +{ + float* a = {}; + MyStruct ms = {}; + + // CHECK: 0 + outputBuffer[0] = uint(uint64_t(a)); + // CHECK: 1 + outputBuffer[1] = uint(a == nullptr); + // CHECK: 0 + outputBuffer[2] = uint(uint64_t(ms.ptr)); + // CHECK: 1 + outputBuffer[3] = uint(ms.ptr == nullptr); +} -- cgit v1.2.3