[Bf-blender-cvs] [c3ddf1e] cycles_bvh: Cycles: Fixes for regular BVH since previous commit

Sergey Sharybin noreply at git.blender.org
Tue Jun 14 14:56:30 CEST 2016


Commit: c3ddf1eb94c9fe6f943539dcc0de0e63e6a28818
Author: Sergey Sharybin
Date:   Tue Jun 14 14:56:38 2016 +0200
Branches: cycles_bvh
https://developer.blender.org/rBc3ddf1eb94c9fe6f943539dcc0de0e63e6a28818

Cycles: Fixes for regular BVH since previous commit

===================================================================

M	intern/cycles/bvh/bvh.cpp

===================================================================

diff --git a/intern/cycles/bvh/bvh.cpp b/intern/cycles/bvh/bvh.cpp
index 13f453f..44b1f25 100644
--- a/intern/cycles/bvh/bvh.cpp
+++ b/intern/cycles/bvh/bvh.cpp
@@ -464,7 +464,7 @@ void RegularBVH::pack_node(int idx,
 		make_int4(c0, c1, visibility0, visibility1)
 	};
 
-	memcpy(&pack.nodes[idx * BVH_NODE_SIZE], data, sizeof(int4)*BVH_NODE_SIZE);
+	memcpy(&pack.nodes[idx], data, sizeof(int4)*BVH_NODE_SIZE);
 }
 
 void RegularBVH::pack_unaligned_leaf(const BVHStackEntry& e,
@@ -549,9 +549,7 @@ void RegularBVH::pack_unaligned_node(int idx,
 	                      __int_as_float(visibility0),
 	                      __int_as_float(visibility1));
 
-	memcpy(&pack.nodes[idx * BVH_UNALIGNED_NODE_SIZE],
-	       data,
-	       sizeof(float4)*BVH_UNALIGNED_NODE_SIZE);
+	memcpy(&pack.nodes[idx], data, sizeof(float4)*BVH_UNALIGNED_NODE_SIZE);
 }
 
 void RegularBVH::pack_nodes(const BVHNode *root)
@@ -578,10 +576,13 @@ void RegularBVH::pack_nodes(const BVHNode *root)
 
 	vector<BVHStackEntry> stack;
 	stack.reserve(BVHParams::MAX_DEPTH*2);
-	if(root->is_leaf())
+	if(root->is_leaf()) {
 		stack.push_back(BVHStackEntry(root, nextLeafNodeIdx++));
-	else
-		stack.push_back(BVHStackEntry(root, nextNodeIdx++));
+	}
+	else {
+		stack.push_back(BVHStackEntry(root, nextNodeIdx));
+		nextNodeIdx += nsize;
+	}
 
 	while(stack.size()) {
 		BVHStackEntry e = stack.back();
@@ -599,10 +600,19 @@ void RegularBVH::pack_nodes(const BVHNode *root)
 		}
 		else {
 			/* innner node */
-			int idx0 = (e.node->get_child(0)->is_leaf())? (nextLeafNodeIdx++) : (nextNodeIdx++);
-			int idx1 = (e.node->get_child(1)->is_leaf())? (nextLeafNodeIdx++) : (nextNodeIdx++);
-			stack.push_back(BVHStackEntry(e.node->get_child(0), idx0));
-			stack.push_back(BVHStackEntry(e.node->get_child(1), idx1));
+			int idx[2];
+			for (int i = 0; i < 2; ++i) {
+				if (e.node->get_child(i)->is_leaf()) {
+					idx[i] = nextLeafNodeIdx++;
+				}
+				else {
+					idx[i] = nextNodeIdx;
+					nextNodeIdx += nsize;
+				}
+			}
+
+			stack.push_back(BVHStackEntry(e.node->get_child(0), idx[0]));
+			stack.push_back(BVHStackEntry(e.node->get_child(1), idx[1]));
 			if(params.use_unaligned_nodes) {
 				pack_unaligned_inner(e, stack[stack.size()-2], stack[stack.size()-1]);
 			}




More information about the Bf-blender-cvs mailing list