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 0 0 0 0], stride=4):out,name=outputBuffer 6RWStructuredBuffer<float> outputBuffer; 7 8struct D : IDifferentiable 9{ 10 float n; 11 float m; 12} 13 14[ForwardDifferentiable] 15float f(D d, int i, out D outArray[1][2]) 16{ 17 outArray[0][0].m = d.n; 18 outArray[0][0].n = d.m * 3.0f + 1.0; 19 20 outArray[0][1].m = d.n * d.n; 21 outArray[0][1].n = d.m * 4.0f + 1.0; 22 23 return outArray[0][0].m + outArray[0][1].n * 2.0; 24} 25 26[numthreads(1, 1, 1)] 27void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) 28{ 29 D d = { 1.0, 2.0 }; 30 D.Differential dd = { 1.0, 1.0 }; 31 32 var dpd = diffPair(d, dd); 33 34 D tmp[1][2] = { { { 1.0, 1.0 }, { 1.0, 1.0 } } }; 35 DifferentialPair<D[2][1]> dOut = diffPair(tmp); 36 var result = __fwd_diff(f)(dpd, 1, dOut).d; 37 38 // dOut.d has type D[2][1].Differential. Verify that it can coerce to D.Differential[2][1]. 39 D.Differential darrCopy[1][2] = dOut.d; 40 41 outputBuffer[0] = result; 42 outputBuffer[1] = dOut.d[0][0].n; 43 outputBuffer[2] = dOut.d[0][0].m; 44 outputBuffer[3] = darrCopy[0][1].n; 45 outputBuffer[4] = darrCopy[0][1].m; 46 47}