diff options
Diffstat (limited to 'source/slang/slang-check-expr.cpp')
| -rw-r--r-- | source/slang/slang-check-expr.cpp | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp index c7e58a888..9325eda61 100644 --- a/source/slang/slang-check-expr.cpp +++ b/source/slang/slang-check-expr.cpp @@ -15,6 +15,7 @@ #include "slang-ast-decl.h" #include "slang-ast-natural-layout.h" #include "slang-ast-print.h" +#include "slang-ast-support-types.h" #include "slang-ast-synthesis.h" #include "slang-lookup-spirv.h" #include "slang-lookup.h" @@ -4524,29 +4525,32 @@ void SemanticsExprVisitor::maybeCheckKnownBuiltinInvocation(Expr* invokeExpr) auto knownBuiltinAttr = callee->findModifier<KnownBuiltinAttribute>(); if (!knownBuiltinAttr) return; - if (knownBuiltinAttr->name == "GetAttributeAtVertex") + if (auto constantIntVal = as<ConstantIntVal>(knownBuiltinAttr->name)) { - if (checkedInvokeExpr->arguments.getCount() != 2) - return; - auto vertexAttributeArg = checkedInvokeExpr->arguments[0]; - auto vertexAttributeArgDeclRefExpr = as<DeclRefExpr>(vertexAttributeArg); - if (!vertexAttributeArgDeclRefExpr) + if (constantIntVal->getValue() == (int)KnownBuiltinDeclName::GetAttributeAtVertex) { - getSink()->diagnose( - invokeExpr, - Diagnostics::getAttributeAtVertexMustReferToPerVertexInput); - return; - } - auto vertexAttributeArgDecl = vertexAttributeArgDeclRefExpr->declRef.getDecl(); - if (!vertexAttributeArgDecl) - return; - if (!vertexAttributeArgDecl->findModifier<PerVertexModifier>() && - !vertexAttributeArgDecl->findModifier<HLSLNoInterpolationModifier>()) - { - getSink()->diagnose( - vertexAttributeArgDeclRefExpr, - Diagnostics::getAttributeAtVertexMustReferToPerVertexInput); - return; + if (checkedInvokeExpr->arguments.getCount() != 2) + return; + auto vertexAttributeArg = checkedInvokeExpr->arguments[0]; + auto vertexAttributeArgDeclRefExpr = as<DeclRefExpr>(vertexAttributeArg); + if (!vertexAttributeArgDeclRefExpr) + { + getSink()->diagnose( + invokeExpr, + Diagnostics::getAttributeAtVertexMustReferToPerVertexInput); + return; + } + auto vertexAttributeArgDecl = vertexAttributeArgDeclRefExpr->declRef.getDecl(); + if (!vertexAttributeArgDecl) + return; + if (!vertexAttributeArgDecl->findModifier<PerVertexModifier>() && + !vertexAttributeArgDecl->findModifier<HLSLNoInterpolationModifier>()) + { + getSink()->diagnose( + vertexAttributeArgDeclRefExpr, + Diagnostics::getAttributeAtVertexMustReferToPerVertexInput); + return; + } } } } |
