From 41eb19e65a0974e23048bd7b3b1eb1e2f569b1d0 Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 8 Dec 2022 14:56:20 -0800 Subject: Auto-diff for matrix operations. (#2559) Co-authored-by: Yong He --- source/slang/diff.meta.slang | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'source/slang/diff.meta.slang') diff --git a/source/slang/diff.meta.slang b/source/slang/diff.meta.slang index a97ab9eaf..248112810 100644 --- a/source/slang/diff.meta.slang +++ b/source/slang/diff.meta.slang @@ -110,6 +110,38 @@ void updatePair(inout DifferentialPair p, T newPrimal, T p = DifferentialPair(newPrimal, newDiff); } +// vector-matrix +__generic +__target_intrinsic(hlsl) +__target_intrinsic(glsl, "($1 * $0)") +DifferentialPair> mul(DifferentialPair> left, DifferentialPair> right) +{ + let primal = mul(left.p, right.p); + let diff = mul(left.d, right.p) + mul(left.p, right.d); + return DifferentialPair>(primal, diff); +} + +// matrix-vector +__generic +[ForceInline] +[ForwardDerivativeOf(mul)] +DifferentialPair> mul(DifferentialPair> left, DifferentialPair> right) +{ + let primal = mul(left.p, right.p); + let diff = mul(left.d, right.p) + mul(left.p, right.d); + return DifferentialPair>(primal, diff); +} + + +// matrix-matrix +__generic +[ForwardDerivativeOf(mul)] +DifferentialPair> mul(DifferentialPair> right, DifferentialPair> left) +{ + let primal = mul(right.p, left.p); + let diff = mul(right.d, left.p) + mul(right.p, left.d); + return DifferentialPair>(primal, diff); +} #define VECTOR_MAP_D_UNARY(TYPE, COUNT, D_FUNC, VALUE) \ vector result; \ -- cgit v1.2.3