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:
authorSv. Lockal <lockalsash@gmail.com>2014-02-01 14:07:53 +0400
committerSv. Lockal <lockalsash@gmail.com>2014-02-01 14:07:53 +0400
commit1ff299b3179788cb82e1a660796101f7b57ceefc (patch)
treea53c090511d324f4e53a1e1233014f477fb72ded /intern/cycles/util/util_simd.h
parent62a3fe23234b931d01a53871ef6a1265fd0a9235 (diff)
Cycles: less instructions for CPU perlin code
Also move shuffle() in bvh traversal back (was accidentally lost in SSE hair revert)
Diffstat (limited to 'intern/cycles/util/util_simd.h')
-rw-r--r--intern/cycles/util/util_simd.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/intern/cycles/util/util_simd.h b/intern/cycles/util/util_simd.h
index c8f794adfb3..ac4e38ec1b8 100644
--- a/intern/cycles/util/util_simd.h
+++ b/intern/cycles/util/util_simd.h
@@ -79,11 +79,26 @@ template<size_t i0, size_t i1, size_t i2, size_t i3> ccl_device_inline const __m
return _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(a), _MM_SHUFFLE(i3, i2, i1, i0)));
}
+template<> __forceinline const __m128 shuffle<0, 1, 0, 1>(const __m128& a)
+{
+ return _mm_movelh_ps(a, a);
+}
+
+template<> __forceinline const __m128 shuffle<2, 3, 2, 3>(const __m128& a)
+{
+ return _mm_movehl_ps(a, a);
+}
+
template<size_t i0, size_t i1, size_t i2, size_t i3> ccl_device_inline const __m128i shuffle(const __m128i& a)
{
return _mm_shuffle_epi32(a, _MM_SHUFFLE(i3, i2, i1, i0));
}
+template<size_t i0, size_t i1, size_t i2, size_t i3> ccl_device_inline const __m128i shuffle(const __m128i& a, const __m128i& b)
+{
+ return _mm_castps_si128(_mm_shuffle_ps(_mm_castsi128_ps(a), _mm_castsi128_ps(b), _MM_SHUFFLE(i3, i2, i1, i0)));
+}
+
/* Blend 2 vectors based on mask: (a[i] & mask[i]) | (b[i] & ~mask[i]) */
#ifdef __KERNEL_SSE41__
ccl_device_inline const __m128 blend(const __m128& mask, const __m128& a, const __m128& b)