yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Harsh Aggarwal (NVIDIA)Fix 7723 - Add autodiff tests (#7919)d10732742

master
1.2 KiB50 linesraw
1//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -output-using-type
2//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type
3//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj -output-using-type
4
5//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer
6RWStructuredBuffer<float> outputBuffer;
7
8interface IFoo
9{
10    [BackwardDifferentiable]
11    float3 test(float v, uint offset);
12}
13struct A : IFoo
14{
15    float x;
16
17    float3 f(float v, uint offset)
18    {
19        return v * v;
20    }
21
22    // Provide a backward diff, but leave out forward diff.
23    [BackwardDerivativeOf(f)]
24    [TreatAsDifferentiable]
25    void diff_f(inout DifferentialPair<float> v, uint offset, float3 dOut)
26    {
27        v = diffPair(v.p, 2 * v.p * dOut.x);
28    }
29
30    [BackwardDifferentiable]
31    float3 test(float v, uint offset)
32    {
33        return f(v, 0);
34    }
35}
36
37[BackwardDifferentiable]
38float3 test(IFoo obj, float v)
39{
40    return obj.test(v, 0);
41}
42
43[numthreads(1, 1, 1)]
44void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
45{
46    A a = {0.0};
47    var p = diffPair(3.0, 0.0);
48    let rs = __bwd_diff(test)(a, p, 1.0);
49    outputBuffer[0] = p.d;
50}