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.6 KiB36 linesraw
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//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name=outputBuffer
6RWStructuredBuffer<float> outputBuffer;
7
8typedef DifferentialPair<float3> dpfloat3;
9typedef DifferentialPair<float3x3> dpmat3;
10
11[BackwardDifferentiable]
12float3 diffMul(float3x3 m, float3 v)
13{
14    return mul(m, v);
15}
16
17[numthreads(1, 1, 1)]
18void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID)
19{
20    dpfloat3 dpv = dpfloat3(float3(0.5, 1.2, -0.8), float3(0.0, 0.0, 0.0));
21    dpmat3 dpm = dpmat3(float3x3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0),
22                        float3x3(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
23    __bwd_diff(diffMul)(dpm, dpv, float3(1.0, 10.0, 100.0));
24    outputBuffer[0] = dpm.d[0][0]; // Expect: 0.500000
25    outputBuffer[1] = dpm.d[0][1]; // Expect: 1.200000
26    outputBuffer[2] = dpm.d[0][2]; // Expect: -0.800000
27    outputBuffer[3] = dpm.d[1][0]; // Expect: 5.000000
28    outputBuffer[4] = dpm.d[1][1]; // Expect: 12.000000
29    outputBuffer[5] = dpm.d[1][2]; // Expect: -8.000000
30    outputBuffer[6] = dpm.d[2][0]; // Expect: 50.000000
31    outputBuffer[7] = dpm.d[2][1]; // Expect: 120.000000
32    outputBuffer[8] = dpm.d[2][2]; // Expect: -80.000000
33    outputBuffer[9] = dpv.d[0]; // Expect: 741.000000
34    outputBuffer[10] = dpv.d[1]; // Expect: 852.000000
35    outputBuffer[11] = dpv.d[2]; // Expect: 963.000000
36}