summaryrefslogtreecommitdiffstats
path: root/tests/autodiff/material/GlossyMaterialInstance.slang
blob: fb1ce55c0aa1fd0aba5c5a04bc1a7c63e82585d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//TEST_IGNORE_FILE:

__exported import IMaterialInstance;
__exported import IBSDF;

public struct GlossyBSDF : IBSDF
{
    public float3 albedo;

    public float3 getAlbedo()
    {
        return albedo;
    }

    [ForwardDerivativeOf(getAlbedo)]
    [TreatAsDifferentiable]
    public DifferentialPair<float3> __fwd_d_getAlbedo()
    {
        return diffPair(albedo, float3(1.f));
    }

    [BackwardDerivativeOf(getAlbedo)]
    [TreatAsDifferentiable]
    public void __bwd_d_getAlbedo(float3 dOut)
    {
        [unroll]
        for (int j = 0; j < 3; j++) outputBuffer[j + 3] += dOut[j];
    }

    [BackwardDifferentiable]
    public float3 eval(const float3 wiLocal, const float3 woLocal)
    {
        float3 a = getAlbedo();
        return a * a;
    }
};

public struct GlossyMaterialInstance : IMaterialInstance
{
    public GlossyBSDF bsdf;

    [BackwardDifferentiable]
    public float3 eval(const float3 wi, const float3 wo)
    {
        return bsdf.eval(wi, wo);
    }
};