blob: 1fa4a28b397af6f1d75b8771eb1fac6941929edd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type
//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -output-using-type
//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj -output-using-type
//TEST_INPUT:ubuffer(data=[0 0 0], stride=4):out,name=outputBuffer
RWStructuredBuffer<float> outputBuffer;
static const uint kMaxSurfaceBounces = 2;
[BackwardDifferentiable]
void updatePathContrib(inout float3 result, float3 val)
{
result = result + val;
}
[BackwardDifferentiable]
float3 evalPath(uint2 pixel)
{
float3 result = float3(0.f);
float3 thp = float3(1.f);
[MaxIters(kMaxSurfaceBounces)]
for (int i = 0; i < kMaxSurfaceBounces; i++)
{
float3 neeContrib = float3(1.f);
updatePathContrib(result, thp * neeContrib);
thp = thp * float3(0.9f);
}
return result;
}
void execute(const uint2 pixel)
{
float3 dColor = float3(1.f);
__bwd_diff(evalPath)(pixel, dColor);
}
[numthreads(64, 1, 1)]
void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
{
execute(dispatchThreadID.xy);
}
|