yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
a670bafc1
master
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};