| 744 | } |
| 745 | |
| 746 | void Scene::createParameterBlock() |
| 747 | { |
| 748 | // Create parameter block. |
| 749 | ref<Program> pProgram = Program::createCompute(mpDevice, "Scene/SceneBlock.slang", "main", getSceneDefines()); |
| 750 | ref<const ParameterBlockReflection> pReflection = pProgram->getReflector()->getParameterBlock(kParameterBlockName); |
| 751 | FALCOR_ASSERT(pReflection); |
| 752 | |
| 753 | mpSceneBlock = ParameterBlock::create(mpDevice, pReflection); |
| 754 | auto var = mpSceneBlock->getRootVar(); |
| 755 | |
| 756 | // Create GPU buffers. |
| 757 | if (!mGeometryInstanceData.empty() && |
| 758 | (!mpGeometryInstancesBuffer || mpGeometryInstancesBuffer->getElementCount() < mGeometryInstanceData.size())) |
| 759 | { |
| 760 | mpGeometryInstancesBuffer = mpDevice->createStructuredBuffer(var[kGeometryInstanceBufferName], (uint32_t)mGeometryInstanceData.size(), ResourceBindFlags::ShaderResource, MemoryType::DeviceLocal, nullptr, false); |
| 761 | mpGeometryInstancesBuffer->setName("Scene::mpGeometryInstancesBuffer"); |
| 762 | } |
| 763 | |
| 764 | if (!mMeshDesc.empty() && |
| 765 | (!mpMeshesBuffer || mpMeshesBuffer->getElementCount() < mMeshDesc.size())) |
| 766 | { |
| 767 | mpMeshesBuffer = mpDevice->createStructuredBuffer(var[kMeshBufferName], (uint32_t)mMeshDesc.size(), ResourceBindFlags::ShaderResource, MemoryType::DeviceLocal, nullptr, false); |
| 768 | mpMeshesBuffer->setName("Scene::mpMeshesBuffer"); |
| 769 | } |
| 770 | |
| 771 | if (!mCurveDesc.empty() && |
| 772 | (!mpCurvesBuffer || mpCurvesBuffer->getElementCount() < mCurveDesc.size())) |
| 773 | { |
| 774 | mpCurvesBuffer = mpDevice->createStructuredBuffer(var[kCurveBufferName], (uint32_t)mCurveDesc.size(), ResourceBindFlags::ShaderResource, MemoryType::DeviceLocal, nullptr, false); |
| 775 | mpCurvesBuffer->setName("Scene::mpCurvesBuffer"); |
| 776 | } |
| 777 | |
| 778 | if (!mLights.empty() && |
| 779 | (!mpLightsBuffer || mpLightsBuffer->getElementCount() < mLights.size())) |
| 780 | { |
| 781 | mpLightsBuffer = mpDevice->createStructuredBuffer(var[kLightsBufferName], (uint32_t)mLights.size(), ResourceBindFlags::ShaderResource, MemoryType::DeviceLocal, nullptr, false); |
| 782 | mpLightsBuffer->setName("Scene::mpLightsBuffer"); |
| 783 | } |
| 784 | |
| 785 | if (!mGridVolumes.empty() && |
| 786 | (!mpGridVolumesBuffer || mpGridVolumesBuffer->getElementCount() < mGridVolumes.size())) |
| 787 | { |
| 788 | mpGridVolumesBuffer = mpDevice->createStructuredBuffer(var[kGridVolumesBufferName], (uint32_t)mGridVolumes.size(), ResourceBindFlags::ShaderResource, MemoryType::DeviceLocal, nullptr, false); |
| 789 | mpGridVolumesBuffer->setName("Scene::mpGridVolumesBuffer"); |
| 790 | } |
| 791 | } |
| 792 | |
| 793 | void Scene::bindParameterBlock() |
| 794 | { |
nothing calls this directly
no test coverage detected