2 * Copyright 2011-2013 Blender Foundation
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 #ifndef __SVM_TYPES_H__
18 #define __SVM_TYPES_H__
24 /* SVM stack has a fixed size */
25 #define SVM_STACK_SIZE 255
26 /* SVM stack offsets with this value indicate that it's not on the stack */
27 #define SVM_STACK_INVALID 255
29 #define SVM_BUMP_EVAL_STATE_SIZE 9
33 /* Known frequencies of used nodes, used for selective nodes compilation
34 * in the kernel. Currently only affects split OpenCL kernel.
36 * Keep as defines so it's easy to check which nodes are to be compiled
39 * Lower the number of group more often the node is used.
41 #define NODE_GROUP_LEVEL_0 0
42 #define NODE_GROUP_LEVEL_1 1
43 #define NODE_GROUP_LEVEL_2 2
44 #define NODE_GROUP_LEVEL_3 3
45 #define NODE_GROUP_LEVEL_MAX NODE_GROUP_LEVEL_3
47 #define NODE_FEATURE_VOLUME (1 << 0)
48 #define NODE_FEATURE_HAIR (1 << 1)
49 #define NODE_FEATURE_BUMP (1 << 2)
50 #define NODE_FEATURE_BUMP_STATE (1 << 3)
51 /* TODO(sergey): Consider using something like ((uint)(-1)).
52 * Need to check carefully operand types around usage of this
55 #define NODE_FEATURE_ALL (NODE_FEATURE_VOLUME|NODE_FEATURE_HAIR|NODE_FEATURE_BUMP|NODE_FEATURE_BUMP_STATE)
57 typedef enum ShaderNodeType {
60 NODE_CLOSURE_EMISSION,
61 NODE_CLOSURE_BACKGROUND,
62 NODE_CLOSURE_SET_WEIGHT,
90 NODE_SET_DISPLACEMENT,
91 NODE_GEOMETRY_BUMP_DX,
92 NODE_GEOMETRY_BUMP_DY,
96 NODE_VECTOR_TRANSFORM,
99 NODE_TEX_COORD_BUMP_DX,
100 NODE_TEX_COORD_BUMP_DY,
103 NODE_TEX_ENVIRONMENT,
104 NODE_CLOSURE_HOLDOUT,
107 NODE_SEPARATE_VECTOR,
126 NODE_CLOSURE_SET_NORMAL,
127 NODE_CLOSURE_AMBIENT_OCCLUSION,
133 NODE_ENTER_BUMP_EVAL,
134 NODE_LEAVE_BUMP_EVAL,
139 typedef enum NodeAttributeType {
145 typedef enum NodeGeometry {
154 typedef enum NodeObjectInfo {
155 NODE_INFO_OB_LOCATION,
161 typedef enum NodeParticleInfo {
164 NODE_INFO_PAR_LIFETIME,
165 NODE_INFO_PAR_LOCATION,
166 NODE_INFO_PAR_ROTATION,
168 NODE_INFO_PAR_VELOCITY,
169 NODE_INFO_PAR_ANGULAR_VELOCITY
172 typedef enum NodeHairInfo {
173 NODE_INFO_CURVE_IS_STRAND,
174 NODE_INFO_CURVE_INTERCEPT,
175 NODE_INFO_CURVE_THICKNESS,
176 /*fade for minimum hair width transpency*/
177 /*NODE_INFO_CURVE_FADE,*/
178 NODE_INFO_CURVE_TANGENT_NORMAL
181 typedef enum NodeLightPath {
188 NODE_LP_transmission,
189 NODE_LP_volume_scatter,
195 NODE_LP_ray_transparent,
196 NODE_LP_ray_transmission,
199 typedef enum NodeLightFalloff {
200 NODE_LIGHT_FALLOFF_QUADRATIC,
201 NODE_LIGHT_FALLOFF_LINEAR,
202 NODE_LIGHT_FALLOFF_CONSTANT
205 typedef enum NodeTexCoord {
210 NODE_TEXCO_REFLECTION,
211 NODE_TEXCO_DUPLI_GENERATED,
213 NODE_TEXCO_VOLUME_GENERATED
216 typedef enum NodeMix {
235 NODE_MIX_CLAMP /* used for the clamp UI option */
238 typedef enum NodeMath {
248 NODE_MATH_ARCTANGENT,
255 NODE_MATH_GREATER_THAN,
258 NODE_MATH_CLAMP /* used for the clamp UI option */
261 typedef enum NodeVectorMath {
262 NODE_VECTOR_MATH_ADD,
263 NODE_VECTOR_MATH_SUBTRACT,
264 NODE_VECTOR_MATH_AVERAGE,
265 NODE_VECTOR_MATH_DOT_PRODUCT,
266 NODE_VECTOR_MATH_CROSS_PRODUCT,
267 NODE_VECTOR_MATH_NORMALIZE
270 typedef enum NodeVectorTransformType {
271 NODE_VECTOR_TRANSFORM_TYPE_VECTOR,
272 NODE_VECTOR_TRANSFORM_TYPE_POINT,
273 NODE_VECTOR_TRANSFORM_TYPE_NORMAL
274 } NodeVectorTransformType;
276 typedef enum NodeVectorTransformConvertSpace {
277 NODE_VECTOR_TRANSFORM_CONVERT_SPACE_WORLD,
278 NODE_VECTOR_TRANSFORM_CONVERT_SPACE_OBJECT,
279 NODE_VECTOR_TRANSFORM_CONVERT_SPACE_CAMERA
280 } NodeVectorTransformConvertSpace;
282 typedef enum NodeConvert {
293 typedef enum NodeMusgraveType {
294 NODE_MUSGRAVE_MULTIFRACTAL,
296 NODE_MUSGRAVE_HYBRID_MULTIFRACTAL,
297 NODE_MUSGRAVE_RIDGED_MULTIFRACTAL,
298 NODE_MUSGRAVE_HETERO_TERRAIN
301 typedef enum NodeWaveType {
306 typedef enum NodeWaveProfiles {
307 NODE_WAVE_PROFILE_SIN,
308 NODE_WAVE_PROFILE_SAW,
311 typedef enum NodeSkyType {
316 typedef enum NodeGradientType {
318 NODE_BLEND_QUADRATIC,
322 NODE_BLEND_QUADRATIC_SPHERE,
326 typedef enum NodeVoronoiColoring {
327 NODE_VORONOI_INTENSITY,
329 } NodeVoronoiColoring;
331 typedef enum NodeBlendWeightType {
332 NODE_LAYER_WEIGHT_FRESNEL,
333 NODE_LAYER_WEIGHT_FACING
334 } NodeBlendWeightType;
336 typedef enum NodeTangentDirectionType {
339 } NodeTangentDirectionType;
341 typedef enum NodeTangentAxis {
347 typedef enum NodeNormalMapSpace {
348 NODE_NORMAL_MAP_TANGENT,
349 NODE_NORMAL_MAP_OBJECT,
350 NODE_NORMAL_MAP_WORLD,
351 NODE_NORMAL_MAP_BLENDER_OBJECT,
352 NODE_NORMAL_MAP_BLENDER_WORLD,
353 } NodeNormalMapSpace;
355 typedef enum NodeImageColorSpace {
356 NODE_COLOR_SPACE_NONE = 0,
357 NODE_COLOR_SPACE_COLOR = 1,
358 } NodeImageColorSpace;
360 typedef enum NodeImageProjection {
361 NODE_IMAGE_PROJ_FLAT = 0,
362 NODE_IMAGE_PROJ_BOX = 1,
363 NODE_IMAGE_PROJ_SPHERE = 2,
364 NODE_IMAGE_PROJ_TUBE = 3,
365 } NodeImageProjection;
367 typedef enum NodeEnvironmentProjection {
368 NODE_ENVIRONMENT_EQUIRECTANGULAR = 0,
369 NODE_ENVIRONMENT_MIRROR_BALL = 1,
370 } NodeEnvironmentProjection;
372 typedef enum NodeBumpOffset {
373 NODE_BUMP_OFFSET_CENTER,
378 typedef enum NodeTexVoxelSpace {
379 NODE_TEX_VOXEL_SPACE_OBJECT = 0,
380 NODE_TEX_VOXEL_SPACE_WORLD = 1,
383 typedef enum ShaderType {
386 SHADER_TYPE_DISPLACEMENT,
392 typedef enum ClosureType {
393 /* Special type, flags generic node as a non-BSDF. */
399 CLOSURE_BSDF_DIFFUSE_ID,
400 CLOSURE_BSDF_OREN_NAYAR_ID,
401 CLOSURE_BSDF_DIFFUSE_RAMP_ID,
402 CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID,
403 CLOSURE_BSDF_PRINCIPLED_SHEEN_ID,
404 CLOSURE_BSDF_DIFFUSE_TOON_ID,
407 CLOSURE_BSDF_REFLECTION_ID,
408 CLOSURE_BSDF_MICROFACET_GGX_ID,
409 CLOSURE_BSDF_MICROFACET_GGX_FRESNEL_ID,
410 CLOSURE_BSDF_MICROFACET_GGX_CLEARCOAT_ID,
411 CLOSURE_BSDF_MICROFACET_BECKMANN_ID,
412 CLOSURE_BSDF_MICROFACET_MULTI_GGX_ID,
413 CLOSURE_BSDF_MICROFACET_MULTI_GGX_FRESNEL_ID,
414 CLOSURE_BSDF_ASHIKHMIN_SHIRLEY_ID,
415 CLOSURE_BSDF_MICROFACET_GGX_ANISO_ID,
416 CLOSURE_BSDF_MICROFACET_GGX_ANISO_FRESNEL_ID,
417 CLOSURE_BSDF_MICROFACET_MULTI_GGX_ANISO_ID,
418 CLOSURE_BSDF_MICROFACET_MULTI_GGX_ANISO_FRESNEL_ID,
419 CLOSURE_BSDF_MICROFACET_BECKMANN_ANISO_ID,
420 CLOSURE_BSDF_ASHIKHMIN_SHIRLEY_ANISO_ID,
421 CLOSURE_BSDF_ASHIKHMIN_VELVET_ID,
422 CLOSURE_BSDF_PHONG_RAMP_ID,
423 CLOSURE_BSDF_GLOSSY_TOON_ID,
424 CLOSURE_BSDF_HAIR_REFLECTION_ID,
427 CLOSURE_BSDF_TRANSLUCENT_ID,
428 CLOSURE_BSDF_REFRACTION_ID,
429 CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID,
430 CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID,
431 CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID,
432 CLOSURE_BSDF_MICROFACET_BECKMANN_GLASS_ID,
433 CLOSURE_BSDF_MICROFACET_GGX_GLASS_ID,
434 CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_FRESNEL_ID,
435 CLOSURE_BSDF_SHARP_GLASS_ID,
436 CLOSURE_BSDF_HAIR_TRANSMISSION_ID,
439 CLOSURE_BSDF_BSSRDF_ID,
440 CLOSURE_BSDF_BSSRDF_PRINCIPLED_ID,
441 CLOSURE_BSDF_TRANSPARENT_ID,
444 CLOSURE_BSSRDF_CUBIC_ID,
445 CLOSURE_BSSRDF_GAUSSIAN_ID,
446 CLOSURE_BSSRDF_PRINCIPLED_ID,
447 CLOSURE_BSSRDF_BURLEY_ID,
451 CLOSURE_AMBIENT_OCCLUSION_ID,
455 CLOSURE_VOLUME_ABSORPTION_ID,
456 CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID,
458 CLOSURE_BSDF_PRINCIPLED_ID,
463 /* watch this, being lazy with memory usage */
464 #define CLOSURE_IS_BSDF(type) (type <= CLOSURE_BSDF_TRANSPARENT_ID)
465 #define CLOSURE_IS_BSDF_DIFFUSE(type) (type >= CLOSURE_BSDF_DIFFUSE_ID && type <= CLOSURE_BSDF_DIFFUSE_TOON_ID)
466 #define CLOSURE_IS_BSDF_GLOSSY(type) (type >= CLOSURE_BSDF_REFLECTION_ID && type <= CLOSURE_BSDF_HAIR_REFLECTION_ID)
467 #define CLOSURE_IS_BSDF_TRANSMISSION(type) (type >= CLOSURE_BSDF_TRANSLUCENT_ID && type <= CLOSURE_BSDF_HAIR_TRANSMISSION_ID)
468 #define CLOSURE_IS_BSDF_BSSRDF(type) (type == CLOSURE_BSDF_BSSRDF_ID || type == CLOSURE_BSDF_BSSRDF_PRINCIPLED_ID)
469 #define CLOSURE_IS_BSDF_SINGULAR(type) (type == CLOSURE_BSDF_REFLECTION_ID || \
470 type == CLOSURE_BSDF_REFRACTION_ID || \
471 type == CLOSURE_BSDF_TRANSPARENT_ID)
472 #define CLOSURE_IS_BSDF_TRANSPARENT(type) (type == CLOSURE_BSDF_TRANSPARENT_ID)
473 #define CLOSURE_IS_BSDF_MULTISCATTER(type) (type == CLOSURE_BSDF_MICROFACET_MULTI_GGX_ID ||\
474 type == CLOSURE_BSDF_MICROFACET_MULTI_GGX_ANISO_ID || \
475 type == CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID)
476 #define CLOSURE_IS_BSDF_MICROFACET(type) ((type >= CLOSURE_BSDF_MICROFACET_GGX_ID && type <= CLOSURE_BSDF_ASHIKHMIN_SHIRLEY_ANISO_ID) ||\
477 (type >= CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID && type <= CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID) ||\
478 (type == CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_FRESNEL_ID))
479 #define CLOSURE_IS_BSDF_OR_BSSRDF(type) (type <= CLOSURE_BSSRDF_BURLEY_ID)
480 #define CLOSURE_IS_BSSRDF(type) (type >= CLOSURE_BSSRDF_CUBIC_ID && type <= CLOSURE_BSSRDF_BURLEY_ID)
481 #define CLOSURE_IS_VOLUME(type) (type >= CLOSURE_VOLUME_ID && type <= CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID)
482 #define CLOSURE_IS_VOLUME_SCATTER(type) (type == CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID)
483 #define CLOSURE_IS_VOLUME_ABSORPTION(type) (type == CLOSURE_VOLUME_ABSORPTION_ID)
484 #define CLOSURE_IS_HOLDOUT(type) (type == CLOSURE_HOLDOUT_ID)
485 #define CLOSURE_IS_AMBIENT_OCCLUSION(type) (type == CLOSURE_AMBIENT_OCCLUSION_ID)
486 #define CLOSURE_IS_PHASE(type) (type == CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID)
487 #define CLOSURE_IS_GLASS(type) (type >= CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID && type <= CLOSURE_BSDF_SHARP_GLASS_ID)
488 #define CLOSURE_IS_PRINCIPLED(type) (type == CLOSURE_BSDF_PRINCIPLED_ID)
490 #define CLOSURE_WEIGHT_CUTOFF 1e-5f
494 #endif /* __SVM_TYPES_H__ */