From 96caba75e8dfbb879eff12cbe1a4c148a259f684 Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 21 Mar 2023 15:44:21 -0700 Subject: Add texture tri-linear autodiff example. (#2715) * Add quad texture example. * delete output image * remove irrelavent files * update project files * fix * Update example. * Fix. * remove out-texture --------- Co-authored-by: Yong He --- source/slang/slang-check-decl.cpp | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) (limited to 'source/slang/slang-check-decl.cpp') diff --git a/source/slang/slang-check-decl.cpp b/source/slang/slang-check-decl.cpp index 2613e6430..3779f48e3 100644 --- a/source/slang/slang-check-decl.cpp +++ b/source/slang/slang-check-decl.cpp @@ -6934,9 +6934,12 @@ namespace Slang arg->type.isLeftValue = param->findModifier() ? true : false; arg->type.type = param->getType(); arg->loc = loc; - if (auto pairType = visitor->getDifferentialPairType(param->getType())) + if (!param->findModifier()) { - arg->type.type = pairType; + if (auto pairType = visitor->getDifferentialPairType(param->getType())) + { + arg->type.type = pairType; + } } imaginaryArguments.add(arg); } @@ -6958,18 +6961,26 @@ namespace Slang arg->type.isLeftValue = param->findModifier() ? true : false; arg->type.type = param->getType(); arg->loc = loc; - if (auto pairType = as(visitor->getDifferentialPairType(param->getType()))) + bool isDiffParam = (!param->findModifier()); + if (isDiffParam) { - arg->type.type = pairType; - if (isOutParam(param)) + if (auto pairType = as(visitor->getDifferentialPairType(param->getType()))) { - // out T -> in T.Differential - arg->type.isLeftValue = false; - arg->type.type = visitor->tryGetDifferentialType( - visitor->getASTBuilder(), pairType->getPrimalType()); + arg->type.type = pairType; + if (isOutParam(param)) + { + // out T -> in T.Differential + arg->type.isLeftValue = false; + arg->type.type = visitor->tryGetDifferentialType( + visitor->getASTBuilder(), pairType->getPrimalType()); + } + } + else + { + isDiffParam = false; } } - else + if (!isDiffParam) { if (isOutParam(param)) { @@ -7010,7 +7021,7 @@ namespace Slang HigherOrderInvokeExpr* higherOrderFuncExpr = visitor->getASTBuilder()->create(); higherOrderFuncExpr->baseFunction = derivativeOfAttr->funcExpr; higherOrderFuncExpr->loc = derivativeOfAttr->loc; - Expr* checkedHigherOrderFuncExpr = visitor->dispatchExpr(higherOrderFuncExpr, *visitor); + Expr* checkedHigherOrderFuncExpr = visitor->dispatchExpr(higherOrderFuncExpr, visitor->allowStaticReferenceToNonStaticMember()); if (!checkedHigherOrderFuncExpr) { visitor->getSink()->diagnose(derivativeOfAttr, Diagnostics::cannotResolveOriginalFunctionForDerivative); -- cgit v1.2.3