From 78dc7c3fd1441ba756c969b81ed90600fa9f9f38 Mon Sep 17 00:00:00 2001 From: "James Helferty (NVIDIA)" Date: Thu, 26 Jun 2025 14:15:43 -0400 Subject: Hide atomics struct from reflection api (#7520) * Atomic reflection unit test Test that Atomic is reflected as a scalar/int instead of a struct named Atomic. * Hide AtomicType from reflection Leverage the fact that returned variables go through convert() to centralize the unwrapping of the AtomicType struct. Fixes #6257 * Clean up unit test a bit - rename bar to buf (since one of them is not Atomic and thus not a barrier) - validate deeper into the fields of bufC - remove debug code --- source/slang/slang-reflection-api.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'source/slang/slang-reflection-api.cpp') diff --git a/source/slang/slang-reflection-api.cpp b/source/slang/slang-reflection-api.cpp index 8688f5e41..b0d88e954 100644 --- a/source/slang/slang-reflection-api.cpp +++ b/source/slang/slang-reflection-api.cpp @@ -40,6 +40,12 @@ static inline Type* convert(SlangReflectionType* type) static inline SlangReflectionType* convert(Type* type) { + // Prevent the AtomicType struct from being visible to the user + // through the reflection API. + if (auto atomicType = as(type)) + { + return (SlangReflectionType*)atomicType->getElementType(); + } return (SlangReflectionType*)type; } @@ -586,7 +592,7 @@ SLANG_API SlangReflectionType* spReflectionType_GetElementType(SlangReflectionTy if (auto arrayType = as(type)) { - return (SlangReflectionType*)arrayType->getElementType(); + return convert(arrayType->getElementType()); } else if (auto parameterGroupType = as(type)) { @@ -1026,7 +1032,7 @@ SLANG_API SlangReflectionType* spReflection_FindTypeByName( if (as(result)) return nullptr; - return (SlangReflectionType*)result; + return convert(result); } catch (...) { @@ -1158,7 +1164,7 @@ SLANG_API SlangReflectionType* spReflectionTypeLayout_GetType( if (!typeLayout) return nullptr; - return (SlangReflectionType*)typeLayout->type; + return convert(typeLayout->type); } SLANG_API SlangTypeKind spReflectionTypeLayout_getKind(SlangReflectionTypeLayout* inTypeLayout) @@ -4227,7 +4233,7 @@ SLANG_API SlangReflectionType* spReflectionTypeParameter_GetConstraintByIndex( { auto constraints = globalGenericParamDecl->getMembersOfType(); - return (SlangReflectionType*)constraints[index]->sup.Ptr(); + return convert(constraints[index]->sup.Ptr()); } // TODO: Add case for entry-point generic parameters. } -- cgit v1.2.3