diff --git a/intern/cycles/bvh/bvh.cpp b/intern/cycles/bvh/bvh.cpp index 15bd814b8d5..43b16a62207 100644 --- a/intern/cycles/bvh/bvh.cpp +++ b/intern/cycles/bvh/bvh.cpp @@ -794,7 +794,7 @@ void QBVH::pack_inner(const BVHStackEntry& e, const BVHStackEntry *en, int num) void QBVH::pack_nodes(const array& 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(); diff --git a/intern/cycles/bvh/bvh_node.cpp b/intern/cycles/bvh/bvh_node.cpp index 7cc9bd333b0..8294690da7d 100644 --- a/intern/cycles/bvh/bvh_node.cpp +++ b/intern/cycles/bvh/bvh_node.cpp @@ -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 */ } diff --git a/intern/cycles/bvh/bvh_node.h b/intern/cycles/bvh/bvh_node.h index a0d10a46bfc..1656bb367a4 100644 --- a/intern/cycles/bvh/bvh_node.h +++ b/intern/cycles/bvh/bvh_node.h @@ -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;