diff options
| author | Jay Kwak <82421531+jkwak-work@users.noreply.github.com> | 2025-02-05 16:23:40 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-05 16:23:40 -0800 |
| commit | d8a8559a5baebb81361b15cf86d28c9e8019b177 (patch) | |
| tree | 4cf19e1e940dfa3bcaebb05448c2ee3321441015 /source/slang/slang-check-modifier.cpp | |
| parent | f6cbb81e1c0080518185294ee94705f5e93aa849 (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.cpp | 28 |
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 |
