[Bf-blender-cvs] [da06dab] master: Cycles: Use pre-aligned triangle vertex coordinates for subsurface intersection

Sergey Sharybin noreply at git.blender.org
Wed Feb 4 10:52:17 CET 2015


Commit: da06dab4e5c9496f32bd01cf4453a3c9f0ffc5c8
Author: Sergey Sharybin
Date:   Wed Feb 4 14:49:19 2015 +0500
Branches: master
https://developer.blender.org/rBda06dab4e5c9496f32bd01cf4453a3c9f0ffc5c8

Cycles: Use pre-aligned triangle vertex coordinates for subsurface intersection

This gives small speedup (around 2% in quick tests) for ray scattering.

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

M	intern/cycles/kernel/geom/geom_triangle_intersect.h

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

diff --git a/intern/cycles/kernel/geom/geom_triangle_intersect.h b/intern/cycles/kernel/geom/geom_triangle_intersect.h
index 1465aa3..6f8c3e3 100644
--- a/intern/cycles/kernel/geom/geom_triangle_intersect.h
+++ b/intern/cycles/kernel/geom/geom_triangle_intersect.h
@@ -211,8 +211,9 @@ ccl_device_inline void triangle_intersect_subsurface(
 
 	/* Calculate vertices relative to ray origin. */
 	float3 tri[3];
-	int prim = kernel_tex_fetch(__prim_index, triAddr);
-	triangle_vertices(kg, prim, tri);
+	tri[0] = float4_to_float3(kernel_tex_fetch(__tri_woop, triAddr*TRI_NODE_SIZE+0));
+	tri[1] = float4_to_float3(kernel_tex_fetch(__tri_woop, triAddr*TRI_NODE_SIZE+1));
+	tri[2] = float4_to_float3(kernel_tex_fetch(__tri_woop, triAddr*TRI_NODE_SIZE+2));
 
 	const float3 A = tri[0] - P;
 	const float3 B = tri[1] - P;
@@ -389,8 +390,9 @@ ccl_device_inline float3 triangle_refine_subsurface(KernelGlobals *kg,
 	P = P + D*t;
 
 	float3 tri[3];
-	int prim = kernel_tex_fetch(__prim_index, isect->prim);
-	triangle_vertices(kg, prim, tri);
+	tri[0] = float4_to_float3(kernel_tex_fetch(__tri_woop, isect->prim*TRI_NODE_SIZE+0));
+	tri[1] = float4_to_float3(kernel_tex_fetch(__tri_woop, isect->prim*TRI_NODE_SIZE+1));
+	tri[2] = float4_to_float3(kernel_tex_fetch(__tri_woop, isect->prim*TRI_NODE_SIZE+2));
 
 	float3 edge1 = tri[0] - tri[2];
 	float3 edge2 = tri[1] - tri[2];




More information about the Bf-blender-cvs mailing list