yum-mirror/slang

Making it easier to work with shaders

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

Yong HeSupport visibility control and default to `internal`. (#3380)11111e573

master
996 B35 linesraw
1//TEST_IGNORE_FILE:
2
3__exported import IMaterialInstance;
4__exported import IBSDF;
5
6import MxWeights;
7
8public struct MxLayeredMaterialInstance<
9    let TBsdfCount : int,
10    let TLayerCount : int,
11    TLayeredMaterialData : IMxLayeredMaterialData,
12    TWeightsCalc : IMxLayeredWeightCalculator> : IMaterialInstance
13{
14    public TLayeredMaterialData data;
15    public TWeightsCalc calculator;
16    public typealias Weights = MxWeights<TBsdfCount>;
17
18    public Weights calculateWeights()
19    {
20        Weights result;
21        calculator.calculateWeights<TBsdfCount, TLayerCount, TLayeredMaterialData>(data, result);
22        return result;
23    }
24
25    [Differentiable]
26    public float3 eval(const MaterialInstanceData miData, const float3 wi, const float3 wo)
27    {
28        float3 albedo;
29        for (uint i = 0; i < 3; i++) albedo[i] = miData.data[i];
30
31        float3 result = float3(1.f);
32        [ForceUnroll] for (uint i = 0; i < TBsdfCount; i++) result *= albedo;
33        return result;
34    }
35}