[Bf-blender-cvs] [7d1be1a] cycles_bvh: Cycles BVH: Don't store w component of transform for regular bvh unaligned nodes

Sergey Sharybin noreply at git.blender.org
Wed Jul 6 12:50:12 CEST 2016


Commit: 7d1be1a9cc9614762782d9f367cd8dd9b488906e
Author: Sergey Sharybin
Date:   Wed Jul 6 12:39:01 2016 +0200
Branches: cycles_bvh
https://developer.blender.org/rB7d1be1a9cc9614762782d9f367cd8dd9b488906e

Cycles BVH: Don't store w component of transform for regular bvh unaligned nodes

Saves quite some memory (467MB vs 528MB with koro.blend file).

Once again addressing review from Brecht.

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

M	intern/cycles/bvh/bvh.cpp
M	intern/cycles/bvh/bvh.h
M	intern/cycles/kernel/geom/geom_bvh_nodes.h

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

diff --git a/intern/cycles/bvh/bvh.cpp b/intern/cycles/bvh/bvh.cpp
index 37d72fc..f127e26 100644
--- a/intern/cycles/bvh/bvh.cpp
+++ b/intern/cycles/bvh/bvh.cpp
@@ -518,11 +518,9 @@ void RegularBVH::pack_unaligned_node(int idx,
 	data[1] = space0.x;
 	data[2] = space0.y;
 	data[3] = space0.z;
-	data[4] = space0.w;
-	data[5] = space1.x;
-	data[6] = space1.y;
-	data[7] = space1.z;
-	data[8] = space1.w;
+	data[4] = space1.x;
+	data[5] = space1.y;
+	data[6] = space1.z;
 
 	memcpy(&pack.nodes[idx], data, sizeof(float4)*BVH_UNALIGNED_NODE_SIZE);
 }
diff --git a/intern/cycles/bvh/bvh.h b/intern/cycles/bvh/bvh.h
index 9ae1559..1675207 100644
--- a/intern/cycles/bvh/bvh.h
+++ b/intern/cycles/bvh/bvh.h
@@ -40,7 +40,7 @@ class Progress;
 #define BVH_ALIGN		4096
 #define TRI_NODE_SIZE	3
 
-#define BVH_UNALIGNED_NODE_SIZE 9
+#define BVH_UNALIGNED_NODE_SIZE 7
 #define BVH_UNALIGNED_QNODE_SIZE 14
 
 /* Packed BVH
diff --git a/intern/cycles/kernel/geom/geom_bvh_nodes.h b/intern/cycles/kernel/geom/geom_bvh_nodes.h
index 98bd25d..436ddf3 100644
--- a/intern/cycles/kernel/geom/geom_bvh_nodes.h
+++ b/intern/cycles/kernel/geom/geom_bvh_nodes.h
@@ -19,11 +19,11 @@ ccl_device_inline Transform bvh_unaligned_node_fetch_space(KernelGlobals *kg,
                                                            int child)
 {
 	Transform space;
-	const int child_addr = nodeAddr + child * 4;
+	const int child_addr = nodeAddr + child * 3;
 	space.x = kernel_tex_fetch(__bvh_nodes, child_addr+1);
 	space.y = kernel_tex_fetch(__bvh_nodes, child_addr+2);
 	space.z = kernel_tex_fetch(__bvh_nodes, child_addr+3);
-	space.w = kernel_tex_fetch(__bvh_nodes, child_addr+4);
+	space.w = make_float4(0.0f, 0.0f, 0.0f, 1.0f);
 	return space;
 }




More information about the Bf-blender-cvs mailing list