| 64 | } |
| 65 | |
| 66 | void SceneGradients::createParameterBlock() |
| 67 | { |
| 68 | DefineList defines; |
| 69 | defines.add("SCENE_GRADIENTS_BLOCK"); |
| 70 | auto pPass = ComputePass::create(mpDevice, kShaderFilename, "main", defines); |
| 71 | auto pReflector = pPass->getProgram()->getReflector()->getParameterBlock(kSceneGradientsBlockName); |
| 72 | FALCOR_ASSERT(pReflector); |
| 73 | |
| 74 | // Create GPU buffers. |
| 75 | auto bindFlags = ResourceBindFlags::ShaderResource | ResourceBindFlags::UnorderedAccess; |
| 76 | for (size_t i = 0; i < size_t(GradientType::Count); i++) |
| 77 | { |
| 78 | if (mGradInfos[i].active) |
| 79 | { |
| 80 | mpGrads[i] = mpDevice->createBuffer( |
| 81 | mGradInfos[i].dim * sizeof(float), bindFlags | ResourceBindFlags::Shared, MemoryType::DeviceLocal, nullptr |
| 82 | ); |
| 83 | mpTmpGrads[i] = mpDevice->createBuffer( |
| 84 | mGradInfos[i].dim * mGradInfos[i].hashSize * sizeof(float), bindFlags, MemoryType::DeviceLocal, nullptr |
| 85 | ); |
| 86 | } |
| 87 | else |
| 88 | { |
| 89 | mpGrads[i] = mpTmpGrads[i] = nullptr; |
| 90 | } |
| 91 | } |
| 92 | |
| 93 | // Bind resources to parameter block. |
| 94 | mpSceneGradientsBlock = ParameterBlock::create(mpDevice, pReflector); |
| 95 | auto var = mpSceneGradientsBlock->getRootVar(); |
| 96 | for (size_t i = 0; i < size_t(GradientType::Count); i++) |
| 97 | { |
| 98 | var["gradDim"][i] = mGradInfos[i].dim; |
| 99 | var["hashSize"][i] = mGradInfos[i].hashSize; |
| 100 | var[kTmpGradsBufferName][i] = mpTmpGrads[i]; |
| 101 | } |
| 102 | } |
| 103 | |
| 104 | void SceneGradients::clearGrads(RenderContext* pRenderContext, GradientType _gradType) |
| 105 | { |
nothing calls this directly
no test coverage detected