diff options
Diffstat (limited to 'source/slang/slang-check-expr.cpp')
| -rw-r--r-- | source/slang/slang-check-expr.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp index 2fc18628e..43124b535 100644 --- a/source/slang/slang-check-expr.cpp +++ b/source/slang/slang-check-expr.cpp @@ -1967,6 +1967,10 @@ namespace Slang if (m_parentDifferentiableAttr) { + FunctionDifferentiableLevel callerDiffLevel = FunctionDifferentiableLevel::None; + if (m_parentFunc) + callerDiffLevel = getShared()->getFuncDifferentiableLevel(m_parentFunc); + if (auto checkedInvokeExpr = as<InvokeExpr>(checkedExpr)) { // Register types for final resolved invoke arguments again. @@ -1978,7 +1982,8 @@ namespace Slang { if (auto calleeDecl = as<FunctionDeclBase>(calleeExpr->declRef.getDecl())) { - if (getShared()->isDifferentiableFunc(calleeDecl)) + auto calleeDiffLevel = getShared()->getFuncDifferentiableLevel(calleeDecl); + if (calleeDiffLevel >= callerDiffLevel) { if (!m_treatAsDifferentiableExpr) { |
