summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-linkable-impls.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2025-08-09 09:43:25 -0700
committerGitHub <noreply@github.com>2025-08-09 16:43:25 +0000
commitdcdebc1a76a0a6ffbfd6a5805354f8f679c60202 (patch)
tree126d60d157e73e401aacf1e13b400b8533ec8828 /source/slang/slang-linkable-impls.cpp
parentfc6aea37483446372425aca8471f0e8bf7c3a910 (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.cpp18
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;
}