Cycles: Expose image image extension mapping to the image manager
[blender.git] / intern / cycles / kernel / kernel.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 __KERNEL_H__
18 #define __KERNEL_H__
19
20 /* CPU Kernel Interface */
21
22 #include "util_types.h"
23
24 CCL_NAMESPACE_BEGIN
25
26 struct KernelGlobals;
27
28 KernelGlobals *kernel_globals_create();
29 void kernel_globals_free(KernelGlobals *kg);
30
31 void *kernel_osl_memory(KernelGlobals *kg);
32 bool kernel_osl_use(KernelGlobals *kg);
33
34 void kernel_const_copy(KernelGlobals *kg, const char *name, void *host, size_t size);
35 void kernel_tex_copy(KernelGlobals *kg,
36                      const char *name,
37                      device_ptr mem,
38                      size_t width,
39                      size_t height,
40                      size_t depth,
41                      InterpolationType interpolation=INTERPOLATION_LINEAR,
42                      bool periodic = true);
43
44 void kernel_cpu_path_trace(KernelGlobals *kg, float *buffer, unsigned int *rng_state,
45         int sample, int x, int y, int offset, int stride);
46 void kernel_cpu_convert_to_byte(KernelGlobals *kg, uchar4 *rgba, float *buffer,
47         float sample_scale, int x, int y, int offset, int stride);
48 void kernel_cpu_convert_to_half_float(KernelGlobals *kg, uchar4 *rgba, float *buffer,
49         float sample_scale, int x, int y, int offset, int stride);
50 void kernel_cpu_shader(KernelGlobals *kg, uint4 *input, float4 *output,
51         int type, int i, int offset, int sample);
52
53 #ifdef WITH_CYCLES_OPTIMIZED_KERNEL_SSE2
54 void kernel_cpu_sse2_path_trace(KernelGlobals *kg, float *buffer, unsigned int *rng_state,
55         int sample, int x, int y, int offset, int stride);
56 void kernel_cpu_sse2_convert_to_byte(KernelGlobals *kg, uchar4 *rgba, float *buffer,
57         float sample_scale, int x, int y, int offset, int stride);
58 void kernel_cpu_sse2_convert_to_half_float(KernelGlobals *kg, uchar4 *rgba, float *buffer,
59         float sample_scale, int x, int y, int offset, int stride);
60 void kernel_cpu_sse2_shader(KernelGlobals *kg, uint4 *input, float4 *output,
61         int type, int i, int offset, int sample);
62 #endif
63
64 #ifdef WITH_CYCLES_OPTIMIZED_KERNEL_SSE3
65 void kernel_cpu_sse3_path_trace(KernelGlobals *kg, float *buffer, unsigned int *rng_state,
66         int sample, int x, int y, int offset, int stride);
67 void kernel_cpu_sse3_convert_to_byte(KernelGlobals *kg, uchar4 *rgba, float *buffer,
68         float sample_scale, int x, int y, int offset, int stride);
69 void kernel_cpu_sse3_convert_to_half_float(KernelGlobals *kg, uchar4 *rgba, float *buffer,
70         float sample_scale, int x, int y, int offset, int stride);
71 void kernel_cpu_sse3_shader(KernelGlobals *kg, uint4 *input, float4 *output,
72         int type, int i, int offset, int sample);
73 #endif
74
75 #ifdef WITH_CYCLES_OPTIMIZED_KERNEL_SSE41
76 void kernel_cpu_sse41_path_trace(KernelGlobals *kg, float *buffer, unsigned int *rng_state,
77         int sample, int x, int y, int offset, int stride);
78 void kernel_cpu_sse41_convert_to_byte(KernelGlobals *kg, uchar4 *rgba, float *buffer,
79         float sample_scale, int x, int y, int offset, int stride);
80 void kernel_cpu_sse41_convert_to_half_float(KernelGlobals *kg, uchar4 *rgba, float *buffer,
81         float sample_scale, int x, int y, int offset, int stride);
82 void kernel_cpu_sse41_shader(KernelGlobals *kg, uint4 *input, float4 *output,
83         int type, int i, int offset, int sample);
84 #endif
85
86 #ifdef WITH_CYCLES_OPTIMIZED_KERNEL_AVX
87 void kernel_cpu_avx_path_trace(KernelGlobals *kg, float *buffer, unsigned int *rng_state,
88         int sample, int x, int y, int offset, int stride);
89 void kernel_cpu_avx_convert_to_byte(KernelGlobals *kg, uchar4 *rgba, float *buffer,
90         float sample_scale, int x, int y, int offset, int stride);
91 void kernel_cpu_avx_convert_to_half_float(KernelGlobals *kg, uchar4 *rgba, float *buffer,
92         float sample_scale, int x, int y, int offset, int stride);
93 void kernel_cpu_avx_shader(KernelGlobals *kg, uint4 *input, float4 *output,
94         int type, int i, int offset, int sample);
95 #endif
96
97 #ifdef WITH_CYCLES_OPTIMIZED_KERNEL_AVX2
98 void kernel_cpu_avx2_path_trace(KernelGlobals *kg, float *buffer, unsigned int *rng_state,
99         int sample, int x, int y, int offset, int stride);
100 void kernel_cpu_avx2_convert_to_byte(KernelGlobals *kg, uchar4 *rgba, float *buffer,
101         float sample_scale, int x, int y, int offset, int stride);
102 void kernel_cpu_avx2_convert_to_half_float(KernelGlobals *kg, uchar4 *rgba, float *buffer,
103         float sample_scale, int x, int y, int offset, int stride);
104 void kernel_cpu_avx2_shader(KernelGlobals *kg, uint4 *input, float4 *output,
105         int type, int i, int offset, int sample);
106 #endif
107
108 CCL_NAMESPACE_END
109
110 #endif /* __KERNEL_H__ */
111