yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
d10732742
master
1//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -output-using-type 2//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type 3//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj -output-using-type 4 5//TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer 6RWStructuredBuffer<float> outputBuffer; 7 8interface IFoo 9{ 10 [BackwardDifferentiable] 11 float3 test(float v, uint offset); 12} 13struct A : IFoo 14{ 15 float x; 16 17 float3 f(float v, uint offset) 18 { 19 return v * v; 20 } 21 22 // Provide a backward diff, but leave out forward diff. 23 [BackwardDerivativeOf(f)] 24 [TreatAsDifferentiable] 25 void diff_f(inout DifferentialPair<float> v, uint offset, float3 dOut) 26 { 27 v = diffPair(v.p, 2 * v.p * dOut.x); 28 } 29 30 [BackwardDifferentiable] 31 float3 test(float v, uint offset) 32 { 33 return f(v, 0); 34 } 35} 36 37[BackwardDifferentiable] 38float3 test(IFoo obj, float v) 39{ 40 return obj.test(v, 0); 41} 42 43[numthreads(1, 1, 1)] 44void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) 45{ 46 A a = {0.0}; 47 var p = diffPair(3.0, 0.0); 48 let rs = __bwd_diff(test)(a, p, 1.0); 49 outputBuffer[0] = p.d; 50}