diff options
| author | winmad <winmad.wlf@gmail.com> | 2023-03-22 22:04:28 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-22 22:04:28 -0700 |
| commit | 44ab0952f0321e2a3b988cc9b3f502c7ab440e5a (patch) | |
| tree | 8f9ed4761d8eb67a09133e8983404d79d1320166 /tests | |
| parent | 259a015feb9d4ab65e8fbba32f6c777e92780cc7 (diff) | |
Create a simplified Falcor material system in slang test (#2721)
* Duplicate an example of differentiating Falcor's material system
* Add a second BSDF
* WIP: update test; grad didn't pass through
* Finalize test
---------
Co-authored-by: Lifan Wu <lifanw@nvidia.com>
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/autodiff/material/DiffuseMaterial.slang | 17 | ||||
| -rw-r--r-- | tests/autodiff/material/DiffuseMaterialInstance.slang | 26 | ||||
| -rw-r--r-- | tests/autodiff/material/GlossyMaterial.slang | 17 | ||||
| -rw-r--r-- | tests/autodiff/material/GlossyMaterialInstance.slang | 39 | ||||
| -rw-r--r-- | tests/autodiff/material/IBSDF.slang | 7 | ||||
| -rw-r--r-- | tests/autodiff/material/IMaterial.slang | 10 | ||||
| -rw-r--r-- | tests/autodiff/material/IMaterialInstance.slang | 7 | ||||
| -rw-r--r-- | tests/autodiff/material/MaterialSystem.slang | 8 | ||||
| -rw-r--r-- | tests/autodiff/material/diff-falcor-material-system.slang | 46 | ||||
| -rw-r--r-- | tests/autodiff/material/diff-falcor-material-system.slang.expected.txt | 7 |
10 files changed, 184 insertions, 0 deletions
diff --git a/tests/autodiff/material/DiffuseMaterial.slang b/tests/autodiff/material/DiffuseMaterial.slang new file mode 100644 index 000000000..e762e17c8 --- /dev/null +++ b/tests/autodiff/material/DiffuseMaterial.slang @@ -0,0 +1,17 @@ +//TEST_IGNORE_FILE: + +__exported import IMaterial; +__exported import DiffuseMaterialInstance; + +struct DiffuseMaterial : IMaterial +{ + float3 baseColor; + + typedef DiffuseMaterialInstance MaterialInstance; + + DiffuseMaterialInstance setupMaterialInstance() + { + DiffuseMaterialInstance mi = { {baseColor} }; + return mi; + } +}; diff --git a/tests/autodiff/material/DiffuseMaterialInstance.slang b/tests/autodiff/material/DiffuseMaterialInstance.slang new file mode 100644 index 000000000..ca6bfc69a --- /dev/null +++ b/tests/autodiff/material/DiffuseMaterialInstance.slang @@ -0,0 +1,26 @@ +//TEST_IGNORE_FILE: + +__exported import IMaterialInstance; +__exported import IBSDF; + +struct DiffuseBSDF : IBSDF +{ + float3 albedo; + + [TreatAsDifferentiable] + float3 eval(const float3 wiLocal, const float3 woLocal) + { + return albedo; + } +}; + +struct DiffuseMaterialInstance : IMaterialInstance +{ + DiffuseBSDF bsdf; + + [TreatAsDifferentiable] + float3 eval(const float3 wi, const float3 wo) + { + return bsdf.eval(wi, wo); + } +}; diff --git a/tests/autodiff/material/GlossyMaterial.slang b/tests/autodiff/material/GlossyMaterial.slang new file mode 100644 index 000000000..59cee5afe --- /dev/null +++ b/tests/autodiff/material/GlossyMaterial.slang @@ -0,0 +1,17 @@ +//TEST_IGNORE_FILE: + +__exported import IMaterial; +__exported import GlossyMaterialInstance; + +struct GlossyMaterial : IMaterial +{ + float3 baseColor; + + typedef GlossyMaterialInstance MaterialInstance; + + GlossyMaterialInstance setupMaterialInstance() + { + GlossyMaterialInstance mi = { { baseColor } }; + return mi; + } +}; diff --git a/tests/autodiff/material/GlossyMaterialInstance.slang b/tests/autodiff/material/GlossyMaterialInstance.slang new file mode 100644 index 000000000..b1430e62c --- /dev/null +++ b/tests/autodiff/material/GlossyMaterialInstance.slang @@ -0,0 +1,39 @@ +//TEST_IGNORE_FILE: + +__exported import IMaterialInstance; +__exported import IBSDF; + +struct GlossyBSDF : IBSDF +{ + float3 albedo; + + [BackwardDifferentiable] + float3 getAlbedo() + { + return albedo; + } + + [ForwardDerivativeOf(getAlbedo)] + DifferentialPair<float3> __fwd_d_getAlbedo() + { + return diffPair(albedo, float3(1.f)); + } + + [BackwardDifferentiable] + float3 eval(const float3 wiLocal, const float3 woLocal) + { + float3 a = getAlbedo(); + return a * a; + } +}; + +struct GlossyMaterialInstance : IMaterialInstance +{ + GlossyBSDF bsdf; + + [BackwardDifferentiable] + float3 eval(const float3 wi, const float3 wo) + { + return bsdf.eval(wi, wo); + } +}; diff --git a/tests/autodiff/material/IBSDF.slang b/tests/autodiff/material/IBSDF.slang new file mode 100644 index 000000000..41b0957db --- /dev/null +++ b/tests/autodiff/material/IBSDF.slang @@ -0,0 +1,7 @@ +//TEST_IGNORE_FILE: + +interface IBSDF +{ + [BackwardDifferentiable] + float3 eval(const float3 wi, const float3 wo); +} diff --git a/tests/autodiff/material/IMaterial.slang b/tests/autodiff/material/IMaterial.slang new file mode 100644 index 000000000..4bdaac2bc --- /dev/null +++ b/tests/autodiff/material/IMaterial.slang @@ -0,0 +1,10 @@ +//TEST_IGNORE_FILE: + +__exported import IMaterialInstance; + +interface IMaterial +{ + associatedtype MaterialInstance : IMaterialInstance; + + MaterialInstance setupMaterialInstance(); +} diff --git a/tests/autodiff/material/IMaterialInstance.slang b/tests/autodiff/material/IMaterialInstance.slang new file mode 100644 index 000000000..fb13f8982 --- /dev/null +++ b/tests/autodiff/material/IMaterialInstance.slang @@ -0,0 +1,7 @@ +//TEST_IGNORE_FILE: + +interface IMaterialInstance +{ + [BackwardDifferentiable] + float3 eval(const float3 wi, const float3 wo); +} diff --git a/tests/autodiff/material/MaterialSystem.slang b/tests/autodiff/material/MaterialSystem.slang new file mode 100644 index 000000000..5e733fad9 --- /dev/null +++ b/tests/autodiff/material/MaterialSystem.slang @@ -0,0 +1,8 @@ +//TEST_IGNORE_FILE: + +__exported import IMaterial; + +IMaterial createMaterialClassConformance(int type, float3 value) +{ + return createDynamicObject<IMaterial, float3>(type, value); +} diff --git a/tests/autodiff/material/diff-falcor-material-system.slang b/tests/autodiff/material/diff-falcor-material-system.slang new file mode 100644 index 000000000..1cb8275fa --- /dev/null +++ b/tests/autodiff/material/diff-falcor-material-system.slang @@ -0,0 +1,46 @@ +//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type +//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -output-using-type + +//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<float> outputBuffer; + +import MaterialSystem; +import DiffuseMaterial; +import DiffuseMaterialInstance; +import GlossyMaterial; +import GlossyMaterialInstance; + +//TEST_INPUT: type_conformance DiffuseMaterial:IMaterial = 0 +//TEST_INPUT: type_conformance GlossyMaterial:IMaterial = 1 + +[BackwardDifferentiable] +float3 evalBSDF(int type) +{ + float3 wi = normalize(float3(0.5, 0.2, 0.8)); + float3 wo = normalize(float3(-0.1, -0.3, 0.9)); + + IMaterial material = createMaterialClassConformance(type, float3(0.9f, 0.6f, 0.2f)); + let mi = material.setupMaterialInstance(); + float3 f = mi.eval(wi, wo); + return f; +} + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) +{ + { + DifferentialPair<float3> dp_f = __fwd_diff(evalBSDF)(0); + + outputBuffer[0] = dp_f.d[0]; + outputBuffer[1] = dp_f.d[1]; + outputBuffer[2] = dp_f.d[2]; + } + + { + DifferentialPair<float3> dp_f = __fwd_diff(evalBSDF)(1); + + outputBuffer[3] = dp_f.d[0]; + outputBuffer[4] = dp_f.d[1]; + outputBuffer[5] = dp_f.d[2]; + } +} diff --git a/tests/autodiff/material/diff-falcor-material-system.slang.expected.txt b/tests/autodiff/material/diff-falcor-material-system.slang.expected.txt new file mode 100644 index 000000000..e60005477 --- /dev/null +++ b/tests/autodiff/material/diff-falcor-material-system.slang.expected.txt @@ -0,0 +1,7 @@ +type: float +0.0 +0.0 +0.0 +1.8 +1.2 +0.4
\ No newline at end of file |
