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 IMaterialInstance; 5import MxLayeredMaterialInstance; 6import MxWeights; 7 8public struct LayeredData_mixedLobes : IMxLayeredMaterialData 9{ 10 public static const int bsdfCount = 3; 11 public static const int layerCount = 1; 12 13 public int getBsdfCount() { return bsdfCount; } 14 public int getLayerCount() { return layerCount; } 15} 16#define TMxLayeredMaterialData LayeredData_mixedLobes 17 18public struct Layered_mixedLobes_WeightsCalculator : IMxLayeredWeightCalculator 19{ 20 public void calculateWeights<let TBsdfCount : int, let TLayerCount : int, TLayeredMaterialData : IMxLayeredMaterialData>( 21 const TLayeredMaterialData data, out MxWeights<TBsdfCount> weights) 22 { 23 for (uint i = 0; i < TBsdfCount; i++) weights.weights[i] = float3(0.f); 24 } 25} 26 27public struct MxLayeredMaterial : IMaterial 28{ 29 public float3 baseColor; 30 31 public typealias UsedMaterialInstance = MxLayeredMaterialInstance<3, 1, TMxLayeredMaterialData, Layered_mixedLobes_WeightsCalculator>; 32 public typedef UsedMaterialInstance MaterialInstance; 33 34 public float3 getAlbedo(float3 albedo) 35 { 36 return albedo; 37 } 38 39 [ForwardDerivativeOf(getAlbedo)] 40 [TreatAsDifferentiable] 41 public DifferentialPair<float3> __fwd_d_getAlbedo(DifferentialPair<float3> dpAlbedo) 42 { 43 return diffPair(dpAlbedo.p, float3(1.f)); 44 } 45 46 [BackwardDerivativeOf(getAlbedo)] 47 [TreatAsDifferentiable] 48 public void __bwd_d_getAlbedo(inout DifferentialPair<float3> dpAlbedo, float3 dOut) 49 { 50 [unroll] 51 for (int j = 0; j < 3; j++) outputBuffer[j + 6] += dOut[j]; 52 } 53 54 [Differentiable] 55 [NoDiffThis] 56 public UsedMaterialInstance setupMaterialInstance(out MaterialInstanceData miData) 57 { 58 float3 albedo = getAlbedo(baseColor); 59 UsedMaterialInstance mi; 60 for (uint i = 0; i < 3; i++) miData.data[i] = albedo[i]; 61 62 // unused 63 miData.data[3] = 0.f; 64 miData.data[4] = 0.f; 65 66 return mi; 67 } 68}