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.4 KiB45 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], stride=4):out,name=outputBuffer
6RWStructuredBuffer<float> outputBuffer;
7
8typedef DifferentialPair<float2> dpfloat2;
9typedef DifferentialPair<float3> dpfloat3;
10typedef DifferentialPair<float4> dpfloat4;
11
12[ForwardDifferentiable]
13float2 f(float3 x)
14{
15    return x.zy;
16}
17
18[ForwardDifferentiable]
19float2 g(float3 x, float4 y)
20{
21    float3 a = x + y.zyx;
22    float2 b = x.zx - y.yw;
23    return a.yz * b + 2 * x.xy * y.yz;
24}
25
26[numthreads(1, 1, 1)]
27void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID)
28{
29    {
30        float3 a = float3(2.0, 2.0, 2.0);
31        float3 da = float3(1.0, 0.5, 1.0);
32
33        outputBuffer[0] = __fwd_diff(f)(dpfloat3(a, da)).d.x;  // Expect: 1
34        outputBuffer[1] = __fwd_diff(f)(dpfloat3(a, da)).d.y;  // Expect: 0.5
35        
36        float3 x = float3(0.5, 2.0, 0.5);
37        float4 y = float4(-1.5, 1.0, 4.0, 2.0);
38        float3 dx = float3(1.0, 0.0, -1.0);
39        float4 dy = float4(0.0, 0.5, -0.25, 1.0);
40
41        outputBuffer[2] = __fwd_diff(g)(dpfloat3(x, dx), dpfloat4(y, dy)).d.x; // Expect: -2.25
42        outputBuffer[3] = __fwd_diff(g)(dpfloat3(x, dx), dpfloat4(y, dy)).d.y; // Expect: 0.5
43        
44    }
45}