ClangFormat: apply to source, most of intern
[blender.git] / intern / cycles / util / util_types_int3_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_INT3_IMPL_H__
18 #define __UTIL_TYPES_INT3_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 int3::int3()
33 {
34 }
35
36 __forceinline int3::int3(const __m128i &a) : m128(a)
37 {
38 }
39
40 __forceinline int3::int3(const int3 &a) : m128(a.m128)
41 {
42 }
43
44 __forceinline int3::operator const __m128i &() const
45 {
46   return m128;
47 }
48
49 __forceinline int3::operator __m128i &()
50 {
51   return m128;
52 }
53
54 __forceinline int3 &int3::operator=(const int3 &a)
55 {
56   m128 = a.m128;
57   return *this;
58 }
59 #  endif /* __KERNEL_SSE__ */
60
61 __forceinline int int3::operator[](int i) const
62 {
63   util_assert(i >= 0);
64   util_assert(i < 3);
65   return *(&x + i);
66 }
67
68 __forceinline int &int3::operator[](int i)
69 {
70   util_assert(i >= 0);
71   util_assert(i < 3);
72   return *(&x + i);
73 }
74
75 ccl_device_inline int3 make_int3(int i)
76 {
77 #  ifdef __KERNEL_SSE__
78   int3 a(_mm_set1_epi32(i));
79 #  else
80   int3 a = {i, i, i, i};
81 #  endif
82   return a;
83 }
84
85 ccl_device_inline int3 make_int3(int x, int y, int z)
86 {
87 #  ifdef __KERNEL_SSE__
88   int3 a(_mm_set_epi32(0, z, y, x));
89 #  else
90   int3 a = {x, y, z, 0};
91 #  endif
92
93   return a;
94 }
95
96 ccl_device_inline void print_int3(const char *label, const int3 &a)
97 {
98   printf("%s: %d %d %d\n", label, a.x, a.y, a.z);
99 }
100 #endif /* __KERNEL_GPU__ */
101
102 CCL_NAMESPACE_END
103
104 #endif /* __UTIL_TYPES_INT3_IMPL_H__ */