yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
d10732742
master
1//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type 2//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -output-using-type 3//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj -output-using-type 4 5// outputBuffer is defined in IBSDF.slang 6//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0], stride=4):out,name=outputBuffer 7 8import MaterialSystem; 9import DiffuseMaterial; 10import DiffuseMaterialInstance; 11import GlossyMaterial; 12import GlossyMaterialInstance; 13 14//TEST_INPUT: type_conformance DiffuseMaterial:IMaterial = 0 15//TEST_INPUT: type_conformance GlossyMaterial:IMaterial = 1 16 17[BackwardDifferentiable] 18float3 evalBSDF(int type) 19{ 20 float3 wi = normalize(float3(0.5, 0.2, 0.8)); 21 float3 wo = normalize(float3(-0.1, -0.3, 0.9)); 22 23 IMaterial material = createMaterialClassConformance(type, float3(0.9f, 0.6f, 0.2f)); 24 let mi = material.setupMaterialInstance(); 25 float3 f = mi.eval(wi, wo); 26 return f; 27} 28 29[numthreads(1, 1, 1)] 30void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) 31{ 32 { 33 DifferentialPair<float3> dp_f = __fwd_diff(evalBSDF)(0); 34 35 outputBuffer[0] = dp_f.d[0]; 36 outputBuffer[1] = dp_f.d[1]; 37 outputBuffer[2] = dp_f.d[2]; 38 } 39 40 { 41 DifferentialPair<float3> dp_f = __fwd_diff(evalBSDF)(1); 42 43 outputBuffer[3] = dp_f.d[0]; 44 outputBuffer[4] = dp_f.d[1]; 45 outputBuffer[5] = dp_f.d[2]; 46 } 47}