forked from bartvdbraak/blender
Cycles: Use proper node counter to allocate QBVH nodes
Before all the nodes were counted and allocated, leading to situations when bunch of allocated memory is not used because reasonable amount of nodes are simply ignored.
This commit is contained in:
parent
345ed4dd10
commit
fe4905288d
@ -794,7 +794,7 @@ void QBVH::pack_inner(const BVHStackEntry& e, const BVHStackEntry *en, int num)
|
||||
|
||||
void QBVH::pack_nodes(const array<int>& prims, const BVHNode *root)
|
||||
{
|
||||
size_t node_size = root->getSubtreeSize(BVH_STAT_NODE_COUNT);
|
||||
size_t node_size = root->getSubtreeSize(BVH_STAT_QNODE_COUNT);
|
||||
|
||||
/* resize arrays */
|
||||
pack.nodes.clear();
|
||||
|
@ -47,6 +47,20 @@ int BVHNode::getSubtreeSize(BVH_STAT stat) const
|
||||
case BVH_STAT_CHILDNODE_COUNT:
|
||||
cnt = num_children();
|
||||
break;
|
||||
case BVH_STAT_QNODE_COUNT:
|
||||
cnt = 1;
|
||||
for(int i = 0; i < num_children(); i++) {
|
||||
BVHNode *node = get_child(i);
|
||||
if(node->is_leaf()) {
|
||||
cnt += 1;
|
||||
}
|
||||
else {
|
||||
for(int j = 0; j < node->num_children(); j++) {
|
||||
cnt += node->get_child(j)->getSubtreeSize(stat);
|
||||
}
|
||||
}
|
||||
}
|
||||
return cnt;
|
||||
default:
|
||||
assert(0); /* unknown mode */
|
||||
}
|
||||
|
@ -30,7 +30,8 @@ enum BVH_STAT
|
||||
BVH_STAT_INNER_COUNT,
|
||||
BVH_STAT_LEAF_COUNT,
|
||||
BVH_STAT_TRIANGLE_COUNT,
|
||||
BVH_STAT_CHILDNODE_COUNT
|
||||
BVH_STAT_CHILDNODE_COUNT,
|
||||
BVH_STAT_QNODE_COUNT,
|
||||
};
|
||||
|
||||
class BVHParams;
|
||||
|
Loading…
Reference in New Issue
Block a user