diff options
| author | Yong He <yonghe@outlook.com> | 2025-08-09 09:43:25 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-09 16:43:25 +0000 |
| commit | dcdebc1a76a0a6ffbfd6a5805354f8f679c60202 (patch) | |
| tree | 126d60d157e73e401aacf1e13b400b8533ec8828 /source/slang/slang-linkable-impls.cpp | |
| parent | fc6aea37483446372425aca8471f0e8bf7c3a910 (diff) | |
Allow specializing entrypoints with generic value args or variadic types from API (#8119)
Closes #8110.
Closes #8011.
Diffstat (limited to 'source/slang/slang-linkable-impls.cpp')
| -rw-r--r-- | source/slang/slang-linkable-impls.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/source/slang/slang-linkable-impls.cpp b/source/slang/slang-linkable-impls.cpp index d03ecb3ca..082974fae 100644 --- a/source/slang/slang-linkable-impls.cpp +++ b/source/slang/slang-linkable-impls.cpp @@ -180,6 +180,7 @@ void CompositeComponentType::acceptVisitor( RefPtr<ComponentType::SpecializationInfo> CompositeComponentType::_validateSpecializationArgsImpl( SpecializationArg const* args, Index argCount, + Index& outConsumedArgCount, DiagnosticSink* sink) { SLANG_UNUSED(argCount); @@ -189,15 +190,16 @@ RefPtr<ComponentType::SpecializationInfo> CompositeComponentType::_validateSpeci Index offset = 0; for (auto child : m_childComponents) { - auto childParamCount = child->getSpecializationParamCount(); - SLANG_ASSERT(offset + childParamCount <= argCount); - - auto childInfo = child->_validateSpecializationArgs(args + offset, childParamCount, sink); - + Index consumedArgCount = 0; + auto childInfo = child->_validateSpecializationArgs( + args + offset, + argCount - offset, + consumedArgCount, + sink); specializationInfo->childInfos.add(childInfo); - - offset += childParamCount; + offset += consumedArgCount; } + outConsumedArgCount = offset; return specializationInfo; } @@ -717,11 +719,13 @@ void TypeConformance::acceptVisitor( RefPtr<ComponentType::SpecializationInfo> TypeConformance::_validateSpecializationArgsImpl( SpecializationArg const* args, Index argCount, + Index& outConsumedArgCount, DiagnosticSink* sink) { SLANG_UNUSED(args); SLANG_UNUSED(argCount); SLANG_UNUSED(sink); + outConsumedArgCount = 0; return nullptr; } |
