MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/Falcor / PrefixSum

Method PrefixSum

Source/Falcor/Utils/Algorithm/PrefixSum.cpp:42–75  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

40} // namespace
41
42PrefixSum::PrefixSum(ref<Device> pDevice) : mpDevice(pDevice)
43{
44 // Create shaders and state.
45 DefineList defines = {{"GROUP_SIZE", std::to_string(kGroupSize)}};
46 mpPrefixSumGroupProgram = Program::createCompute(mpDevice, kShaderFile, "groupScan", defines);
47 mpPrefixSumGroupVars = ProgramVars::create(mpDevice, mpPrefixSumGroupProgram.get());
48 mpPrefixSumFinalizeProgram = Program::createCompute(mpDevice, kShaderFile, "finalizeGroups", defines);
49 mpPrefixSumFinalizeVars = ProgramVars::create(mpDevice, mpPrefixSumFinalizeProgram.get());
50
51 mpComputeState = ComputeState::create(mpDevice);
52
53 // Create and bind buffer for per-group sums and total sum.
54 mpPrefixGroupSums = mpDevice->createBuffer(
55 kGroupSize * sizeof(uint32_t),
56 ResourceBindFlags::ShaderResource | ResourceBindFlags::UnorderedAccess,
57 MemoryType::DeviceLocal,
58 nullptr
59 );
60 mpTotalSum = mpDevice->createBuffer(sizeof(uint32_t), ResourceBindFlags::UnorderedAccess, MemoryType::DeviceLocal, nullptr);
61 mpPrevTotalSum = mpDevice->createBuffer(sizeof(uint32_t), ResourceBindFlags::ShaderResource, MemoryType::DeviceLocal, nullptr);
62
63 {
64 auto var = mpPrefixSumGroupVars->getRootVar();
65 var["gPrefixGroupSums"] = mpPrefixGroupSums;
66 var["gTotalSum"] = mpTotalSum;
67 var["gPrevTotalSum"] = mpPrevTotalSum;
68 }
69 {
70 auto var = mpPrefixSumFinalizeVars->getRootVar();
71 var["gPrefixGroupSums"] = mpPrefixGroupSums;
72 var["gTotalSum"] = mpTotalSum;
73 var["gPrevTotalSum"] = mpPrevTotalSum;
74 }
75}
76
77void PrefixSum::execute(
78 RenderContext* pRenderContext,

Callers

nothing calls this directly

Calls 6

createComputeFunction · 0.85
createBufferMethod · 0.80
getRootVarMethod · 0.80
to_stringFunction · 0.50
createFunction · 0.50
getMethod · 0.45

Tested by

no test coverage detected