From d8a8559a5baebb81361b15cf86d28c9e8019b177 Mon Sep 17 00:00:00 2001 From: Jay Kwak <82421531+jkwak-work@users.noreply.github.com> Date: Wed, 5 Feb 2025 16:23:40 -0800 Subject: maxtessfactor attribute should take a floating point value (#6289) * maxtessfactor attribute should take a floating point value * Support integer value on maxtessfactor --- source/slang/slang-check-modifier.cpp | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'source/slang/slang-check-modifier.cpp') 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(attr->args[i]) && !as(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(attr)) || (as(attr)) || - (as(attr)) || (as(attr)) || - (as(attr))) + (as(attr)) || (as(attr)) || + (as(attr)) || (as(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(attr)) + { + if (!hasFloatArgs(attr, 1)) + { + getSink()->diagnose(attr, Diagnostics::expectedSingleFloatArg, attr->keywordName); + } + } else if (as(attr)) { // Let it go thru iff single integral attribute -- cgit v1.2.3