From febbeb140bea65180ff4be9b164207c582235d4d Mon Sep 17 00:00:00 2001 From: Jay Kwak <82421531+jkwak-work@users.noreply.github.com> Date: Thu, 30 May 2024 16:47:39 -0700 Subject: Support SPIR-V DebugTypePointer (#4228) --- source/slang/slang-emit-spirv.cpp | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'source/slang/slang-emit-spirv.cpp') diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp index 8acc1505b..9ad8513fc 100644 --- a/source/slang/slang-emit-spirv.cpp +++ b/source/slang/slang-emit-spirv.cpp @@ -5700,16 +5700,36 @@ struct SPIRVEmitContext builder.getIntValue(builder.getUIntType(), spvEncoding), builder.getIntValue(builder.getUIntType(), kUnknownPhysicalLayout)); } - else if (as(type)) + else if (auto ptrType = as(type)) { - StringBuilder sbName; - getTypeNameHint(sbName, basicType); + IRType* baseType = ptrType->getValueType(); + if (as(baseType)) + { + // If the base type of the pointer is basic types, + // emit the basic types and emit DebugTypePointer with it. + SpvInst* debugBaseType = emitDebugType(baseType); + SpvStorageClass storageClass = SpvStorageClassFunction; + if (ptrType->hasAddressSpace()) + storageClass = (SpvStorageClass)ptrType->getAddressSpace(); + + return emitOpDebugTypePointer( + getSection(SpvLogicalSectionID::ConstantsAndTypes), + nullptr, + m_voidType, + getNonSemanticDebugInfoExtInst(), + debugBaseType, + builder.getIntValue(builder.getUIntType(), storageClass), + builder.getIntValue(builder.getUIntType(), kUnknownPhysicalLayout)); + } + + // If the base type of the pointer is more complex, + // emit the pointer as "uintptr" of DebugTypeBasic. return emitOpDebugTypeBasic( getSection(SpvLogicalSectionID::ConstantsAndTypes), nullptr, m_voidType, getNonSemanticDebugInfoExtInst(), - builder.getStringValue(sbName.getUnownedSlice()), + builder.getStringValue(String("uint64").getUnownedSlice()), builder.getIntValue(builder.getUIntType(), 64), builder.getIntValue(builder.getUIntType(), 0), builder.getIntValue(builder.getUIntType(), kUnknownPhysicalLayout)); -- cgit v1.2.3