ClangFormat: apply to source, most of intern
[blender.git] / intern / cycles / util / util_types_float3_impl.h
1 /*
2  * Copyright 2011-2017 Blender Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef __UTIL_TYPES_FLOAT3_IMPL_H__
18 #define __UTIL_TYPES_FLOAT3_IMPL_H__
19
20 #ifndef __UTIL_TYPES_H__
21 #  error "Do not include this file directly, include util_types.h instead."
22 #endif
23
24 #ifndef __KERNEL_GPU__
25 #  include <cstdio>
26 #endif
27
28 CCL_NAMESPACE_BEGIN
29
30 #ifndef __KERNEL_GPU__
31 #  ifdef __KERNEL_SSE__
32 __forceinline float3::float3()
33 {
34 }
35
36 __forceinline float3::float3(const float3 &a) : m128(a.m128)
37 {
38 }
39
40 __forceinline float3::float3(const __m128 &a) : m128(a)
41 {
42 }
43
44 __forceinline float3::operator const __m128 &() const
45 {
46   return m128;
47 }
48
49 __forceinline float3::operator __m128 &()
50 {
51   return m128;
52 }
53
54 __forceinline float3 &float3::operator=(const float3 &a)
55 {
56   m128 = a.m128;
57   return *this;
58 }
59 #  endif /* __KERNEL_SSE__ */
60
61 __forceinline float float3::operator[](int i) const
62 {
63   util_assert(i >= 0);
64   util_assert(i < 3);
65   return *(&x + i);
66 }
67
68 __forceinline float &float3::operator[](int i)
69 {
70   util_assert(i >= 0);
71   util_assert(i < 3);
72   return *(&x + i);
73 }
74
75 ccl_device_inline float3 make_float3(float f)
76 {
77 #  ifdef __KERNEL_SSE__
78   float3 a(_mm_set1_ps(f));
79 #  else
80   float3 a = {f, f, f, f};
81 #  endif
82   return a;
83 }
84
85 ccl_device_inline float3 make_float3(float x, float y, float z)
86 {
87 #  ifdef __KERNEL_SSE__
88   float3 a(_mm_set_ps(0.0f, z, y, x));
89 #  else
90   float3 a = {x, y, z, 0.0f};
91 #  endif
92   return a;
93 }
94
95 ccl_device_inline void print_float3(const char *label, const float3 &a)
96 {
97   printf("%s: %.8f %.8f %.8f\n", label, (double)a.x, (double)a.y, (double)a.z);
98 }
99 #endif /* __KERNEL_GPU__ */
100
101 CCL_NAMESPACE_END
102
103 #endif /* __UTIL_TYPES_FLOAT3_IMPL_H__ */