yum-mirror/slang

Making it easier to work with shaders

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

Harsh Aggarwal (NVIDIA)Fix 7723 - Add autodiff tests (#7919)d10732742

master
1.3 KiB47 linesraw
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}