| 12 | namespace isa |
| 13 | { |
| 14 | PrimInfo createPrimRefArray(Geometry* geometry, unsigned int geomID, const size_t numPrimRefs, mvector<PrimRef>& prims, BuildProgressMonitor& progressMonitor) |
| 15 | { |
| 16 | ParallelPrefixSumState<PrimInfo> pstate; |
| 17 | |
| 18 | /* first try */ |
| 19 | progressMonitor(0); |
| 20 | PrimInfo pinfo = parallel_prefix_sum( pstate, size_t(0), geometry->size(), size_t(1024), PrimInfo(empty), [&](const range<size_t>& r, const PrimInfo& base) -> PrimInfo { |
| 21 | return geometry->createPrimRefArray(prims,r,r.begin(),geomID); |
| 22 | }, [](const PrimInfo& a, const PrimInfo& b) -> PrimInfo { return PrimInfo::merge(a,b); }); |
| 23 | |
| 24 | /* if we need to filter out geometry, run again */ |
| 25 | if (pinfo.size() != numPrimRefs) |
| 26 | { |
| 27 | progressMonitor(0); |
| 28 | pinfo = parallel_prefix_sum( pstate, size_t(0), geometry->size(), size_t(1024), PrimInfo(empty), [&](const range<size_t>& r, const PrimInfo& base) -> PrimInfo { |
| 29 | return geometry->createPrimRefArray(prims,r,base.size(),geomID); |
| 30 | }, [](const PrimInfo& a, const PrimInfo& b) -> PrimInfo { return PrimInfo::merge(a,b); }); |
| 31 | } |
| 32 | return pinfo; |
| 33 | } |
| 34 | |
| 35 | PrimInfo createPrimRefArray(Scene* scene, Geometry::GTypeMask types, bool mblur, const size_t numPrimRefs, mvector<PrimRef>& prims, BuildProgressMonitor& progressMonitor) |
| 36 | { |
no test coverage detected