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 KiB61 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
8[Differentiable] [PreferRecompute]
9float3 fetch(float2 uv)
10{
11    if (uv.x > 0.5f)
12    {
13        if (uv.x > 0.7f)
14            return float3(2.) * uv.y;
15        else
16            return float3(1.) * uv.y;
17    }
18    else
19    {
20        if (uv.x > 0.3f)
21            return float3(4.) * uv.y;
22        else
23            return float3(3.) * uv.y;
24    }
25}
26
27[numthreads(1, 1, 1)]
28void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID)
29{
30    float2 uv = (float2)dispatchThreadID.xy / float2(512, 512);
31    float3 color = fetch(uv);
32    outputBuffer[0] = color.x; // Expect: 0.0
33
34    {
35        DifferentialPair<float2> dpuv = diffPair(float2(0.6f));
36        bwd_diff(fetch)(dpuv, float3(1.f));
37
38        outputBuffer[1] = dpuv.d.y; // Expect: 1.0 * 3 = 3
39    }
40
41    {
42        DifferentialPair<float2> dpuv = diffPair(float2(0.8f));
43        bwd_diff(fetch)(dpuv, float3(1.f));
44
45        outputBuffer[2] = dpuv.d.y; // Expect: 2.0 * 3 = 6
46    }
47
48    {
49        DifferentialPair<float2> dpuv = diffPair(float2(0.1f));
50        bwd_diff(fetch)(dpuv, float3(1.f));
51 
52        outputBuffer[3] = dpuv.d.y; // Expect: 3.0 * 3 = 9
53    }
54
55    {
56        DifferentialPair<float2> dpuv = diffPair(float2(0.4f));
57        bwd_diff(fetch)(dpuv, float3(1.f));
58
59        outputBuffer[4] = dpuv.d.y; // Expect: 4.0 * 3 = 12
60    }
61}