[Bf-blender-cvs] [5155c16] cycles_memory_experiments: Cycles leaf nodes split: Fix crash when rendering scene without inner nodes

Sergey Sharybin noreply at git.blender.org
Tue Apr 14 14:32:03 CEST 2015


Commit: 5155c165b57a3d7d994c1d507e1ff9fb144c71c0
Author: Sergey Sharybin
Date:   Tue Apr 14 17:26:06 2015 +0500
Branches: cycles_memory_experiments
https://developer.blender.org/rB5155c165b57a3d7d994c1d507e1ff9fb144c71c0

Cycles leaf nodes split: Fix crash when rendering scene without inner nodes

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

M	intern/cycles/bvh/bvh.cpp
M	intern/cycles/render/mesh.cpp

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

diff --git a/intern/cycles/bvh/bvh.cpp b/intern/cycles/bvh/bvh.cpp
index 9b510d8..d1c3fee 100644
--- a/intern/cycles/bvh/bvh.cpp
+++ b/intern/cycles/bvh/bvh.cpp
@@ -521,7 +521,7 @@ RegularBVH::RegularBVH(const BVHParams& params_, const vector<Object*>& objects_
 void RegularBVH::pack_leaf(const BVHStackEntry& e, const LeafNode *leaf)
 {
 	float4 data[BVH_NODE_LEAF_SIZE];
-
+	memset(data, 0, sizeof(data));
 	if(leaf->num_triangles() == 1 && pack.prim_index[leaf->m_lo] == -1) {
 		/* object */
 		data[0].x = __int_as_float(~(leaf->m_lo));
@@ -730,7 +730,7 @@ QBVH::QBVH(const BVHParams& params_, const vector<Object*>& objects_)
 void QBVH::pack_leaf(const BVHStackEntry& e, const LeafNode *leaf)
 {
 	float4 data[BVH_QNODE_LEAF_SIZE];
-
+	memset(data, 0, sizeof(data));
 	if(leaf->num_triangles() == 1 && pack.prim_index[leaf->m_lo] == -1) {
 		/* object */
 		data[0].x = __int_as_float(~(leaf->m_lo));
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index aa1c4c8..e665fce 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -1101,6 +1101,8 @@ void MeshManager::device_update_bvh(Device *device, DeviceScene *dscene, Scene *
 	if(pack.nodes.size()) {
 		dscene->bvh_nodes.reference((float4*)&pack.nodes[0], pack.nodes.size());
 		device->tex_alloc("__bvh_nodes", dscene->bvh_nodes);
+	}
+	if(pack.leaf_nodes.size()) {
 		dscene->bvh_leaf_nodes.reference((float4*)&pack.leaf_nodes[0], pack.leaf_nodes.size());
 		device->tex_alloc("__bvh_leaf_nodes", dscene->bvh_leaf_nodes);
 	}




More information about the Bf-blender-cvs mailing list