2 * Copyright 2011, Blender Foundation.
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software Foundation,
16 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 #ifndef __SVM_TYPES_H__
20 #define __SVM_TYPES_H__
26 /* SVM stack has a fixed size */
27 #define SVM_STACK_SIZE 64
28 /* SVM stack offsets with this value indicate that it's not on the stack */
29 #define SVM_STACK_INVALID 255
33 /* note that we do not simply use 0, 1, 2, .. as values for these. this works
34 * around an obscure CUDA bug that happens when compiling for fermi. why it
35 * happens i have no idea, but consecutive values are problematic, maybe it
36 * generates an incorrect jump table. */
38 typedef enum NodeType {
40 NODE_CLOSURE_BSDF = 100,
41 NODE_CLOSURE_EMISSION = 200,
42 NODE_CLOSURE_BACKGROUND = 300,
43 NODE_CLOSURE_SET_WEIGHT = 400,
44 NODE_CLOSURE_WEIGHT = 500,
45 NODE_MIX_CLOSURE = 600,
47 NODE_TEX_IMAGE = 1000,
50 NODE_LIGHT_PATH = 1300,
57 NODE_EMISSION_WEIGHT = 2100,
58 NODE_TEX_GRADIENT = 2200,
59 NODE_TEX_VORONOI = 2300,
60 NODE_TEX_MUSGRAVE = 2400,
62 NODE_TEX_MAGIC = 2600,
63 NODE_TEX_NOISE = 3000,
64 NODE_SHADER_JUMP = 3100,
65 NODE_SET_DISPLACEMENT = 3200,
66 NODE_GEOMETRY_BUMP_DX = 3300,
67 NODE_GEOMETRY_BUMP_DY = 3400,
70 NODE_VECTOR_MATH = 3700,
72 NODE_TEX_COORD = 3900,
73 NODE_TEX_COORD_BUMP_DX = 4000,
74 NODE_TEX_COORD_BUMP_DY = 4100,
75 NODE_ADD_CLOSURE = 4200,
76 NODE_EMISSION_SET_WEIGHT_TOTAL = 4300,
77 NODE_ATTR_BUMP_DX = 4400,
78 NODE_ATTR_BUMP_DY = 4500,
79 NODE_TEX_ENVIRONMENT = 4600,
80 NODE_CLOSURE_HOLDOUT = 4700,
81 NODE_LAYER_WEIGHT = 4800,
82 NODE_CLOSURE_VOLUME = 4900,
83 NODE_SEPARATE_RGB = 5000,
84 NODE_COMBINE_RGB = 5100,
90 typedef enum NodeAttributeType {
95 typedef enum NodeGeometry {
104 typedef enum NodeLightPath {
111 NODE_LP_transmission,
115 typedef enum NodeTexCoord {
119 NODE_TEXCO_REFLECTION
122 typedef enum NodeMix {
143 typedef enum NodeMath {
153 NODE_MATH_ARCTANGENT,
160 NODE_MATH_GREATER_THAN
163 typedef enum NodeVectorMath {
164 NODE_VECTOR_MATH_ADD,
165 NODE_VECTOR_MATH_SUBTRACT,
166 NODE_VECTOR_MATH_AVERAGE,
167 NODE_VECTOR_MATH_DOT_PRODUCT,
168 NODE_VECTOR_MATH_CROSS_PRODUCT,
169 NODE_VECTOR_MATH_NORMALIZE
172 typedef enum NodeConvert {
178 typedef enum NodeDistanceMetric {
179 NODE_VORONOI_DISTANCE_SQUARED,
180 NODE_VORONOI_ACTUAL_DISTANCE,
181 NODE_VORONOI_MANHATTAN,
182 NODE_VORONOI_CHEBYCHEV,
183 NODE_VORONOI_MINKOVSKY_H,
184 NODE_VORONOI_MINKOVSKY_4,
185 NODE_VORONOI_MINKOVSKY
186 } NodeDistanceMetric;
188 typedef enum NodeNoiseBasis {
190 NODE_NOISE_VORONOI_F1,
191 NODE_NOISE_VORONOI_F2,
192 NODE_NOISE_VORONOI_F3,
193 NODE_NOISE_VORONOI_F4,
194 NODE_NOISE_VORONOI_F2_F1,
195 NODE_NOISE_VORONOI_CRACKLE,
196 NODE_NOISE_CELL_NOISE
199 typedef enum NodeWaveType {
205 typedef enum NodeMusgraveType {
206 NODE_MUSGRAVE_MULTIFRACTAL,
208 NODE_MUSGRAVE_HYBRID_MULTIFRACTAL,
209 NODE_MUSGRAVE_RIDGED_MULTIFRACTAL,
210 NODE_MUSGRAVE_HETERO_TERRAIN
213 typedef enum NodeWoodType {
218 typedef enum NodeBlendType {
220 NODE_BLEND_QUADRATIC,
224 NODE_BLEND_QUADRATIC_SPHERE,
228 typedef enum NodeBlendAxis {
229 NODE_BLEND_HORIZONTAL,
233 typedef enum NodeMarbleType {
239 typedef enum NodeStucciType {
245 typedef enum NodeVoronoiColoring {
246 NODE_VORONOI_INTENSITY,
248 } NodeVoronoiColoring;
250 typedef enum NodeBlendWeightType {
251 NODE_LAYER_WEIGHT_FRESNEL,
252 NODE_LAYER_WEIGHT_FACING
253 } NodeBlendWeightType;
255 typedef enum ShaderType {
258 SHADER_TYPE_DISPLACEMENT
263 typedef enum ClosureType {
265 CLOSURE_BSDF_DIFFUSE_ID,
266 CLOSURE_BSDF_OREN_NAYAR_ID,
267 CLOSURE_BSDF_TRANSLUCENT_ID,
268 CLOSURE_BSDF_REFLECTION_ID,
269 CLOSURE_BSDF_REFRACTION_ID,
270 CLOSURE_BSDF_GLASS_ID,
271 CLOSURE_BSDF_TRANSPARENT_ID,
272 CLOSURE_BSDF_MICROFACET_GGX_ID,
273 CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID,
274 CLOSURE_BSDF_MICROFACET_BECKMANN_ID,
275 CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID,
276 CLOSURE_BSDF_WARD_ID,
277 CLOSURE_BSDF_ASHIKHMIN_VELVET_ID,
278 CLOSURE_BSDF_WESTIN_BACKSCATTER_ID,
279 CLOSURE_BSDF_WESTIN_SHEEN_ID,
281 CLOSURE_BSSRDF_CUBIC_ID,
284 CLOSURE_BACKGROUND_ID,
286 CLOSURE_SUBSURFACE_ID,
289 CLOSURE_VOLUME_TRANSPARENT_ID,
290 CLOSURE_VOLUME_ISOTROPIC_ID,
295 /* watch this, being lazy with memory usage */
296 #define CLOSURE_IS_BSDF(type) (type <= CLOSURE_BSDF_WESTIN_SHEEN_ID)
297 #define CLOSURE_IS_VOLUME(type) (type >= CLOSURE_VOLUME_ID && type <= CLOSURE_VOLUME_ISOTROPIC_ID)
298 #define CLOSURE_IS_EMISSION(type) (type == CLOSURE_EMISSION_ID)
299 #define CLOSURE_IS_HOLDOUT(type) (type == CLOSURE_HOLDOUT_ID)
300 #define CLOSURE_IS_BACKGROUND(type) (type == CLOSURE_BACKGROUND_ID)
304 #endif /* __SVM_TYPES_H__ */