summaryrefslogtreecommitdiff
path: root/source/slang/diff.meta.slang
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/diff.meta.slang')
-rw-r--r--source/slang/diff.meta.slang77
1 files changed, 62 insertions, 15 deletions
diff --git a/source/slang/diff.meta.slang b/source/slang/diff.meta.slang
index cb87156f5..f8b36a3ac 100644
--- a/source/slang/diff.meta.slang
+++ b/source/slang/diff.meta.slang
@@ -362,6 +362,7 @@ extension Array<T, N> : IDifferentiable
__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>
[ForceInline]
[ForwardDerivativeOf(transpose)]
+[PreferRecompute]
DifferentialPair<matrix<T, M, N>> __d_transpose(DifferentialPair<matrix<T, N, M>> m)
{
return DifferentialPair<matrix<T, M, N>>(transpose(m.p), transpose(m.d));
@@ -370,6 +371,7 @@ DifferentialPair<matrix<T, M, N>> __d_transpose(DifferentialPair<matrix<T, N, M>
__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>
[ForceInline]
[BackwardDerivativeOf(transpose)]
+[PreferRecompute]
void __d_transpose(inout DifferentialPair<matrix<T, N, M>> m, matrix<T, M, N>.Differential dOut)
{
m = diffPair(m.p, transpose(dOut));
@@ -379,6 +381,7 @@ void __d_transpose(inout DifferentialPair<matrix<T, N, M>> m, matrix<T, M, N>.Di
__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>
[ForceInline]
[ForwardDerivativeOf(mul)]
+[PreferRecompute]
DifferentialPair<vector<T, M>> mul(DifferentialPair<vector<T, N>> left, DifferentialPair<matrix<T, N, M>> right)
{
let primal = mul(left.p, right.p);
@@ -388,6 +391,7 @@ DifferentialPair<vector<T, M>> mul(DifferentialPair<vector<T, N>> left, Differen
__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>
[BackwardDerivativeOf(mul)]
+[PreferRecompute]
void __d_mul(inout DifferentialPair<vector<T, N>> left, inout DifferentialPair<matrix<T, N, M>> right, vector<T, M>.Differential dOut)
{
vector<T, N>.Differential left_d_result;
@@ -410,6 +414,7 @@ void __d_mul(inout DifferentialPair<vector<T, N>> left, inout DifferentialPair<m
__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>
[ForceInline]
[ForwardDerivativeOf(mul)]
+[PreferRecompute]
DifferentialPair<vector<T,N>> mul(DifferentialPair<matrix<T,N,M>> left, DifferentialPair<vector<T,M>> right)
{
let primal = mul(left.p, right.p);
@@ -419,6 +424,7 @@ DifferentialPair<vector<T,N>> mul(DifferentialPair<matrix<T,N,M>> left, Differen
__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>
[BackwardDerivativeOf(mul)]
+[PreferRecompute]
void __d_mul(inout DifferentialPair<matrix<T, N, M>> left, inout DifferentialPair<vector<T, M>> right, vector<T, N>.Differential dOut)
{
matrix<T, N, M>.Differential left_d_result;
@@ -441,6 +447,7 @@ void __d_mul(inout DifferentialPair<matrix<T, N, M>> left, inout DifferentialPai
__generic<T : __BuiltinFloatingPointType, let R : int, let N : int, let C : int>
[ForceInline]
[ForwardDerivativeOf(mul)]
+[PreferRecompute]
DifferentialPair<matrix<T,R,C>> mul(DifferentialPair<matrix<T,R,N>> left, DifferentialPair<matrix<T,N,C>> right)
{
let primal = mul(left.p, right.p);
@@ -450,6 +457,7 @@ DifferentialPair<matrix<T,R,C>> mul(DifferentialPair<matrix<T,R,N>> left, Differ
__generic<T : __BuiltinFloatingPointType, let R : int, let N : int, let C : int>
[BackwardDerivativeOf(mul)]
+[PreferRecompute]
void mul(inout DifferentialPair<matrix<T, R, N>> left, inout DifferentialPair<matrix<T, N, C>> right, matrix<T, R, C>.Differential dOut)
{
matrix<T, R, N>.Differential left_d_result;
@@ -480,6 +488,7 @@ void mul(inout DifferentialPair<matrix<T, R, N>> left, inout DifferentialPair<ma
// Vector dot product
__generic<T : __BuiltinFloatingPointType, let N : int>
[ForwardDerivativeOf(dot)]
+[PreferRecompute]
DifferentialPair<T> __d_dot(DifferentialPair<vector<T, N>> dpx, DifferentialPair<vector<T, N>> dpy)
{
T result = T(0);
@@ -496,6 +505,7 @@ DifferentialPair<T> __d_dot(DifferentialPair<vector<T, N>> dpx, DifferentialPair
__generic<T : __BuiltinFloatingPointType, let N : int>
[BackwardDerivativeOf(dot)]
+[PreferRecompute]
void __d_dot(inout DifferentialPair<vector<T, N>> dpx, inout DifferentialPair<vector<T, N>> dpy, T.Differential dOut)
{
vector<T, N>.Differential x_d_result, y_d_result;
@@ -512,6 +522,7 @@ void __d_dot(inout DifferentialPair<vector<T, N>> dpx, inout DifferentialPair<ve
// Cross product
__generic<T : __BuiltinFloatingPointType>
[ForwardDerivativeOf(cross)]
+[PreferRecompute]
DifferentialPair<vector<T, 3>> __d_cross(DifferentialPair<vector<T, 3>> a, DifferentialPair<vector<T, 3>> b)
{
/*
@@ -539,6 +550,7 @@ DifferentialPair<vector<T, 3>> __d_cross(DifferentialPair<vector<T, 3>> a, Diffe
__generic<T : __BuiltinFloatingPointType>
[BackwardDerivativeOf(cross)]
+[PreferRecompute]
void __d_cross(inout DifferentialPair<vector<T, 3>> a, inout DifferentialPair<vector<T, 3>> b, vector<T, 3>.Differential dOut)
{
/*
@@ -560,7 +572,7 @@ void __d_cross(inout DifferentialPair<vector<T, 3>> a, inout DifferentialPair<ve
#define VECTOR_MATRIX_BINARY_DIFF_IMPL(NAME) \
__generic<T : __BuiltinFloatingPointType, let N : int> \
- [BackwardDifferentiable] \
+ [BackwardDifferentiable][PreferRecompute] \
[ForwardDerivativeOf(NAME)] \
DifferentialPair<vector<T, N>> __d_##NAME##_vector( \
DifferentialPair<vector<T, N>> dpx, DifferentialPair<vector<T, N>> dpy) \
@@ -578,7 +590,7 @@ void __d_cross(inout DifferentialPair<vector<T, 3>> a, inout DifferentialPair<ve
return DifferentialPair<vector<T, N>>(result, d_result); \
} \
__generic<T : __BuiltinFloatingPointType, let M : int, let N : int> \
- [BackwardDifferentiable] \
+ [BackwardDifferentiable][PreferRecompute] \
[ForwardDerivativeOf(NAME)] \
DifferentialPair<matrix<T, M, N>> __d_##NAME##_matrix( \
DifferentialPair<matrix<T, M, N>> dpx, DifferentialPair<matrix<T, M, N>> dpy) \
@@ -597,7 +609,7 @@ void __d_cross(inout DifferentialPair<vector<T, 3>> a, inout DifferentialPair<ve
return DifferentialPair<matrix<T, M, N>>(result, d_result); \
} \
__generic<T : __BuiltinFloatingPointType, let N : int> \
- [BackwardDifferentiable] \
+ [BackwardDifferentiable][PreferRecompute] \
[BackwardDerivativeOf(NAME)] \
void __d_##NAME##_vector( \
inout DifferentialPair<vector<T, N>> dpx, \
@@ -617,7 +629,7 @@ void __d_cross(inout DifferentialPair<vector<T, 3>> a, inout DifferentialPair<ve
dpy = diffPair(dpy.p, right_d_result); \
} \
__generic<T : __BuiltinFloatingPointType, let M : int, let N : int> \
- [BackwardDifferentiable] \
+ [BackwardDifferentiable][PreferRecompute] \
[BackwardDerivativeOf(NAME)] \
void __d_##NAME##_matrix( \
inout DifferentialPair<matrix<T, M, N>> dpx, \
@@ -640,7 +652,7 @@ void __d_cross(inout DifferentialPair<vector<T, 3>> a, inout DifferentialPair<ve
#define VECTOR_MATRIX_TERNARY_DIFF_IMPL(NAME) \
__generic<T : __BuiltinFloatingPointType, let N : int> \
- [BackwardDifferentiable] \
+ [BackwardDifferentiable][PreferRecompute] \
[ForwardDerivativeOf(NAME)] \
DifferentialPair<vector<T, N>> __d_##NAME##_vector( \
DifferentialPair<vector<T, N>> dpx, \
@@ -661,7 +673,7 @@ void __d_cross(inout DifferentialPair<vector<T, 3>> a, inout DifferentialPair<ve
return DifferentialPair<vector<T, N>>(result, d_result); \
} \
__generic<T : __BuiltinFloatingPointType, let M : int, let N : int> \
- [BackwardDifferentiable] \
+ [BackwardDifferentiable][PreferRecompute] \
[ForwardDerivativeOf(NAME)] \
DifferentialPair<matrix<T, M, N>> __d_##NAME##_matrix( \
DifferentialPair<matrix<T, M, N>> dpx, \
@@ -683,7 +695,7 @@ void __d_cross(inout DifferentialPair<vector<T, 3>> a, inout DifferentialPair<ve
return DifferentialPair<matrix<T, M, N>>(result, d_result); \
} \
__generic<T : __BuiltinFloatingPointType, let N : int> \
- [BackwardDifferentiable] \
+ [BackwardDifferentiable][PreferRecompute] \
[BackwardDerivativeOf(NAME)] \
void __d_##NAME##_vector( \
inout DifferentialPair<vector<T, N>> dpx, \
@@ -708,7 +720,7 @@ void __d_cross(inout DifferentialPair<vector<T, 3>> a, inout DifferentialPair<ve
dpz = diffPair(dpz.p, right_d_result); \
} \
__generic<T : __BuiltinFloatingPointType, let M : int, let N : int> \
- [BackwardDifferentiable] \
+ [BackwardDifferentiable][PreferRecompute] \
[BackwardDerivativeOf(NAME)] \
void __d_##NAME##_matrix( \
inout DifferentialPair<matrix<T, M, N>> dpx, \
@@ -736,7 +748,7 @@ void __d_cross(inout DifferentialPair<vector<T, 3>> a, inout DifferentialPair<ve
#define UNARY_DERIVATIVE_IMPL(NAME, FWD_DIFF_FUNC, BWD_DIFF_FUNC) \
__generic<T : __BuiltinFloatingPointType> \
- [BackwardDifferentiable] \
+ [BackwardDifferentiable][PreferRecompute] \
[ForwardDerivativeOf(NAME)] \
DifferentialPair<T> __d_##NAME(DifferentialPair<T> dpx) \
{ \
@@ -744,7 +756,7 @@ void __d_cross(inout DifferentialPair<vector<T, 3>> a, inout DifferentialPair<ve
return DifferentialPair<T>(NAME(dpx.p), FWD_DIFF_FUNC); \
} \
__generic<T : __BuiltinFloatingPointType, let N : int> \
- [BackwardDifferentiable] \
+ [BackwardDifferentiable][PreferRecompute] \
[ForwardDerivativeOf(NAME)] \
DifferentialPair<vector<T, N>> __d_##NAME##_vector(DifferentialPair<vector<T, N>> dpx) \
{ \
@@ -752,7 +764,7 @@ void __d_cross(inout DifferentialPair<vector<T, 3>> a, inout DifferentialPair<ve
return DifferentialPair<ReturnType>(NAME(dpx.p), FWD_DIFF_FUNC); \
} \
__generic<T : __BuiltinFloatingPointType, let M : int, let N : int> \
- [BackwardDifferentiable] \
+ [BackwardDifferentiable][PreferRecompute] \
[ForwardDerivativeOf(NAME)] \
DifferentialPair<matrix<T, M, N>> __d_##NAME##_m(DifferentialPair<matrix<T, M, N>> dpm) \
{ \
@@ -763,10 +775,10 @@ void __d_cross(inout DifferentialPair<vector<T, 3>> a, inout DifferentialPair<ve
var dpx = diffPair(dpm.p[i], dpm.d[i]); \
diff[i] = FWD_DIFF_FUNC; \
} \
- return diffPair(NAME(dpm.p), diff); \
+ return diffPair(NAME(dpm.p), diff); \
} \
__generic<T : __BuiltinFloatingPointType> \
- [BackwardDifferentiable] \
+ [BackwardDifferentiable][PreferRecompute] \
[BackwardDerivativeOf(NAME)] \
void __d_##NAME(inout DifferentialPair<T> dpx, T.Differential dOut) \
{ \
@@ -774,7 +786,7 @@ void __d_cross(inout DifferentialPair<vector<T, 3>> a, inout DifferentialPair<ve
dpx = diffPair(dpx.p, BWD_DIFF_FUNC); \
} \
__generic<T : __BuiltinFloatingPointType, let N : int> \
- [BackwardDifferentiable] \
+ [BackwardDifferentiable][PreferRecompute] \
[BackwardDerivativeOf(NAME)] \
void __d_##NAME##_vector( \
inout DifferentialPair<vector<T, N>> dpx, vector<T, N>.Differential dOut) \
@@ -783,7 +795,7 @@ void __d_cross(inout DifferentialPair<vector<T, 3>> a, inout DifferentialPair<ve
dpx = diffPair(dpx.p, BWD_DIFF_FUNC); \
} \
__generic<T : __BuiltinFloatingPointType, let M : int, let N : int> \
- [BackwardDifferentiable] \
+ [BackwardDifferentiable][PreferRecompute] \
[BackwardDerivativeOf(NAME)] \
void __d_##NAME##_matrix( \
inout DifferentialPair<matrix<T, M, N>> m, matrix<T, M, N>.Differential mdOut) \
@@ -848,6 +860,7 @@ SIMPLE_UNARY_DERIVATIVE_IMPL(atan, T(1.0) / (T(1.0) + dpx.p * dpx.p))
// Atan2
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
+[PreferRecompute]
[ForwardDerivativeOf(atan2)]
DifferentialPair<T> __d_atan2(DifferentialPair<T> dpy, DifferentialPair<T> dpx)
{
@@ -860,6 +873,7 @@ DifferentialPair<T> __d_atan2(DifferentialPair<T> dpy, DifferentialPair<T> dpx)
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
+[PreferRecompute]
[BackwardDerivativeOf(atan2)]
void __d_atan2(inout DifferentialPair<T> dpy, inout DifferentialPair<T> dpx, T.Differential dOut)
{
@@ -872,6 +886,7 @@ VECTOR_MATRIX_BINARY_DIFF_IMPL(atan2)
// fmod
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
+[PreferRecompute]
[ForwardDerivativeOf(fmod)]
DifferentialPair<T> __d_fmod(DifferentialPair<T> x, DifferentialPair<T> y)
{
@@ -879,6 +894,7 @@ DifferentialPair<T> __d_fmod(DifferentialPair<T> x, DifferentialPair<T> y)
}
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
+[PreferRecompute]
[BackwardDerivativeOf(fmod)]
void __d_fmod(inout DifferentialPair<T> x, inout DifferentialPair<T> y, T.Differential dOut)
{
@@ -890,6 +906,7 @@ VECTOR_MATRIX_BINARY_DIFF_IMPL(fmod)
// Raise to a power
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
+[PreferRecompute]
[ForwardDerivativeOf(pow)]
DifferentialPair<T> __d_pow(DifferentialPair<T> dpx, DifferentialPair<T> dpy)
{
@@ -910,6 +927,7 @@ DifferentialPair<T> __d_pow(DifferentialPair<T> dpx, DifferentialPair<T> dpy)
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
+[PreferRecompute]
[BackwardDerivativeOf(pow)]
void __d_pow(inout DifferentialPair<T> dpx, inout DifferentialPair<T> dpy, T.Differential dOut)
{
@@ -936,6 +954,7 @@ VECTOR_MATRIX_BINARY_DIFF_IMPL(pow)
// Maximum
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
+[PreferRecompute]
[ForwardDerivativeOf(max)]
DifferentialPair<T> __d_max(DifferentialPair<T> dpx, DifferentialPair<T> dpy)
{
@@ -947,6 +966,7 @@ DifferentialPair<T> __d_max(DifferentialPair<T> dpx, DifferentialPair<T> dpy)
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
+[PreferRecompute]
[BackwardDerivativeOf(max)]
void __d_max(inout DifferentialPair<T> dpx, inout DifferentialPair<T> dpy, T.Differential dOut)
{
@@ -959,6 +979,7 @@ VECTOR_MATRIX_BINARY_DIFF_IMPL(max)
// Minimum
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
+[PreferRecompute]
[ForwardDerivativeOf(min)]
DifferentialPair<T> __d_min(DifferentialPair<T> dpx, DifferentialPair<T> dpy)
{
@@ -970,6 +991,7 @@ DifferentialPair<T> __d_min(DifferentialPair<T> dpx, DifferentialPair<T> dpy)
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
+[PreferRecompute]
[BackwardDerivativeOf(min)]
void __d_min(inout DifferentialPair<T> dpx, inout DifferentialPair<T> dpy, T.Differential dOut)
{
@@ -982,6 +1004,7 @@ VECTOR_MATRIX_BINARY_DIFF_IMPL(min)
// Lerp
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
+[PreferRecompute]
[ForwardDerivativeOf(lerp)]
DifferentialPair<T> __d_lerp(DifferentialPair<T> dpx, DifferentialPair<T> dpy, DifferentialPair<T> dps)
{
@@ -992,6 +1015,7 @@ DifferentialPair<T> __d_lerp(DifferentialPair<T> dpx, DifferentialPair<T> dpy, D
}
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
+[PreferRecompute]
[BackwardDerivativeOf(lerp)]
void __d_lerp(inout DifferentialPair<T> dpx, inout DifferentialPair<T> dpy, inout DifferentialPair<T> dps, T.Differential dOut)
{
@@ -1004,6 +1028,7 @@ VECTOR_MATRIX_TERNARY_DIFF_IMPL(lerp)
// Clamp
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
+[PreferRecompute]
[ForwardDerivativeOf(clamp)]
DifferentialPair<T> __d_clamp(DifferentialPair<T> dpx, DifferentialPair<T> dpMin, DifferentialPair<T> dpMax)
{
@@ -1013,6 +1038,7 @@ DifferentialPair<T> __d_clamp(DifferentialPair<T> dpx, DifferentialPair<T> dpMin
}
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
+[PreferRecompute]
[BackwardDerivativeOf(clamp)]
void __d_clamp(inout DifferentialPair<T> dpx, inout DifferentialPair<T> dpMin, inout DifferentialPair<T> dpMax, T.Differential dOut)
{
@@ -1025,6 +1051,7 @@ VECTOR_MATRIX_TERNARY_DIFF_IMPL(clamp)
// fma
[BackwardDifferentiable]
[ForwardDerivativeOf(fma)]
+[PreferRecompute]
DifferentialPair<double> __d_fma(DifferentialPair<double> dpx, DifferentialPair<double> dpy, DifferentialPair<double> dpz)
{
return DifferentialPair<double>(
@@ -1033,6 +1060,7 @@ DifferentialPair<double> __d_fma(DifferentialPair<double> dpx, DifferentialPair<
}
[BackwardDifferentiable]
[BackwardDerivativeOf(fma)]
+[PreferRecompute]
void __d_fma(inout DifferentialPair<double> dpx, inout DifferentialPair<double> dpy, inout DifferentialPair<double> dpz, double dOut)
{
dpx = diffPair(dpx.p, dpy.p * dOut);
@@ -1042,6 +1070,7 @@ void __d_fma(inout DifferentialPair<double> dpx, inout DifferentialPair<double>
__generic<let N : int>
[BackwardDifferentiable]
[ForwardDerivativeOf(fma)]
+[PreferRecompute]
DifferentialPair<vector<double, N>> __d_fma_vector(
DifferentialPair<vector<double, N>> dpx,
DifferentialPair<vector<double, N>> dpy,
@@ -1063,6 +1092,7 @@ DifferentialPair<vector<double, N>> __d_fma_vector(
__generic<let N : int>
[BackwardDifferentiable]
[BackwardDerivativeOf(fma)]
+[PreferRecompute]
void __d_fma_vector(
inout DifferentialPair<vector<double, N>> dpx,
inout DifferentialPair<vector<double, N>> dpy,
@@ -1089,6 +1119,7 @@ void __d_fma_vector(
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
[ForwardDerivativeOf(mad)]
+[PreferRecompute]
DifferentialPair<T> __d_mad(DifferentialPair<T> dpx, DifferentialPair<T> dpy, DifferentialPair<T> dpz)
{
return DifferentialPair<T>(
@@ -1098,6 +1129,7 @@ DifferentialPair<T> __d_mad(DifferentialPair<T> dpx, DifferentialPair<T> dpy, Di
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
[BackwardDerivativeOf(mad)]
+[PreferRecompute]
void __d_mad(inout DifferentialPair<T> dpx, inout DifferentialPair<T> dpy, inout DifferentialPair<T> dpz, T.Differential dOut)
{
dpx = diffPair(dpx.p, T.dmul(dpy.p, dOut));
@@ -1109,6 +1141,7 @@ VECTOR_MATRIX_TERNARY_DIFF_IMPL(mad)
// Smoothstep
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
+[PreferRecompute]
T __smoothstep_impl(T minVal, T maxVal, T x)
{
let t = saturate((x - minVal) / (maxVal - minVal));
@@ -1117,6 +1150,7 @@ T __smoothstep_impl(T minVal, T maxVal, T x)
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
[ForwardDerivativeOf(smoothstep)]
+[PreferRecompute]
DifferentialPair<T> __d_smoothstep(DifferentialPair<T> minVal, DifferentialPair<T> maxVal, DifferentialPair<T> x)
{
return __fwd_diff(__smoothstep_impl)(minVal, maxVal, x);
@@ -1124,6 +1158,7 @@ DifferentialPair<T> __d_smoothstep(DifferentialPair<T> minVal, DifferentialPair<
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
[BackwardDerivativeOf(smoothstep)]
+[PreferRecompute]
void __d_smoothstep(inout DifferentialPair<T> minVal, inout DifferentialPair<T> maxVal, inout DifferentialPair<T> x, T.Differential dOut)
{
__bwd_diff(__smoothstep_impl)(minVal, maxVal, x, dOut);
@@ -1133,6 +1168,7 @@ VECTOR_MATRIX_TERNARY_DIFF_IMPL(smoothstep)
// Vector length
__generic<T: __BuiltinFloatingPointType, let N : int>
[BackwardDifferentiable]
+[PreferRecompute]
T __length_impl(vector<T, N> x)
{
T len = T(0.0);
@@ -1147,6 +1183,7 @@ __generic<T: __BuiltinFloatingPointType, let N : int>
[BackwardDifferentiable]
[ForwardDerivativeOf(length)]
[ForceInline]
+[PreferRecompute]
DifferentialPair<T> __d_length(DifferentialPair<vector<T, N>> x)
{
return __fwd_diff(__length_impl)(x);
@@ -1156,6 +1193,7 @@ __generic<T: __BuiltinFloatingPointType, let N : int>
[BackwardDifferentiable]
[BackwardDerivativeOf(length)]
[ForceInline]
+[PreferRecompute]
void __d_length(inout DifferentialPair<vector<T, N>> x, T.Differential dOut)
{
return __bwd_diff(__length_impl)(x, dOut);
@@ -1164,6 +1202,7 @@ void __d_length(inout DifferentialPair<vector<T, N>> x, T.Differential dOut)
// Vector distance
__generic<T: __BuiltinFloatingPointType, let N : int>
[BackwardDifferentiable]
+[PreferRecompute]
T __distance_impl(vector<T, N> x, vector<T, N> y)
{
return length(y - x);
@@ -1172,6 +1211,7 @@ __generic<T: __BuiltinFloatingPointType, let N : int>
[BackwardDifferentiable]
[ForwardDerivativeOf(distance)]
[ForceInline]
+[PreferRecompute]
DifferentialPair<T> __d_distance(DifferentialPair<vector<T, N>> x, DifferentialPair<vector<T, N>> y)
{
return __fwd_diff(__distance_impl)(x, y);
@@ -1181,6 +1221,7 @@ __generic<T: __BuiltinFloatingPointType, let N : int>
[BackwardDifferentiable]
[BackwardDerivativeOf(distance)]
[ForceInline]
+[PreferRecompute]
void __d_distance(inout DifferentialPair<vector<T, N>> x, inout DifferentialPair<vector<T, N>> y, T.Differential dOut)
{
return __bwd_diff(__distance_impl)(x, y, dOut);
@@ -1189,6 +1230,7 @@ void __d_distance(inout DifferentialPair<vector<T, N>> x, inout DifferentialPair
// Vector normalize
__generic<T : __BuiltinFloatingPointType, let N : int>
[BackwardDifferentiable]
+[PreferRecompute]
vector<T, N> __normalize_impl(vector<T, N> x)
{
let r = T(1.0) / length(x);
@@ -1198,6 +1240,7 @@ __generic<T: __BuiltinFloatingPointType, let N : int>
[BackwardDifferentiable]
[ForwardDerivativeOf(normalize)]
[ForceInline]
+[PreferRecompute]
DifferentialPair<vector<T, N>> __d_normalize(DifferentialPair<vector<T, N>> x)
{
return __fwd_diff(__normalize_impl)(x);
@@ -1206,6 +1249,7 @@ __generic<T : __BuiltinFloatingPointType, let N : int>
[BackwardDifferentiable]
[BackwardDerivativeOf(normalize)]
[ForceInline]
+[PreferRecompute]
void __d_distance(inout DifferentialPair<vector<T, N>> x, vector<T, N>.Differential dOut)
{
return __bwd_diff(__normalize_impl)(x, dOut);
@@ -1264,6 +1308,7 @@ void __d_refract(inout DifferentialPair<vector<T, N>> i, inout DifferentialPair<
__generic<T : __BuiltinFloatingPointType>
[BackwardDifferentiable]
[PrimalSubstituteOf(sincos)]
+[PreferRecompute]
void __sincos_impl(T x, out T s, out T c)
{
s = sin(x);
@@ -1272,6 +1317,7 @@ void __sincos_impl(T x, out T s, out T c)
__generic<T : __BuiltinFloatingPointType, let N : int>
[BackwardDifferentiable]
+[PreferRecompute]
[PrimalSubstituteOf(sincos)]
void __sincos_impl(vector<T, N> x, out vector<T, N> s, out vector<T, N> c)
{
@@ -1282,6 +1328,7 @@ void __sincos_impl(vector<T, N> x, out vector<T, N> s, out vector<T, N> c)
__generic<T : __BuiltinFloatingPointType, let N : int, let M : int>
[BackwardDifferentiable]
[PrimalSubstituteOf(sincos)]
+[PreferRecompute]
void __sincos_impl(matrix<T, N, M> x, out matrix<T, N, M> s, out matrix<T, N, M> c)
{
s = sin(x);