summaryrefslogtreecommitdiff
path: root/source/slang/slang-check-modifier.cpp
diff options
context:
space:
mode:
authorJay Kwak <82421531+jkwak-work@users.noreply.github.com>2025-02-05 16:23:40 -0800
committerGitHub <noreply@github.com>2025-02-05 16:23:40 -0800
commitd8a8559a5baebb81361b15cf86d28c9e8019b177 (patch)
tree4cf19e1e940dfa3bcaebb05448c2ee3321441015 /source/slang/slang-check-modifier.cpp
parentf6cbb81e1c0080518185294ee94705f5e93aa849 (diff)
maxtessfactor attribute should take a floating point value (#6289)
* maxtessfactor attribute should take a floating point value * Support integer value on maxtessfactor
Diffstat (limited to 'source/slang/slang-check-modifier.cpp')
-rw-r--r--source/slang/slang-check-modifier.cpp28
1 files changed, 25 insertions, 3 deletions
diff --git a/source/slang/slang-check-modifier.cpp b/source/slang/slang-check-modifier.cpp
index 6e451b5cf..741823a65 100644
--- a/source/slang/slang-check-modifier.cpp
+++ b/source/slang/slang-check-modifier.cpp
@@ -312,6 +312,22 @@ AttributeDecl* SemanticsVisitor::lookUpAttributeDecl(Name* attributeName, Scope*
return attrDecl;
}
+bool SemanticsVisitor::hasFloatArgs(Attribute* attr, int numArgs)
+{
+ if (int(attr->args.getCount()) != numArgs)
+ {
+ return false;
+ }
+ for (int i = 0; i < numArgs; ++i)
+ {
+ if (!as<FloatingPointLiteralExpr>(attr->args[i]) && !as<IntegerLiteralExpr>(attr->args[i]))
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
bool SemanticsVisitor::hasIntArgs(Attribute* attr, int numArgs)
{
if (int(attr->args.getCount()) != numArgs)
@@ -692,9 +708,8 @@ Modifier* SemanticsVisitor::validateAttribute(
}
}
else if (
- (as<DomainAttribute>(attr)) || (as<MaxTessFactorAttribute>(attr)) ||
- (as<OutputTopologyAttribute>(attr)) || (as<PartitioningAttribute>(attr)) ||
- (as<PatchConstantFuncAttribute>(attr)))
+ (as<DomainAttribute>(attr)) || (as<OutputTopologyAttribute>(attr)) ||
+ (as<PartitioningAttribute>(attr)) || (as<PatchConstantFuncAttribute>(attr)))
{
// Let it go thru iff single string attribute
if (!hasStringArgs(attr, 1))
@@ -724,6 +739,13 @@ Modifier* SemanticsVisitor::validateAttribute(
sink->diagnose(attr, Diagnostics::attributeExpectedStringArg, attr->keywordName, 1);
}
}
+ else if (as<MaxTessFactorAttribute>(attr))
+ {
+ if (!hasFloatArgs(attr, 1))
+ {
+ getSink()->diagnose(attr, Diagnostics::expectedSingleFloatArg, attr->keywordName);
+ }
+ }
else if (as<OutputControlPointsAttribute>(attr))
{
// Let it go thru iff single integral attribute