Cycles: Make all #include statements relative to cycles source directory
[blender.git] / intern / cycles / util / util_optimization.h
1 /*
2  * Copyright 2011-2013 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_OPTIMIZATION_H__
18 #define __UTIL_OPTIMIZATION_H__
19
20 #ifndef __KERNEL_GPU__
21
22 /* quiet unused define warnings */
23 #if defined(__KERNEL_SSE2__)  || \
24         defined(__KERNEL_SSE3__)  || \
25         defined(__KERNEL_SSSE3__) || \
26         defined(__KERNEL_SSE41__) || \
27         defined(__KERNEL_AVX__)   || \
28         defined(__KERNEL_AVX2__)
29         /* do nothing */
30 #endif
31
32 /* x86
33  *
34  * Compile a regular, SSE2 and SSE3 kernel. */
35
36 #if defined(i386) || defined(_M_IX86)
37
38 #  ifdef WITH_KERNEL_SSE2
39 #    define WITH_CYCLES_OPTIMIZED_KERNEL_SSE2
40 #  endif
41
42 #  ifdef WITH_KERNEL_SSE3
43 #    define WITH_CYCLES_OPTIMIZED_KERNEL_SSE3
44 #  endif
45
46 #endif  /* defined(i386) || defined(_M_IX86) */
47
48 /* x86-64
49  *
50  * Compile a regular (includes SSE2), SSE3, SSE 4.1, AVX and AVX2 kernel. */
51
52 #if defined(__x86_64__) || defined(_M_X64)
53
54 /* SSE2 is always available on x86-64 CPUs, so auto enable */
55 #  define __KERNEL_SSE2__
56
57 /* no SSE2 kernel on x86-64, part of regular kernel */
58 #  ifdef WITH_KERNEL_SSE3
59 #    define WITH_CYCLES_OPTIMIZED_KERNEL_SSE3
60 #  endif
61
62 #  ifdef WITH_KERNEL_SSE41
63 #    define WITH_CYCLES_OPTIMIZED_KERNEL_SSE41
64 #  endif
65
66 #  ifdef WITH_KERNEL_AVX
67 #    define WITH_CYCLES_OPTIMIZED_KERNEL_AVX
68 #  endif
69
70 #  ifdef WITH_KERNEL_AVX2
71 #    define WITH_CYCLES_OPTIMIZED_KERNEL_AVX2
72 #  endif
73
74 #endif  /* defined(__x86_64__) || defined(_M_X64) */
75
76 /* SSE Experiment
77  *
78  * This is disabled code for an experiment to use SSE types globally for types
79  * such as float3 and float4. Currently this gives an overall slowdown. */
80
81 #if 0
82 #  define __KERNEL_SSE__
83 #  ifndef __KERNEL_SSE2__
84 #    define __KERNEL_SSE2__
85 #  endif
86 #  ifndef __KERNEL_SSE3__
87 #    define __KERNEL_SSE3__
88 #  endif
89 #  ifndef __KERNEL_SSSE3__
90 #    define __KERNEL_SSSE3__
91 #  endif
92 #  ifndef __KERNEL_SSE4__
93 #    define __KERNEL_SSE4__
94 #  endif
95 #endif
96
97 /* SSE Intrinsics includes
98  *
99  * We assume __KERNEL_SSEX__ flags to have been defined at this point */
100
101 /* SSE intrinsics headers */
102 #ifndef FREE_WINDOWS64
103
104 #ifdef _MSC_VER
105 #  include <intrin.h>
106 #elif (defined(__x86_64__) || defined(__i386__))
107 #  include <x86intrin.h>
108 #endif
109
110 #else
111
112 /* MinGW64 has conflicting declarations for these SSE headers in <windows.h>.
113  * Since we can't avoid including <windows.h>, better only include that */
114 #include "util/util_windows.h"
115
116 #endif
117
118 #endif
119
120 #endif /* __UTIL_OPTIMIZATION_H__ */
121