yum-mirror/slang

Making it easier to work with shaders

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

kaizhangNVno_diff diagnostics improvement (#7655)a670bafc1

master
1.2 KiB46 linesraw
1//TEST_IGNORE_FILE:
2
3__exported import IMaterial;
4__exported import GlossyMaterialInstance;
5
6public struct GlossyMaterial : IMaterial
7{
8    public float3 baseColor;
9
10    public typedef GlossyMaterialInstance MaterialInstance;
11
12    public float3 getAlbedo(float3 albedo)
13    {
14        return albedo;
15    }
16
17    [ForwardDerivativeOf(getAlbedo)]
18    [TreatAsDifferentiable]
19    public DifferentialPair<float3> __fwd_d_getAlbedo(DifferentialPair<float3> dpAlbedo)
20    {
21        return diffPair(dpAlbedo.p, float3(1.f));
22    }
23
24    [BackwardDerivativeOf(getAlbedo)]
25    [TreatAsDifferentiable]
26    public void __bwd_d_getAlbedo(inout DifferentialPair<float3> dpAlbedo, float3 dOut)
27    {
28        [unroll]
29        for (int j = 0; j < 3; j++) outputBuffer[j + 3] += dOut[j];
30    }
31
32    [BackwardDifferentiable]
33    [NoDiffThis]
34    public GlossyMaterialInstance setupMaterialInstance(out MaterialInstanceData miData)
35    {
36        float3 albedo = getAlbedo(baseColor);
37        GlossyMaterialInstance mi = { baseColor };
38        for (uint i = 0; i < 3; i++) miData.data[i] = albedo[i];
39
40        // unused
41        miData.data[3] = 0.f;
42        miData.data[4] = 0.f;
43        
44        return mi;
45    }
46};