summaryrefslogtreecommitdiff
path: root/source/slang/slang-lower-to-ir.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-03-23 22:42:59 -0700
committerGitHub <noreply@github.com>2023-03-23 22:42:59 -0700
commit56a84a06488afb817f79fbd99e8b470bd587ccd1 (patch)
treef6da5c3d723123880c55530b86066568dbb7ca28 /source/slang/slang-lower-to-ir.cpp
parente004511b5f75bb24df1adec71b005146917afb39 (diff)
Fix various autodiff crashes related to interface usage. (#2730)
* Fix crash. * Fix `[ForwradDerivative]` on member functions. * Update comments. * Fix crash when [BackwardDerivative] is provided but not [ForwardDerivative]. * Allow calling dynamic dispatched generic method from differentiable func. * Fix. --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-lower-to-ir.cpp')
-rw-r--r--source/slang/slang-lower-to-ir.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp
index f84f17886..9c27beb58 100644
--- a/source/slang/slang-lower-to-ir.cpp
+++ b/source/slang/slang-lower-to-ir.cpp
@@ -8484,10 +8484,15 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo>
funcExpr = udAttr->funcExpr;
else if (auto primalAttr = as<PrimalSubstituteAttribute>(modifier))
funcExpr = primalAttr->funcExpr;
+ DeclRefExpr* declRefExpr = as<DeclRefExpr>(funcExpr);
+ auto funcType = lowerType(subContext, funcExpr->type);
+ auto loweredVal = emitDeclRef(
+ subContext,
+ declRefExpr->declRef,
+ funcType);
+
+ SLANG_RELEASE_ASSERT(loweredVal.flavor == LoweredValInfo::Flavor::Simple);
- auto loweredVal = lowerRValueExpr(subContext, funcExpr);
-
- SLANG_ASSERT(loweredVal.flavor == LoweredValInfo::Flavor::Simple);
IRInst* derivativeFunc = loweredVal.val;
if (as<ForwardDerivativeAttribute>(modifier))