yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
a20f6a030
master
1//TEST_IGNORE_FILE: 2 3//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer 4RWStructuredBuffer<float> outputBuffer; 5 6typealias IDFloat = IFloat & IDifferentiable; 7 8__generic<T : IDFloat> 9typedef DifferentialPair<T> dfloat; 10 11import test_intrinsics; 12 13dpfloat my_pow_jvp(dpfloat x, dpfloat n) 14{ 15 return dpfloat( 16 pow(x.p, n.p), 17 x.d * n.p * pow(x.p, n.p-1) + n.d * pow(x.p, n.p) * log(x.p)); 18} 19 20[ForwardDerivative(my_pow_jvp)] 21float _pow(float, float); 22 23[numthreads(1, 1, 1)] 24void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) 25{ 26 { 27 dpfloat dpa = dpfloat(5.0, 1.0); 28 dpfloat dpn = dpfloat(2, 0.0); 29 30 outputBuffer[0] = __fwd_diff(_pow)(dpa, dpn).d; // Expect: 10.0 31 outputBuffer[1] = __fwd_diff(_pow)( 32 dpfloat(dpa.p, 0.0), 33 dpfloat(dpn.p, 1.0)).d; // Expect: 40.23595 34 } 35}