Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2017-03-23 19:15:54 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2017-03-23 19:45:19 +0300
commita1348dde2ed27d0a8a1d62f9e17602857b1f19f1 (patch)
tree7dd48094a06a8043cc837d18a072c4c735ba46ad /intern/cycles/util
parent2a5d7b5b1e0345ce8ebf40c78ecd31eaeaa88f6d (diff)
Cycles: Fix speed regression on GPU
Avoid construction of temporary array and make utility function force-inlined. Additionally avoid calling float4_to_float3 twice. This brings render times to the same values as before current patch series.
Diffstat (limited to 'intern/cycles/util')
-rw-r--r--intern/cycles/util/util_math_intersect.h10
1 files changed, 5 insertions, 5 deletions
diff --git a/intern/cycles/util/util_math_intersect.h b/intern/cycles/util/util_math_intersect.h
index 4a052b8b9c6..5bd3a52dcea 100644
--- a/intern/cycles/util/util_math_intersect.h
+++ b/intern/cycles/util/util_math_intersect.h
@@ -153,13 +153,13 @@ void ray_triangle_intersect_precalc(float3 dir,
isect_precalc->kz = kz;
}
-ccl_device_inline bool ray_triangle_intersect(
+ccl_device_forceinline bool ray_triangle_intersect(
const TriangleIsectPrecalc *isect_precalc,
float3 ray_P, float ray_t,
#if defined(__KERNEL_AVX2__) && defined(__KERNEL_SSE__)
const ssef *ssef_verts,
#else
- const float3 *verts,
+ const float3 tri_a, const float3 tri_b, const float3 tri_c,
#endif
float *isect_u, float *isect_v, float *isect_t)
{
@@ -230,9 +230,9 @@ ccl_device_inline bool ray_triangle_intersect(
}
#else
/* Calculate vertices relative to ray origin. */
- const float3 A = verts[0] - ray_P;
- const float3 B = verts[1] - ray_P;
- const float3 C = verts[2] - ray_P;
+ const float3 A = make_float3(tri_a.x - ray_P.x, tri_a.y - ray_P.y, tri_a.z - ray_P.z);
+ const float3 B = make_float3(tri_b.x - ray_P.x, tri_b.y - ray_P.y, tri_b.z - ray_P.z);
+ const float3 C = make_float3(tri_c.x - ray_P.x, tri_c.y - ray_P.y, tri_c.z - ray_P.z);
const float A_kx = IDX(A, kx), A_ky = IDX(A, ky), A_kz = IDX(A, kz);
const float B_kx = IDX(B, kx), B_ky = IDX(B, ky), B_kz = IDX(B, kz);