Blender  V3.3
kernel/types.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0
2  * Copyright 2011-2022 Blender Foundation */
3 
4 #pragma once
5 
6 #if !defined(__KERNEL_GPU__) && defined(WITH_EMBREE)
7 # include <embree3/rtcore.h>
8 # include <embree3/rtcore_scene.h>
9 # define __EMBREE__
10 #endif
11 
12 #include "util/math.h"
13 #include "util/math_fast.h"
14 #include "util/math_intersect.h"
15 #include "util/projection.h"
16 #include "util/static_assert.h"
17 #include "util/texture.h"
18 #include "util/transform.h"
19 
20 #include "kernel/svm/types.h"
21 
23 
24 /* Constants */
25 #define OBJECT_MOTION_PASS_SIZE 2
26 #define FILTER_TABLE_SIZE 1024
27 #define RAMP_TABLE_SIZE 256
28 #define SHUTTER_TABLE_SIZE 256
29 
30 #define BSSRDF_MIN_RADIUS 1e-8f
31 #define BSSRDF_MAX_HITS 4
32 #define BSSRDF_MAX_BOUNCES 256
33 #define LOCAL_MAX_HITS 4
34 
35 #define VOLUME_BOUNDS_MAX 1024
36 
37 #define BECKMANN_TABLE_SIZE 256
38 
39 #define SHADER_NONE (~0)
40 #define OBJECT_NONE (~0)
41 #define PRIM_NONE (~0)
42 #define LAMP_NONE (~0)
43 #define ID_NONE (0.0f)
44 #define PASS_UNUSED (~0)
45 #define LIGHTGROUP_NONE (~0)
46 
47 #define INTEGRATOR_SHADOW_ISECT_SIZE_CPU 1024U
48 #define INTEGRATOR_SHADOW_ISECT_SIZE_GPU 4U
49 
50 #ifdef __KERNEL_GPU__
51 # define INTEGRATOR_SHADOW_ISECT_SIZE INTEGRATOR_SHADOW_ISECT_SIZE_GPU
52 #else
53 # define INTEGRATOR_SHADOW_ISECT_SIZE INTEGRATOR_SHADOW_ISECT_SIZE_CPU
54 #endif
55 
56 /* Kernel features */
57 #define __SOBOL__
58 #define __DPDU__
59 #define __BACKGROUND__
60 #define __CAUSTICS_TRICKS__
61 #define __VISIBILITY_FLAG__
62 #define __RAY_DIFFERENTIALS__
63 #define __CAMERA_CLIPPING__
64 #define __INTERSECTION_REFINE__
65 #define __CLAMP_SAMPLE__
66 #define __PATCH_EVAL__
67 #define __SHADOW_CATCHER__
68 #define __DENOISING_FEATURES__
69 #define __SHADER_RAYTRACE__
70 #define __AO__
71 #define __PASSES__
72 #define __HAIR__
73 #define __POINTCLOUD__
74 #define __SVM__
75 #define __EMISSION__
76 #define __HOLDOUT__
77 #define __TRANSPARENT_SHADOWS__
78 #define __BACKGROUND_MIS__
79 #define __LAMP_MIS__
80 #define __CAMERA_MOTION__
81 #define __OBJECT_MOTION__
82 #define __PRINCIPLED__
83 #define __SUBSURFACE__
84 #define __VOLUME__
85 #define __CMJ__
86 #define __SHADOW_RECORD_ALL__
87 #define __BRANCHED_PATH__
88 
89 /* Device specific features */
90 #ifndef __KERNEL_GPU__
91 # ifdef WITH_OSL
92 # define __OSL__
93 # endif
94 # define __VOLUME_RECORD_ALL__
95 #endif /* !__KERNEL_GPU__ */
96 
97 /* MNEE currently causes "Compute function exceeds available temporary registers"
98  * on Metal, disabled for now. */
99 #ifndef __KERNEL_METAL__
100 # define __MNEE__
101 #endif
102 
103 /* Scene-based selective features compilation. */
104 #ifdef __KERNEL_FEATURES__
105 # if !(__KERNEL_FEATURES & KERNEL_FEATURE_CAMERA_MOTION)
106 # undef __CAMERA_MOTION__
107 # endif
108 # if !(__KERNEL_FEATURES & KERNEL_FEATURE_OBJECT_MOTION)
109 # undef __OBJECT_MOTION__
110 # endif
111 # if !(__KERNEL_FEATURES & KERNEL_FEATURE_HAIR)
112 # undef __HAIR__
113 # endif
114 # if !(__KERNEL_FEATURES & KERNEL_FEATURE_POINTCLOUD)
115 # undef __POINTCLOUD__
116 # endif
117 # if !(__KERNEL_FEATURES & KERNEL_FEATURE_VOLUME)
118 # undef __VOLUME__
119 # endif
120 # if !(__KERNEL_FEATURES & KERNEL_FEATURE_SUBSURFACE)
121 # undef __SUBSURFACE__
122 # endif
123 # if !(__KERNEL_FEATURES & KERNEL_FEATURE_PATCH_EVALUATION)
124 # undef __PATCH_EVAL__
125 # endif
126 # if !(__KERNEL_FEATURES & KERNEL_FEATURE_TRANSPARENT)
127 # undef __TRANSPARENT_SHADOWS__
128 # endif
129 # if !(__KERNEL_FEATURES & KERNEL_FEATURE_SHADOW_CATCHER)
130 # undef __SHADOW_CATCHER__
131 # endif
132 # if !(__KERNEL_FEATURES & KERNEL_FEATURE_PRINCIPLED)
133 # undef __PRINCIPLED__
134 # endif
135 # if !(__KERNEL_FEATURES & KERNEL_FEATURE_DENOISING)
136 # undef __DENOISING_FEATURES__
137 # endif
138 #endif
139 
140 #ifdef WITH_CYCLES_DEBUG_NAN
141 # define __KERNEL_DEBUG_NAN__
142 #endif
143 
144 /* Features that enable others */
145 
146 #if defined(__SUBSURFACE__) || defined(__SHADER_RAYTRACE__)
147 # define __BVH_LOCAL__
148 #endif
149 
150 /* Path Tracing
151  * note we need to keep the u/v pairs at even values */
152 
160  PRNG_UNUSED_1 = 6, /* for some reason (6, 7) is a bad sobol pattern */
161  PRNG_UNUSED_2 = 7, /* with a low number of samples (< 64) */
163 
173 
174  PRNG_BEVEL_U = 6, /* reuse volume dimension, correlation won't harm */
176 };
177 
181 
183 };
184 
185 /* These flags values correspond to `raytypes` in `osl.cpp`, so keep them in sync! */
186 
188  /* --------------------------------------------------------------------
189  * Ray visibility.
190  *
191  * NOTE: Recalculated after a surface bounce.
192  */
193 
194  PATH_RAY_CAMERA = (1U << 0U),
195  PATH_RAY_REFLECT = (1U << 1U),
196  PATH_RAY_TRANSMIT = (1U << 2U),
197  PATH_RAY_DIFFUSE = (1U << 3U),
198  PATH_RAY_GLOSSY = (1U << 4U),
199  PATH_RAY_SINGULAR = (1U << 5U),
200  PATH_RAY_TRANSPARENT = (1U << 6U),
202 
203  /* Shadow ray visibility. */
207 
208  /* Special flag to tag unaligned BVH nodes.
209  * Only set and used in BVH nodes to distinguish how to interpret bounding box information stored
210  * in the node (either it should be intersected as AABB or as OBBU). */
211  PATH_RAY_NODE_UNALIGNED = (1U << 10U),
212 
213  /* Subset of flags used for ray visibility for intersection.
214  *
215  * NOTE: SHADOW_CATCHER macros below assume there are no more than
216  * 16 visibility bits. */
217  PATH_RAY_ALL_VISIBILITY = ((1U << 11U) - 1U),
218 
219  /* --------------------------------------------------------------------
220  * Path flags.
221  */
222 
223  /* Don't apply multiple importance sampling weights to emission from
224  * lamp or surface hits, because they were not direct light sampled. */
225  PATH_RAY_MIS_SKIP = (1U << 11U),
226 
227  /* Diffuse bounce earlier in the path, skip SSS to improve performance
228  * and avoid branching twice with disk sampling SSS. */
230 
231  /* Single pass has been written. */
233 
234  /* Zero background alpha, for camera or transparent glass rays. */
236 
237  /* Terminate ray immediately at next bounce. */
240 
241  /* Ray is to be terminated, but continue with transparent bounces and
242  * emission as long as we encounter them. This is required to make the
243  * MIS between direct and indirect light rays match, as shadow rays go
244  * through transparent surfaces to reach emission too. */
246 
247  /* Terminate ray immediately after volume shading. */
249 
250  /* Ray is to be terminated. */
253 
254  /* Path and shader is being evaluated for direct lighting emission. */
255  PATH_RAY_EMISSION = (1U << 19U),
256 
257  /* Perform subsurface scattering. */
264 
265  /* Contribute to denoising features. */
267 
268  /* Render pass categories. */
269  PATH_RAY_SURFACE_PASS = (1U << 25U),
270  PATH_RAY_VOLUME_PASS = (1U << 26U),
272 
273  /* Shadow ray is for a light or surface, or AO. */
275  PATH_RAY_SHADOW_FOR_AO = (1U << 28U),
276 
277  /* A shadow catcher object was hit and the path was split into two. */
279 
280  /* A shadow catcher object was hit and this path traces only shadow catchers, writing them into
281  * their dedicated pass for later division.
282  *
283  * NOTE: Is not covered with `PATH_RAY_ANY_PASS` because shadow catcher does special handling
284  * which is separate from the light passes. */
286 
287  /* Path is evaluating background for an approximate shadow catcher with non-transparent film. */
289 };
290 
291 // 8bit enum, just in case we need to move more variables in it
293  PATH_MNEE_VALID = (1U << 0U),
296 };
297 
298 /* Configure ray visibility bits for rays and objects respectively,
299  * to make shadow catchers work.
300  *
301  * On shadow catcher paths we want to ignore any intersections with non-catchers,
302  * whereas on regular paths we want to intersect all objects. */
303 
304 #define SHADOW_CATCHER_VISIBILITY_SHIFT(visibility) ((visibility) << 16)
305 
306 #define SHADOW_CATCHER_PATH_VISIBILITY(path_flag, visibility) \
307  (((path_flag)&PATH_RAY_SHADOW_CATCHER_PASS) ? SHADOW_CATCHER_VISIBILITY_SHIFT(visibility) : \
308  (visibility))
309 
310 #define SHADOW_CATCHER_OBJECT_VISIBILITY(is_shadow_catcher, visibility) \
311  (((is_shadow_catcher) ? SHADOW_CATCHER_VISIBILITY_SHIFT(visibility) : 0) | (visibility))
312 
313 /* Closure Label */
314 
315 typedef enum ClosureLabel {
327 
328 /* Render Passes */
329 
330 #define PASS_NAME_JOIN(a, b) a##_##b
331 #define PASSMASK(pass) (1 << ((PASS_NAME_JOIN(PASS, pass)) % 32))
332 
333 // NOTE: Keep in sync with `Pass::get_type_enum()`.
334 typedef enum PassType {
336 
337  /* Light Passes */
356 
357  /* Data passes */
375  /* No Scatter color since it's tricky to define what it would even mean. */
381 
382  /* PASS_SHADOW_CATCHER accumulates contribution of shadow catcher object which is not affected by
383  * any other object. The pass accessor will divide the combined pass by the shadow catcher. The
384  * result of this division is then to be multiplied with the backdrop. The alpha channel of this
385  * pass contains number of samples which contributed to the color components of the pass.
386  *
387  * PASS_SHADOW_CATCHER_SAMPLE_COUNT contains number of samples for which the path split
388  * happened.
389  *
390  * PASS_SHADOW_CATCHER_MATTE contains pass which contains non-catcher objects. This pass is to be
391  * alpha-overed onto the backdrop (after multiplication). */
395 
397 
401 
404 
405 #define PASS_ANY (~0)
406 
407 typedef enum CryptomatteType {
409  CRYPT_OBJECT = (1 << 0),
410  CRYPT_MATERIAL = (1 << 1),
411  CRYPT_ASSET = (1 << 2),
412  CRYPT_ACCURATE = (1 << 3),
414 
415 typedef struct BsdfEval {
420 
421 /* Closure Filter */
422 
423 typedef enum FilterClosures {
431 
432 /* Shader Flag */
433 
434 typedef enum ShaderFlag {
435  SHADER_SMOOTH_NORMAL = (1 << 31),
436  SHADER_CAST_SHADOW = (1 << 30),
437  SHADER_AREA_LIGHT = (1 << 29),
438  SHADER_USE_MIS = (1 << 28),
448 
452 
453 /* Light Type */
454 
455 typedef enum LightType {
463 
464 /* Camera Type */
465 
467 
468 /* Panorama Type */
469 
476 
478 };
479 
480 /* Specifies an offset for the shutter's time interval. */
482  /* Shutter opens at the current frame. */
484  /* Shutter is fully open at the current frame. */
486  /* Shutter closes at the current frame. */
488 
490 };
491 
492 /* Direct Light Sampling */
493 
498 
500 };
501 
502 /* Differential */
503 
504 typedef struct differential3 {
508 
509 typedef struct differential {
510  float dx;
511  float dy;
513 
514 /* Ray */
515 
516 typedef struct RaySelfPrimitives {
517  int prim; /* Primitive the ray is starting from */
518  int object; /* Instance prim is a part of */
519  int light_prim; /* Light primitive */
520  int light_object; /* Light object */
522 
523 typedef struct Ray {
524  float3 P; /* origin */
525  float3 D; /* direction */
526  float tmin; /* start distance */
527  float tmax; /* end distance */
528  float time; /* time (for motion blur) */
529 
531 
532 #ifdef __RAY_DIFFERENTIALS__
533  float dP;
534  float dD;
535 #endif
536 } Ray;
537 
538 /* Intersection */
539 
540 typedef struct Intersection {
541  float t, u, v;
542  int prim;
543  int object;
544  int type;
546 
547 /* Primitives */
548 
549 typedef enum PrimitiveType {
551  PRIMITIVE_TRIANGLE = (1 << 0),
554  PRIMITIVE_POINT = (1 << 3),
555  PRIMITIVE_VOLUME = (1 << 4),
556  PRIMITIVE_LAMP = (1 << 5),
557 
558  PRIMITIVE_MOTION = (1 << 6),
563 
565 
568 
570  PRIMITIVE_NUM_BITS = PRIMITIVE_NUM_SHAPES + 1, /* All shapes + motion bit. */
571  PRIMITIVE_NUM = PRIMITIVE_NUM_SHAPES * 2, /* With and without motion. */
573 
574 /* Convert type to index in range 0..PRIMITIVE_NUM-1. */
575 #define PRIMITIVE_INDEX(type) (bitscan((uint32_t)(type)) * 2 + (((type)&PRIMITIVE_MOTION) ? 1 : 0))
576 
577 /* Pack segment into type value to save space. */
578 #define PRIMITIVE_PACK_SEGMENT(type, segment) ((segment << PRIMITIVE_NUM_BITS) | (type))
579 #define PRIMITIVE_UNPACK_SEGMENT(type) (type >> PRIMITIVE_NUM_BITS)
580 
581 typedef enum CurveShapeType {
584 
587 
588 /* Attributes */
589 
590 typedef enum AttributePrimitive {
593 
596 
597 typedef enum AttributeElement {
600  ATTR_ELEMENT_MESH = (1 << 1),
601  ATTR_ELEMENT_FACE = (1 << 2),
606  ATTR_ELEMENT_CURVE = (1 << 7),
609  ATTR_ELEMENT_VOXEL = (1 << 10)
611 
612 typedef enum AttributeStandard {
646 
647  ATTR_STD_NOT_FOUND = ~0
649 
650 typedef enum AttributeFlag {
651  ATTR_FINAL_SIZE = (1 << 0),
652  ATTR_SUBDIVIDED = (1 << 1),
654 
655 typedef struct AttributeDescriptor {
658  uint flags; /* see enum AttributeFlag */
659  int offset;
661 
662 /* For looking up attributes on objects and geometry. */
663 typedef struct AttributeMap {
664  uint id; /* Global unique identifier. */
665  uint element; /* AttributeElement. */
666  int offset; /* Offset into __attributes global arrays. */
667  uint8_t type; /* NodeAttributeType. */
668  uint8_t flags; /* AttributeFlag. */
671 
672 /* Closure data */
673 
674 #ifndef __MAX_CLOSURE__
675 # define MAX_CLOSURE 64
676 #else
677 # define MAX_CLOSURE __MAX_CLOSURE__
678 #endif
679 
680 /* For manifold next event estimation, we need space to store and evaluate
681  * 2 closures (with extra data) on the refractive interfaces, in addition
682  * to keeping the full sd at the current shading point. We need 4 because a
683  * refractive BSDF is instanced with a companion reflection BSDF, even though
684  * we only need the refractive one, and each of them requires 2 slots. */
685 #ifndef __CAUSTICS_MAX_CLOSURE__
686 # define CAUSTICS_MAX_CLOSURE 4
687 #else
688 # define CAUSTICS_MAX_CLOSURE __CAUSTICS_MAX_CLOSURE__
689 #endif
690 
691 #ifndef __MAX_VOLUME_STACK_SIZE__
692 # define MAX_VOLUME_STACK_SIZE 32
693 #else
694 # define MAX_VOLUME_STACK_SIZE __MAX_VOLUME_STACK_SIZE__
695 #endif
696 
697 #define MAX_VOLUME_CLOSURE 8
698 
699 /* This struct is the base class for all closures. The common members are
700  * duplicated in all derived classes since we don't have C++ in the kernel
701  * yet, and because it lets us lay out the members to minimize padding. The
702  * weight member is located at the beginning of the struct for this reason.
703  *
704  * ShaderClosure has a fixed size, and any extra space must be allocated
705  * with closure_alloc_extra().
706  *
707  * We pad the struct to align to 16 bytes. All shader closures are assumed
708  * to fit in this struct size. CPU sizes are a bit larger because float3 is
709  * padded to be 16 bytes, while it's only 12 bytes on the GPU. */
710 
711 #define SHADER_CLOSURE_BASE \
712  float3 weight; \
713  ClosureType type; \
714  float sample_weight; \
715  float3 N
716 
717 typedef struct ccl_align(16) ShaderClosure
718 {
720 
721 #ifndef __KERNEL_GPU__
722  float pad[2];
723 #endif
724  float data[10];
725 }
727 
728 /* Shader Data
729  *
730  * Main shader state at a point on the surface or in a volume. All coordinates
731  * are in world space.
732  */
733 
735  /* Runtime flags. */
736 
737  /* Set when ray hits backside of surface. */
738  SD_BACKFACING = (1 << 0),
739  /* Shader has non-zero emission. */
740  SD_EMISSION = (1 << 1),
741  /* Shader has BSDF closure. */
742  SD_BSDF = (1 << 2),
743  /* Shader has non-singular BSDF closure. */
744  SD_BSDF_HAS_EVAL = (1 << 3),
745  /* Shader has BSSRDF closure. */
746  SD_BSSRDF = (1 << 4),
747  /* Shader has holdout closure. */
748  SD_HOLDOUT = (1 << 5),
749  /* Shader has non-zero volume extinction. */
750  SD_EXTINCTION = (1 << 6),
751  /* Shader has have volume phase (scatter) closure. */
752  SD_SCATTER = (1 << 7),
753  /* Shader has transparent closure. */
754  SD_TRANSPARENT = (1 << 9),
755  /* BSDF requires LCG for evaluation. */
756  SD_BSDF_NEEDS_LCG = (1 << 10),
757 
760 
761  /* Shader flags. */
762 
763  /* direct light sample */
764  SD_USE_MIS = (1 << 16),
765  /* Has transparent shadow. */
767  /* Has volume shader. */
768  SD_HAS_VOLUME = (1 << 18),
769  /* Has only volume shader, no surface. */
770  SD_HAS_ONLY_VOLUME = (1 << 19),
771  /* Has heterogeneous volume. */
773  /* BSSRDF normal uses bump. */
774  SD_HAS_BSSRDF_BUMP = (1 << 21),
775  /* Use equiangular volume sampling */
777  /* Use multiple importance volume sampling. */
778  SD_VOLUME_MIS = (1 << 23),
779  /* Use cubic interpolation for voxels. */
780  SD_VOLUME_CUBIC = (1 << 24),
781  /* Has data connected to the displacement input or uses bump map. */
782  SD_HAS_BUMP = (1 << 25),
783  /* Has true displacement. */
784  SD_HAS_DISPLACEMENT = (1 << 26),
785  /* Has constant emission (value stored in __shaders) */
787  /* Needs to access attributes for volume rendering */
789  /* Shader has emission */
790  SD_HAS_EMISSION = (1 << 29),
791  /* Shader has raytracing */
792  SD_HAS_RAYTRACE = (1 << 30),
793 
799 };
800 
801 /* Object flags. */
803  /* Holdout for camera rays. */
805  /* Has object motion blur. */
806  SD_OBJECT_MOTION = (1 << 1),
807  /* Vertices have transform applied. */
809  /* Vertices have negative scale applied. */
811  /* Object has a volume shader. */
813  /* Object intersects AABB of an object with volume shader. */
815  /* Has position for motion vertices. */
817  /* object is used to catch shadows */
819  /* object has volume attributes */
821  /* object is caustics caster */
823  /* object is caustics receiver */
825  /* object has attribute for volume motion */
827 
828  /* object is using caustics */
830 
836 };
837 
838 typedef struct ccl_align(16) ShaderData
839 {
840  /* position */
841  float3 P;
842  /* smooth normal for shading */
843  float3 N;
844  /* true geometric normal */
845  float3 Ng;
846  /* view/incoming direction */
847  float3 I;
848  /* shader id */
849  int shader;
850  /* booleans describing shader, see ShaderDataFlag */
851  int flag;
852  /* booleans describing object of the shader, see ShaderDataObjectFlag */
853  int object_flag;
854 
855  /* primitive id if there is one, ~0 otherwise */
856  int prim;
857 
858  /* combined type and curve segment for hair */
859  int type;
860 
861  /* parametric coordinates
862  * - barycentric weights for triangles */
863  float u;
864  float v;
865  /* object id if there is one, ~0 otherwise */
866  int object;
867  /* lamp id if there is one, ~0 otherwise */
868  int lamp;
869 
870  /* motion blur sample time */
871  float time;
872 
873  /* length of the ray being shaded */
874  float ray_length;
875 
876 #ifdef __RAY_DIFFERENTIALS__
877  /* differential of P. these are orthogonal to Ng, not N */
878  differential3 dP;
879  /* differential of I */
880  differential3 dI;
881  /* differential of u, v */
882  differential du;
883  differential dv;
884 #endif
885 #ifdef __DPDU__
886  /* differential of P w.r.t. parametric coordinates. note that dPdu is
887  * not readily suitable as a tangent for shading on triangles. */
888  float3 dPdu;
889  float3 dPdv;
890 #endif
891 
892 #ifdef __OBJECT_MOTION__
893  /* Object <-> world space transformations for motion blur, cached to avoid
894  * re-interpolating them constantly for shading. */
895  Transform ob_tfm_motion;
896  Transform ob_itfm_motion;
897 #endif
898 
899  /* ray start position, only set for backgrounds */
900  float3 ray_P;
901  float ray_dP;
902 
903 #ifdef __OSL__
904  const struct KernelGlobalsCPU *osl_globals;
905  const struct IntegratorStateCPU *osl_path_state;
906  const struct IntegratorShadowStateCPU *osl_shadow_path_state;
907 #endif
908 
909  /* LCG state for closures that require additional random numbers. */
910  uint lcg_state;
911 
912  /* Closure data, we store a fixed array of closures */
913  int num_closure;
914  int num_closure_left;
915  float3 svm_closure_weight;
916 
917  /* Closure weights summed directly, so we can evaluate
918  * emission and shadow transparency with MAX_CLOSURE 0. */
919  float3 closure_emission_background;
920  float3 closure_transparent_extinction;
921 
922  /* At the end so we can adjust size in ShaderDataTinyStorage. */
923  struct ShaderClosure closure[MAX_CLOSURE];
924 }
926 
927 /* ShaderDataTinyStorage needs the same alignment as ShaderData, or else
928  * the pointer cast in AS_SHADER_DATA invokes undefined behavior. */
929 typedef struct ccl_align(16) ShaderDataTinyStorage
930 {
931  char pad[sizeof(ShaderData) - sizeof(ShaderClosure) * MAX_CLOSURE];
932 }
934 
935 /* ShaderDataCausticsStorage needs the same alignment as ShaderData, or else
936  * the pointer cast in AS_SHADER_DATA invokes undefined behavior. */
937 typedef struct ccl_align(16) ShaderDataCausticsStorage
938 {
939  char pad[sizeof(ShaderData) - sizeof(ShaderClosure) * (MAX_CLOSURE - CAUSTICS_MAX_CLOSURE)];
940 }
942 
943 #define AS_SHADER_DATA(shader_data_tiny_storage) \
944  ((ccl_private ShaderData *)shader_data_tiny_storage)
945 
946 /* Compact volume closures storage.
947  *
948  * Used for decoupled direct/indirect light closure storage. */
949 
950 typedef struct ShaderVolumeClosure {
953  float g;
955 
956 typedef struct ShaderVolumePhases {
960 
961 /* Volume Stack */
962 
963 #ifdef __VOLUME__
964 typedef struct VolumeStack {
965  int object;
966  int shader;
968 #endif
969 
970 /* Struct to gather multiple nearby intersections. */
971 typedef struct LocalIntersection {
972  int num_hits;
976 
977 /* Constant Kernel Data
978  *
979  * These structs are passed from CPU to various devices, and the struct layout
980  * must match exactly. Structs are padded to ensure 16 byte alignment, and we
981  * do not use float3 because its size may not be the same on all devices. */
982 
983 typedef struct KernelCamera {
984  /* type */
985  int type;
986 
987  /* panorama */
989  float fisheye_fov;
994 
995  /* stereo */
1000 
1001  /* matrices */
1004 
1005  /* differentials */
1008 
1009  /* depth of field */
1011  float blades;
1014 
1015  /* motion blur */
1018 
1019  /* clipping */
1020  float nearclip;
1021  float cliplength;
1022 
1023  /* sensor size */
1026 
1027  /* render size */
1028  float width, height;
1029  int pad1;
1030 
1031  /* anamorphic lens bokeh */
1033 
1035 
1036  /* more matrices */
1044 
1045  /* Stores changes in the projection matrix. Use for camera zoom motion
1046  * blur and motion pass output for perspective camera. */
1049 
1050  /* Transforms for motion pass. */
1053 
1055 
1056  /* Rolling shutter */
1059 
1063 
1064 typedef struct KernelFilmConvert {
1067 
1070 
1073 
1082 
1083  float scale;
1084  float exposure;
1086 
1090 
1091  /* Number of components to write to. */
1093 
1094  /* Number of floats per pixel. When zero is the same as `num_components`.
1095  * NOTE: Is ignored for half4 destination. */
1097 
1099 
1100  /* Padding. */
1101  int pad1;
1104 
1105 typedef enum KernelBVHLayout {
1107 
1108  BVH_LAYOUT_BVH2 = (1 << 0),
1109  BVH_LAYOUT_EMBREE = (1 << 1),
1110  BVH_LAYOUT_OPTIX = (1 << 2),
1113  BVH_LAYOUT_METAL = (1 << 5),
1116 
1117  /* Default BVH layout to use for CPU. */
1121 
1122 /* Specialized struct that can become constants in dynamic compilation. */
1123 #define KERNEL_STRUCT_BEGIN(name, parent) struct name {
1124 #define KERNEL_STRUCT_END(name) \
1125  } \
1126  ; \
1127  static_assert_align(name, 16);
1128 
1129 #ifdef __KERNEL_USE_DATA_CONSTANTS__
1130 # define KERNEL_STRUCT_MEMBER(parent, type, name) type __unused_##name;
1131 #else
1132 # define KERNEL_STRUCT_MEMBER(parent, type, name) type name;
1133 #endif
1134 
1135 #include "kernel/data_template.h"
1136 
1137 typedef struct KernelTables {
1140  int pad1, pad2;
1143 
1144 typedef struct KernelBake {
1145  int use;
1148  int pad1;
1151 
1152 typedef struct KernelData {
1153  /* Features and limits. */
1158 
1159  /* Always dynamic data members. */
1163 
1164  /* Potentially specialized data members. */
1165 #define KERNEL_STRUCT_BEGIN(name, parent) name parent;
1166 #include "kernel/data_template.h"
1167 
1168  /* Device specific BVH. */
1169 #ifdef __KERNEL_OPTIX__
1170  OptixTraversableHandle device_bvh;
1171 #elif defined __METALRT__
1172  metalrt_as_type device_bvh;
1173 #else
1174 # ifdef __EMBREE__
1175  RTCScene device_bvh;
1176 # ifndef __KERNEL_64_BIT__
1177  int pad1;
1178 # endif
1179 # else
1181 # endif
1182 #endif
1183  int pad2, pad3;
1186 
1187 /* Kernel data structures. */
1188 
1189 typedef struct KernelObject {
1192 
1194  float pass_id;
1196  float color[3];
1197  float alpha;
1199 
1201  float dupli_uv[2];
1202 
1203  int numkeys;
1206 
1210 
1213 
1216 
1218 
1220 
1223 
1224  /* Volume velocity scale. */
1228 
1229 typedef struct KernelCurve {
1233  int type;
1236 
1237 typedef struct KernelCurveSegment {
1238  int prim;
1239  int type;
1242 
1243 typedef struct KernelSpotLight {
1244  float radius;
1245  float invarea;
1246  float spot_angle;
1248  float dir[3];
1249  float pad;
1251 
1252 /* PointLight is SpotLight with only radius and invarea being used. */
1253 
1254 typedef struct KernelAreaLight {
1255  float axisu[3];
1256  float invarea;
1257  float axisv[3];
1258  float tan_spread;
1259  float dir[3];
1262 
1263 typedef struct KernelDistantLight {
1264  float radius;
1265  float cosangle;
1266  float invarea;
1267  float pad;
1269 
1270 typedef struct KernelLight {
1271  int type;
1272  float co[3];
1275  float random;
1276  float strength[3];
1281  union {
1285  };
1288 
1289 typedef struct KernelLightDistribution {
1290  float totarea;
1291  int prim;
1292  union {
1293  struct {
1297  struct {
1298  float pad;
1299  float size;
1300  } lamp;
1301  };
1304 
1305 typedef struct KernelParticle {
1306  int index;
1307  float age;
1308  float lifetime;
1309  float size;
1311  /* Only xyz are used of the following. float4 instead of float3 are used
1312  * to ensure consistent padding/alignment across devices. */
1318 
1319 typedef struct KernelShader {
1322  int flags;
1323  int pass_id;
1324  int pad2, pad3;
1327 
1328 /* Patches */
1329 
1330 #define PATCH_MAX_CONTROL_VERTS 16
1331 
1332 /* Patch map node flags */
1333 
1334 #define PATCH_MAP_NODE_IS_SET (1 << 30)
1335 #define PATCH_MAP_NODE_IS_LEAF (1u << 31)
1336 #define PATCH_MAP_NODE_INDEX_MASK (~(PATCH_MAP_NODE_IS_SET | PATCH_MAP_NODE_IS_LEAF))
1337 
1338 /* Work Tiles */
1339 
1340 typedef struct KernelWorkTile {
1341  uint x, y, w, h;
1342 
1346 
1347  int offset;
1349 
1350  /* Precalculated parameters used by init_from_camera kernel on GPU. */
1354 
1355 /* Shader Evaluation.
1356  *
1357  * Position on a primitive on an object at which we want to evaluate the
1358  * shader for e.g. mesh displacement or light importance map. */
1359 
1360 typedef struct KernelShaderEvalInput {
1361  int object;
1362  int prim;
1363  float u, v;
1366 
1367 /* Pre-computed sample table sizes for PMJ02 sampler. */
1368 #define NUM_PMJ_DIVISIONS 32
1369 #define NUM_PMJ_SAMPLES ((NUM_PMJ_DIVISIONS) * (NUM_PMJ_DIVISIONS))
1370 #define NUM_PMJ_PATTERNS 1
1371 
1372 /* Device kernels.
1373  *
1374  * Identifier for kernels that can be executed in device queues.
1375  *
1376  * Some implementation details.
1377  *
1378  * If the kernel uses shared CUDA memory, `CUDADeviceQueue::enqueue` is to be modified.
1379  * The path iteration kernels are handled in `PathTraceWorkGPU::enqueue_path_iteration`. */
1380 
1381 typedef enum DeviceKernel : int {
1396 
1409 
1413 
1414 #define DECLARE_FILM_CONVERT_KERNEL(variant) \
1415  DEVICE_KERNEL_FILM_CONVERT_##variant, DEVICE_KERNEL_FILM_CONVERT_##variant##_HALF_RGBA
1416 
1419  DECLARE_FILM_CONVERT_KERNEL(SAMPLE_COUNT),
1421  DECLARE_FILM_CONVERT_KERNEL(LIGHT_PATH),
1424  DECLARE_FILM_CONVERT_KERNEL(CRYPTOMATTE),
1425  DECLARE_FILM_CONVERT_KERNEL(SHADOW_CATCHER),
1426  DECLARE_FILM_CONVERT_KERNEL(SHADOW_CATCHER_MATTE_WITH_SHADOW),
1427  DECLARE_FILM_CONVERT_KERNEL(COMBINED),
1429 
1430 #undef DECLARE_FILM_CONVERT_KERNEL
1431 
1435 
1440 
1442 
1444 
1447 
1448 enum {
1450 };
1451 
1452 /* Kernel Features */
1453 
1455  /* Shader nodes. */
1465 
1466  /* Use denoising kernels and output denoising passes. */
1468 
1469  /* Use path tracing kernels. */
1471 
1472  /* BVH/sampling kernel features. */
1474  KERNEL_FEATURE_HAIR = (1U << 12U),
1478 
1479  /* Denotes whether baking functionality is needed. */
1480  KERNEL_FEATURE_BAKING = (1U << 16U),
1481 
1482  /* Use subsurface scattering materials. */
1484 
1485  /* Use volume materials. */
1486  KERNEL_FEATURE_VOLUME = (1U << 18U),
1487 
1488  /* Use OpenSubdiv patch evaluation */
1490 
1491  /* Use Transparent shadows */
1493 
1494  /* Use shadow catcher. */
1496 
1497  /* Per-uber shader usage flags. */
1499 
1500  /* Light render passes. */
1502 
1503  /* Shadow render pass. */
1505 
1506  /* AO. */
1507  KERNEL_FEATURE_AO_PASS = (1U << 25U),
1510 
1511  /* MNEE. */
1512  KERNEL_FEATURE_MNEE = (1U << 27U),
1513 };
1514 
1515 /* Shader node feature mask, to specialize shader evaluation for kernels. */
1516 
1517 #define KERNEL_FEATURE_NODE_MASK_SURFACE_LIGHT \
1518  (KERNEL_FEATURE_NODE_EMISSION | KERNEL_FEATURE_NODE_VORONOI_EXTRA | \
1519  KERNEL_FEATURE_NODE_LIGHT_PATH)
1520 #define KERNEL_FEATURE_NODE_MASK_SURFACE_BACKGROUND \
1521  (KERNEL_FEATURE_NODE_MASK_SURFACE_LIGHT | KERNEL_FEATURE_NODE_AOV)
1522 #define KERNEL_FEATURE_NODE_MASK_SURFACE_SHADOW \
1523  (KERNEL_FEATURE_NODE_BSDF | KERNEL_FEATURE_NODE_EMISSION | KERNEL_FEATURE_NODE_VOLUME | \
1524  KERNEL_FEATURE_NODE_BUMP | KERNEL_FEATURE_NODE_BUMP_STATE | \
1525  KERNEL_FEATURE_NODE_VORONOI_EXTRA | KERNEL_FEATURE_NODE_LIGHT_PATH)
1526 #define KERNEL_FEATURE_NODE_MASK_SURFACE \
1527  (KERNEL_FEATURE_NODE_MASK_SURFACE_SHADOW | KERNEL_FEATURE_NODE_RAYTRACE | \
1528  KERNEL_FEATURE_NODE_AOV | KERNEL_FEATURE_NODE_LIGHT_PATH)
1529 #define KERNEL_FEATURE_NODE_MASK_VOLUME \
1530  (KERNEL_FEATURE_NODE_EMISSION | KERNEL_FEATURE_NODE_VOLUME | \
1531  KERNEL_FEATURE_NODE_VORONOI_EXTRA | KERNEL_FEATURE_NODE_LIGHT_PATH)
1532 #define KERNEL_FEATURE_NODE_MASK_DISPLACEMENT \
1533  (KERNEL_FEATURE_NODE_VORONOI_EXTRA | KERNEL_FEATURE_NODE_BUMP | KERNEL_FEATURE_NODE_BUMP_STATE)
1534 #define KERNEL_FEATURE_NODE_MASK_BUMP KERNEL_FEATURE_NODE_MASK_DISPLACEMENT
1535 
1536 /* Must be constexpr on the CPU to avoid compile errors because the state types
1537  * are different depending on the main, shadow or null path. For GPU we don't have
1538  * C++17 everywhere so can't use it. */
1539 #ifdef __KERNEL_GPU__
1540 # define IF_KERNEL_FEATURE(feature) if ((node_feature_mask & (KERNEL_FEATURE_##feature)) != 0U)
1541 # define IF_KERNEL_NODES_FEATURE(feature) \
1542  if ((node_feature_mask & (KERNEL_FEATURE_NODE_##feature)) != 0U)
1543 #else
1544 # define IF_KERNEL_FEATURE(feature) \
1545  if constexpr ((node_feature_mask & (KERNEL_FEATURE_##feature)) != 0U)
1546 # define IF_KERNEL_NODES_FEATURE(feature) \
1547  if constexpr ((node_feature_mask & (KERNEL_FEATURE_NODE_##feature)) != 0U)
1548 #endif
1549 
unsigned int uint
Definition: BLI_sys_types.h:67
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
float float4[4]
int pad[32 - sizeof(int)]
#define U
ATTR_WARN_UNUSED_RESULT const BMVert * v
#define CCL_NAMESPACE_END
Definition: cuda/compat.h:9
double time
Light lamp
NodeAttributeType
struct KernelDistantLight KernelDistantLight
struct KernelShaderEvalInput KernelShaderEvalInput
PathRayMNEE
Definition: kernel/types.h:292
@ PATH_MNEE_RECEIVER_ANCESTOR
Definition: kernel/types.h:294
@ PATH_MNEE_VALID
Definition: kernel/types.h:293
@ PATH_MNEE_CULL_LIGHT_CONNECTION
Definition: kernel/types.h:295
struct KernelParticle KernelParticle
FilterClosures
Definition: kernel/types.h:423
@ FILTER_CLOSURE_EMISSION
Definition: kernel/types.h:424
@ FILTER_CLOSURE_GLOSSY
Definition: kernel/types.h:426
@ FILTER_CLOSURE_DIFFUSE
Definition: kernel/types.h:425
@ FILTER_CLOSURE_TRANSPARENT
Definition: kernel/types.h:428
@ FILTER_CLOSURE_DIRECT_LIGHT
Definition: kernel/types.h:429
@ FILTER_CLOSURE_TRANSMISSION
Definition: kernel/types.h:427
#define DECLARE_FILM_CONVERT_KERNEL(variant)
struct differential differential
struct LocalIntersection LocalIntersection
struct KernelTables KernelTables
ShaderDataFlag
Definition: kernel/types.h:734
@ SD_VOLUME_MIS
Definition: kernel/types.h:778
@ SD_CLOSURE_FLAGS
Definition: kernel/types.h:758
@ SD_HAS_TRANSPARENT_SHADOW
Definition: kernel/types.h:766
@ SD_BSDF_HAS_EVAL
Definition: kernel/types.h:744
@ SD_VOLUME_EQUIANGULAR
Definition: kernel/types.h:776
@ SD_SHADER_FLAGS
Definition: kernel/types.h:794
@ SD_HAS_BUMP
Definition: kernel/types.h:782
@ SD_HAS_CONSTANT_EMISSION
Definition: kernel/types.h:786
@ SD_HAS_DISPLACEMENT
Definition: kernel/types.h:784
@ SD_HAS_EMISSION
Definition: kernel/types.h:790
@ SD_BACKFACING
Definition: kernel/types.h:738
@ SD_BSSRDF
Definition: kernel/types.h:746
@ SD_BSDF_NEEDS_LCG
Definition: kernel/types.h:756
@ SD_HAS_BSSRDF_BUMP
Definition: kernel/types.h:774
@ SD_HAS_ONLY_VOLUME
Definition: kernel/types.h:770
@ SD_EXTINCTION
Definition: kernel/types.h:750
@ SD_HAS_RAYTRACE
Definition: kernel/types.h:792
@ SD_BSDF
Definition: kernel/types.h:742
@ SD_VOLUME_CUBIC
Definition: kernel/types.h:780
@ SD_HAS_VOLUME
Definition: kernel/types.h:768
@ SD_USE_MIS
Definition: kernel/types.h:764
@ SD_NEED_VOLUME_ATTRIBUTES
Definition: kernel/types.h:788
@ SD_SCATTER
Definition: kernel/types.h:752
@ SD_TRANSPARENT
Definition: kernel/types.h:754
@ SD_HETEROGENEOUS_VOLUME
Definition: kernel/types.h:772
@ SD_HOLDOUT
Definition: kernel/types.h:748
@ SD_EMISSION
Definition: kernel/types.h:740
struct AttributeDescriptor AttributeDescriptor
PrimitiveType
Definition: kernel/types.h:549
@ PRIMITIVE_LAMP
Definition: kernel/types.h:556
@ PRIMITIVE_MOTION_CURVE_RIBBON
Definition: kernel/types.h:561
@ PRIMITIVE_ALL
Definition: kernel/types.h:566
@ PRIMITIVE_MOTION
Definition: kernel/types.h:558
@ PRIMITIVE_MOTION_TRIANGLE
Definition: kernel/types.h:559
@ PRIMITIVE_NONE
Definition: kernel/types.h:550
@ PRIMITIVE_NUM_SHAPES
Definition: kernel/types.h:569
@ PRIMITIVE_CURVE_RIBBON
Definition: kernel/types.h:553
@ PRIMITIVE_VOLUME
Definition: kernel/types.h:555
@ PRIMITIVE_NUM
Definition: kernel/types.h:571
@ PRIMITIVE_MOTION_CURVE_THICK
Definition: kernel/types.h:560
@ PRIMITIVE_CURVE
Definition: kernel/types.h:564
@ PRIMITIVE_CURVE_THICK
Definition: kernel/types.h:552
@ PRIMITIVE_NUM_BITS
Definition: kernel/types.h:570
@ PRIMITIVE_TRIANGLE
Definition: kernel/types.h:551
@ PRIMITIVE_MOTION_POINT
Definition: kernel/types.h:562
@ PRIMITIVE_POINT
Definition: kernel/types.h:554
#define MAX_VOLUME_CLOSURE
Definition: kernel/types.h:697
AttributeStandard
Definition: kernel/types.h:612
@ ATTR_STD_CURVE_INTERCEPT
Definition: kernel/types.h:627
@ ATTR_STD_GENERATED_TRANSFORM
Definition: kernel/types.h:621
@ ATTR_STD_UV
Definition: kernel/types.h:616
@ ATTR_STD_MOTION_VERTEX_NORMAL
Definition: kernel/types.h:625
@ ATTR_STD_VOLUME_VELOCITY_Y
Definition: kernel/types.h:640
@ ATTR_STD_VOLUME_TEMPERATURE
Definition: kernel/types.h:637
@ ATTR_STD_VERTEX_NORMAL
Definition: kernel/types.h:614
@ ATTR_STD_UV_TANGENT
Definition: kernel/types.h:617
@ ATTR_STD_NOT_FOUND
Definition: kernel/types.h:647
@ ATTR_STD_NONE
Definition: kernel/types.h:613
@ ATTR_STD_VOLUME_VELOCITY_Z
Definition: kernel/types.h:641
@ ATTR_STD_POINT_RANDOM
Definition: kernel/types.h:630
@ ATTR_STD_VERTEX_COLOR
Definition: kernel/types.h:619
@ ATTR_STD_VOLUME_DENSITY
Definition: kernel/types.h:633
@ ATTR_STD_NUM
Definition: kernel/types.h:645
@ ATTR_STD_POSITION_UNDISPLACED
Definition: kernel/types.h:623
@ ATTR_STD_VOLUME_FLAME
Definition: kernel/types.h:635
@ ATTR_STD_PTEX_FACE_ID
Definition: kernel/types.h:631
@ ATTR_STD_VOLUME_VELOCITY
Definition: kernel/types.h:638
@ ATTR_STD_POSITION_UNDEFORMED
Definition: kernel/types.h:622
@ ATTR_STD_VOLUME_COLOR
Definition: kernel/types.h:634
@ ATTR_STD_MOTION_VERTEX_POSITION
Definition: kernel/types.h:624
@ ATTR_STD_VOLUME_HEAT
Definition: kernel/types.h:636
@ ATTR_STD_UV_TANGENT_SIGN
Definition: kernel/types.h:618
@ ATTR_STD_CURVE_RANDOM
Definition: kernel/types.h:629
@ ATTR_STD_SHADOW_TRANSPARENCY
Definition: kernel/types.h:644
@ ATTR_STD_FACE_NORMAL
Definition: kernel/types.h:615
@ ATTR_STD_PTEX_UV
Definition: kernel/types.h:632
@ ATTR_STD_POINTINESS
Definition: kernel/types.h:642
@ ATTR_STD_GENERATED
Definition: kernel/types.h:620
@ ATTR_STD_CURVE_LENGTH
Definition: kernel/types.h:628
@ ATTR_STD_VOLUME_VELOCITY_X
Definition: kernel/types.h:639
@ ATTR_STD_RANDOM_PER_ISLAND
Definition: kernel/types.h:643
@ ATTR_STD_PARTICLE
Definition: kernel/types.h:626
#define SHADER_CLOSURE_BASE
Definition: kernel/types.h:711
struct Intersection Intersection
DirectLightSamplingType
Definition: kernel/types.h:494
@ DIRECT_LIGHT_SAMPLING_MIS
Definition: kernel/types.h:495
@ DIRECT_LIGHT_SAMPLING_NUM
Definition: kernel/types.h:499
@ DIRECT_LIGHT_SAMPLING_NEE
Definition: kernel/types.h:497
@ DIRECT_LIGHT_SAMPLING_FORWARD
Definition: kernel/types.h:496
struct ShaderVolumeClosure ShaderVolumeClosure
PathTraceDimension
Definition: kernel/types.h:153
@ PRNG_BOUNCE_NUM
Definition: kernel/types.h:172
@ PRNG_LIGHT_TERMINATE
Definition: kernel/types.h:168
@ PRNG_BSDF_U
Definition: kernel/types.h:164
@ PRNG_FILTER_U
Definition: kernel/types.h:154
@ PRNG_LIGHT_U
Definition: kernel/types.h:166
@ PRNG_BASE_NUM
Definition: kernel/types.h:162
@ PRNG_LENS_U
Definition: kernel/types.h:156
@ PRNG_BEVEL_V
Definition: kernel/types.h:175
@ PRNG_SCATTER_DISTANCE
Definition: kernel/types.h:171
@ PRNG_TIME
Definition: kernel/types.h:158
@ PRNG_TERMINATE
Definition: kernel/types.h:169
@ PRNG_LIGHT_V
Definition: kernel/types.h:167
@ PRNG_FILTER_V
Definition: kernel/types.h:155
@ PRNG_LENS_V
Definition: kernel/types.h:157
@ PRNG_BSDF_V
Definition: kernel/types.h:165
@ PRNG_PHASE_CHANNEL
Definition: kernel/types.h:170
@ PRNG_BEVEL_U
Definition: kernel/types.h:174
@ PRNG_UNUSED_2
Definition: kernel/types.h:161
@ PRNG_UNUSED_0
Definition: kernel/types.h:159
@ PRNG_UNUSED_1
Definition: kernel/types.h:160
PathRayFlag
Definition: kernel/types.h:187
@ PATH_RAY_SHADOW_FOR_AO
Definition: kernel/types.h:275
@ PATH_RAY_SHADOW
Definition: kernel/types.h:206
@ PATH_RAY_SHADOW_CATCHER_HIT
Definition: kernel/types.h:278
@ PATH_RAY_VOLUME_PASS
Definition: kernel/types.h:270
@ PATH_RAY_TERMINATE_AFTER_TRANSPARENT
Definition: kernel/types.h:245
@ PATH_RAY_SINGULAR
Definition: kernel/types.h:199
@ PATH_RAY_REFLECT
Definition: kernel/types.h:195
@ PATH_RAY_SUBSURFACE_USE_FRESNEL
Definition: kernel/types.h:260
@ PATH_RAY_SUBSURFACE_BACKFACING
Definition: kernel/types.h:261
@ PATH_RAY_TRANSPARENT
Definition: kernel/types.h:200
@ PATH_RAY_TERMINATE_AFTER_VOLUME
Definition: kernel/types.h:248
@ PATH_RAY_SHADOW_CATCHER_PASS
Definition: kernel/types.h:285
@ PATH_RAY_SHADOW_OPAQUE
Definition: kernel/types.h:204
@ PATH_RAY_TERMINATE
Definition: kernel/types.h:251
@ PATH_RAY_SINGLE_PASS_DONE
Definition: kernel/types.h:232
@ PATH_RAY_TRANSMIT
Definition: kernel/types.h:196
@ PATH_RAY_SHADOW_TRANSPARENT
Definition: kernel/types.h:205
@ PATH_RAY_EMISSION
Definition: kernel/types.h:255
@ PATH_RAY_VOLUME_SCATTER
Definition: kernel/types.h:201
@ PATH_RAY_TERMINATE_IN_NEXT_VOLUME
Definition: kernel/types.h:239
@ PATH_RAY_MIS_SKIP
Definition: kernel/types.h:225
@ PATH_RAY_DENOISING_FEATURES
Definition: kernel/types.h:266
@ PATH_RAY_SHADOW_FOR_LIGHT
Definition: kernel/types.h:274
@ PATH_RAY_GLOSSY
Definition: kernel/types.h:198
@ PATH_RAY_SUBSURFACE
Definition: kernel/types.h:262
@ PATH_RAY_SURFACE_PASS
Definition: kernel/types.h:269
@ PATH_RAY_ALL_VISIBILITY
Definition: kernel/types.h:217
@ PATH_RAY_SUBSURFACE_DISK
Definition: kernel/types.h:259
@ PATH_RAY_NODE_UNALIGNED
Definition: kernel/types.h:211
@ PATH_RAY_DIFFUSE
Definition: kernel/types.h:197
@ PATH_RAY_TRANSPARENT_BACKGROUND
Definition: kernel/types.h:235
@ PATH_RAY_SHADOW_CATCHER_BACKGROUND
Definition: kernel/types.h:288
@ PATH_RAY_CAMERA
Definition: kernel/types.h:194
@ PATH_RAY_ANY_PASS
Definition: kernel/types.h:271
@ PATH_RAY_TERMINATE_ON_NEXT_SURFACE
Definition: kernel/types.h:238
@ PATH_RAY_DIFFUSE_ANCESTOR
Definition: kernel/types.h:229
@ PATH_RAY_SUBSURFACE_RANDOM_WALK
Definition: kernel/types.h:258
KernelFeatureFlag
@ KERNEL_FEATURE_BAKING
@ KERNEL_FEATURE_NODE_VOLUME
@ KERNEL_FEATURE_NODE_EMISSION
@ KERNEL_FEATURE_NODE_BSDF
@ KERNEL_FEATURE_NODE_BUMP
@ KERNEL_FEATURE_LIGHT_PASSES
@ KERNEL_FEATURE_OBJECT_MOTION
@ KERNEL_FEATURE_NODE_AOV
@ KERNEL_FEATURE_MNEE
@ KERNEL_FEATURE_SUBSURFACE
@ KERNEL_FEATURE_PRINCIPLED
@ KERNEL_FEATURE_AO_PASS
@ KERNEL_FEATURE_CAMERA_MOTION
@ KERNEL_FEATURE_SHADOW_CATCHER
@ KERNEL_FEATURE_AO_ADDITIVE
@ KERNEL_FEATURE_HAIR
@ KERNEL_FEATURE_NODE_LIGHT_PATH
@ KERNEL_FEATURE_TRANSPARENT
@ KERNEL_FEATURE_HAIR_THICK
@ KERNEL_FEATURE_PATCH_EVALUATION
@ KERNEL_FEATURE_PATH_TRACING
@ KERNEL_FEATURE_SHADOW_PASS
@ KERNEL_FEATURE_NODE_VORONOI_EXTRA
@ KERNEL_FEATURE_VOLUME
@ KERNEL_FEATURE_NODE_BUMP_STATE
@ KERNEL_FEATURE_POINTCLOUD
@ KERNEL_FEATURE_AO
@ KERNEL_FEATURE_DENOISING
@ KERNEL_FEATURE_NODE_RAYTRACE
struct KernelFilmConvert KernelFilmConvert
struct KernelCurveSegment KernelCurveSegment
AttributeFlag
Definition: kernel/types.h:650
@ ATTR_FINAL_SIZE
Definition: kernel/types.h:651
@ ATTR_SUBDIVIDED
Definition: kernel/types.h:652
CryptomatteType
Definition: kernel/types.h:407
@ CRYPT_ASSET
Definition: kernel/types.h:411
@ CRYPT_NONE
Definition: kernel/types.h:408
@ CRYPT_ACCURATE
Definition: kernel/types.h:412
@ CRYPT_OBJECT
Definition: kernel/types.h:409
@ CRYPT_MATERIAL
Definition: kernel/types.h:410
struct KernelLight KernelLight
struct Ray Ray
CurveShapeType
Definition: kernel/types.h:581
@ CURVE_THICK
Definition: kernel/types.h:583
@ CURVE_NUM_SHAPE_TYPES
Definition: kernel/types.h:585
@ CURVE_RIBBON
Definition: kernel/types.h:582
struct KernelShader KernelShader
struct KernelLightDistribution KernelLightDistribution
ShaderDataTinyStorage
Definition: kernel/types.h:933
struct AttributeMap AttributeMap
struct KernelBake KernelBake
#define LOCAL_MAX_HITS
Definition: kernel/types.h:33
static_assert_align(KernelCamera, 16)
struct RaySelfPrimitives RaySelfPrimitives
ShaderData
Definition: kernel/types.h:925
ShaderFlag
Definition: kernel/types.h:434
@ SHADER_EXCLUDE_SHADOW_CATCHER
Definition: kernel/types.h:444
@ SHADER_EXCLUDE_CAMERA
Definition: kernel/types.h:442
@ SHADER_EXCLUDE_DIFFUSE
Definition: kernel/types.h:439
@ SHADER_USE_MIS
Definition: kernel/types.h:438
@ SHADER_EXCLUDE_ANY
Definition: kernel/types.h:445
@ SHADER_EXCLUDE_SCATTER
Definition: kernel/types.h:443
@ SHADER_EXCLUDE_GLOSSY
Definition: kernel/types.h:440
@ SHADER_AREA_LIGHT
Definition: kernel/types.h:437
@ SHADER_EXCLUDE_TRANSMIT
Definition: kernel/types.h:441
@ SHADER_SMOOTH_NORMAL
Definition: kernel/types.h:435
@ SHADER_CAST_SHADOW
Definition: kernel/types.h:436
@ SHADER_MASK
Definition: kernel/types.h:449
MotionPosition
Definition: kernel/types.h:481
@ MOTION_POSITION_END
Definition: kernel/types.h:487
@ MOTION_POSITION_START
Definition: kernel/types.h:483
@ MOTION_POSITION_CENTER
Definition: kernel/types.h:485
@ MOTION_NUM_POSITIONS
Definition: kernel/types.h:489
@ DEVICE_KERNEL_INTEGRATOR_NUM
struct KernelCurve KernelCurve
struct KernelSpotLight KernelSpotLight
ShaderDataObjectFlag
Definition: kernel/types.h:802
@ SD_OBJECT_MOTION
Definition: kernel/types.h:806
@ SD_OBJECT_HAS_VOLUME_ATTRIBUTES
Definition: kernel/types.h:820
@ SD_OBJECT_HAS_VOLUME
Definition: kernel/types.h:812
@ SD_OBJECT_CAUSTICS
Definition: kernel/types.h:829
@ SD_OBJECT_INTERSECTS_VOLUME
Definition: kernel/types.h:814
@ SD_OBJECT_HOLDOUT_MASK
Definition: kernel/types.h:804
@ SD_OBJECT_HAS_VOLUME_MOTION
Definition: kernel/types.h:826
@ SD_OBJECT_CAUSTICS_RECEIVER
Definition: kernel/types.h:824
@ SD_OBJECT_FLAGS
Definition: kernel/types.h:831
@ SD_OBJECT_SHADOW_CATCHER
Definition: kernel/types.h:818
@ SD_OBJECT_TRANSFORM_APPLIED
Definition: kernel/types.h:808
@ SD_OBJECT_HAS_VERTEX_MOTION
Definition: kernel/types.h:816
@ SD_OBJECT_NEGATIVE_SCALE_APPLIED
Definition: kernel/types.h:810
@ SD_OBJECT_CAUSTICS_CASTER
Definition: kernel/types.h:822
SamplingPattern
Definition: kernel/types.h:178
@ SAMPLING_PATTERN_PMJ
Definition: kernel/types.h:180
@ SAMPLING_PATTERN_SOBOL
Definition: kernel/types.h:179
@ SAMPLING_NUM_PATTERNS
Definition: kernel/types.h:182
KernelBVHLayout
@ BVH_LAYOUT_OPTIX
@ BVH_LAYOUT_NONE
@ BVH_LAYOUT_METAL
@ BVH_LAYOUT_EMBREE
@ BVH_LAYOUT_AUTO
@ BVH_LAYOUT_MULTI_OPTIX
@ BVH_LAYOUT_BVH2
@ BVH_LAYOUT_MULTI_METAL
@ BVH_LAYOUT_MULTI_METAL_EMBREE
@ BVH_LAYOUT_ALL
@ BVH_LAYOUT_MULTI_OPTIX_EMBREE
AttributeElement
Definition: kernel/types.h:597
@ ATTR_ELEMENT_NONE
Definition: kernel/types.h:598
@ ATTR_ELEMENT_CORNER_BYTE
Definition: kernel/types.h:605
@ ATTR_ELEMENT_CURVE_KEY
Definition: kernel/types.h:607
@ ATTR_ELEMENT_CURVE_KEY_MOTION
Definition: kernel/types.h:608
@ ATTR_ELEMENT_VOXEL
Definition: kernel/types.h:609
@ ATTR_ELEMENT_CORNER
Definition: kernel/types.h:604
@ ATTR_ELEMENT_OBJECT
Definition: kernel/types.h:599
@ ATTR_ELEMENT_VERTEX_MOTION
Definition: kernel/types.h:603
@ ATTR_ELEMENT_VERTEX
Definition: kernel/types.h:602
@ ATTR_ELEMENT_FACE
Definition: kernel/types.h:601
@ ATTR_ELEMENT_MESH
Definition: kernel/types.h:600
@ ATTR_ELEMENT_CURVE
Definition: kernel/types.h:606
ClosureLabel
Definition: kernel/types.h:315
@ LABEL_TRANSMIT
Definition: kernel/types.h:317
@ LABEL_TRANSMIT_TRANSPARENT
Definition: kernel/types.h:324
@ LABEL_VOLUME_SCATTER
Definition: kernel/types.h:323
@ LABEL_DIFFUSE
Definition: kernel/types.h:319
@ LABEL_NONE
Definition: kernel/types.h:316
@ LABEL_SINGULAR
Definition: kernel/types.h:321
@ LABEL_GLOSSY
Definition: kernel/types.h:320
@ LABEL_REFLECT
Definition: kernel/types.h:318
@ LABEL_TRANSPARENT
Definition: kernel/types.h:322
@ LABEL_SUBSURFACE_SCATTER
Definition: kernel/types.h:325
struct VolumeStack VolumeStack
struct ShaderVolumePhases ShaderVolumePhases
struct KernelData KernelData
struct KernelObject KernelObject
#define MAX_CLOSURE
Definition: kernel/types.h:675
PassType
Definition: kernel/types.h:334
@ PASS_SHADOW_CATCHER_SAMPLE_COUNT
Definition: kernel/types.h:393
@ PASS_EMISSION
Definition: kernel/types.h:339
@ PASS_POSITION
Definition: kernel/types.h:359
@ PASS_BACKGROUND
Definition: kernel/types.h:340
@ PASS_TRANSMISSION_DIRECT
Definition: kernel/types.h:350
@ PASS_VOLUME_DIRECT
Definition: kernel/types.h:353
@ PASS_UV
Definition: kernel/types.h:362
@ PASS_TRANSMISSION_COLOR
Definition: kernel/types.h:374
@ PASS_SHADOW_CATCHER_MATTE
Definition: kernel/types.h:394
@ PASS_DEPTH
Definition: kernel/types.h:358
@ PASS_MIST
Definition: kernel/types.h:376
@ PASS_TRANSMISSION_INDIRECT
Definition: kernel/types.h:351
@ PASS_SHADOW_CATCHER
Definition: kernel/types.h:392
@ PASS_DENOISING_NORMAL
Definition: kernel/types.h:377
@ PASS_ROUGHNESS
Definition: kernel/types.h:361
@ PASS_DIFFUSE_DIRECT
Definition: kernel/types.h:344
@ PASS_MOTION
Definition: kernel/types.h:365
@ PASS_CATEGORY_BAKE_END
Definition: kernel/types.h:400
@ PASS_MATERIAL_ID
Definition: kernel/types.h:364
@ PASS_AO
Definition: kernel/types.h:341
@ PASS_COMBINED
Definition: kernel/types.h:338
@ PASS_DIFFUSE
Definition: kernel/types.h:343
@ PASS_DIFFUSE_INDIRECT
Definition: kernel/types.h:345
@ PASS_CATEGORY_DATA_END
Definition: kernel/types.h:396
@ PASS_ADAPTIVE_AUX_BUFFER
Definition: kernel/types.h:370
@ PASS_GLOSSY
Definition: kernel/types.h:346
@ PASS_OBJECT_ID
Definition: kernel/types.h:363
@ PASS_AOV_COLOR
Definition: kernel/types.h:368
@ PASS_NUM
Definition: kernel/types.h:402
@ PASS_NONE
Definition: kernel/types.h:335
@ PASS_VOLUME_INDIRECT
Definition: kernel/types.h:354
@ PASS_TRANSMISSION
Definition: kernel/types.h:349
@ PASS_NORMAL
Definition: kernel/types.h:360
@ PASS_CRYPTOMATTE
Definition: kernel/types.h:367
@ PASS_DIFFUSE_COLOR
Definition: kernel/types.h:372
@ PASS_SAMPLE_COUNT
Definition: kernel/types.h:371
@ PASS_GLOSSY_DIRECT
Definition: kernel/types.h:347
@ PASS_MOTION_WEIGHT
Definition: kernel/types.h:366
@ PASS_DENOISING_ALBEDO
Definition: kernel/types.h:378
@ PASS_VOLUME
Definition: kernel/types.h:352
@ PASS_AOV_VALUE
Definition: kernel/types.h:369
@ PASS_GLOSSY_COLOR
Definition: kernel/types.h:373
@ PASS_SHADOW
Definition: kernel/types.h:342
@ PASS_DENOISING_PREVIOUS
Definition: kernel/types.h:380
@ PASS_GLOSSY_INDIRECT
Definition: kernel/types.h:348
@ PASS_BAKE_DIFFERENTIAL
Definition: kernel/types.h:399
@ PASS_DENOISING_DEPTH
Definition: kernel/types.h:379
@ PASS_BAKE_PRIMITIVE
Definition: kernel/types.h:398
@ PASS_CATEGORY_LIGHT_END
Definition: kernel/types.h:355
struct KernelWorkTile KernelWorkTile
ShaderClosure
Definition: kernel/types.h:726
AttributePrimitive
Definition: kernel/types.h:590
@ ATTR_PRIM_SUBD
Definition: kernel/types.h:592
@ ATTR_PRIM_TYPES
Definition: kernel/types.h:594
@ ATTR_PRIM_GEOMETRY
Definition: kernel/types.h:591
struct ccl_align(16) ShaderClosure
Definition: kernel/types.h:717
struct KernelAreaLight KernelAreaLight
PanoramaType
Definition: kernel/types.h:470
@ PANORAMA_MIRRORBALL
Definition: kernel/types.h:474
@ PANORAMA_FISHEYE_EQUISOLID
Definition: kernel/types.h:473
@ PANORAMA_NUM_TYPES
Definition: kernel/types.h:477
@ PANORAMA_FISHEYE_EQUIDISTANT
Definition: kernel/types.h:472
@ PANORAMA_FISHEYE_LENS_POLYNOMIAL
Definition: kernel/types.h:475
@ PANORAMA_EQUIRECTANGULAR
Definition: kernel/types.h:471
struct BsdfEval BsdfEval
LightType
Definition: kernel/types.h:455
@ LIGHT_AREA
Definition: kernel/types.h:459
@ LIGHT_DISTANT
Definition: kernel/types.h:457
@ LIGHT_SPOT
Definition: kernel/types.h:460
@ LIGHT_BACKGROUND
Definition: kernel/types.h:458
@ LIGHT_TRIANGLE
Definition: kernel/types.h:461
@ LIGHT_POINT
Definition: kernel/types.h:456
#define CAUSTICS_MAX_CLOSURE
Definition: kernel/types.h:686
DeviceKernel
@ DEVICE_KERNEL_ADAPTIVE_SAMPLING_CONVERGENCE_CHECK
@ DEVICE_KERNEL_INTEGRATOR_RESET
@ DEVICE_KERNEL_INTEGRATOR_QUEUED_PATHS_ARRAY
@ DEVICE_KERNEL_INTEGRATOR_SHADE_LIGHT
@ DEVICE_KERNEL_FILTER_COLOR_PREPROCESS
@ DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE
@ DEVICE_KERNEL_SHADER_EVAL_DISPLACE
@ DEVICE_KERNEL_INTEGRATOR_SHADOW_CATCHER_COUNT_POSSIBLE_SPLITS
@ DEVICE_KERNEL_INTEGRATOR_INTERSECT_SUBSURFACE
@ DEVICE_KERNEL_INTEGRATOR_QUEUED_SHADOW_PATHS_ARRAY
@ DEVICE_KERNEL_FILTER_GUIDING_SET_FAKE_ALBEDO
@ DEVICE_KERNEL_FILTER_COLOR_POSTPROCESS
@ DEVICE_KERNEL_INTEGRATOR_SHADE_SHADOW
@ DEVICE_KERNEL_INTEGRATOR_TERMINATED_PATHS_ARRAY
@ DEVICE_KERNEL_INTEGRATOR_INTERSECT_VOLUME_STACK
@ DEVICE_KERNEL_SHADER_EVAL_BACKGROUND
@ DEVICE_KERNEL_INTEGRATOR_SORTED_PATHS_ARRAY
@ DEVICE_KERNEL_INTEGRATOR_COMPACT_SHADOW_PATHS_ARRAY
@ DEVICE_KERNEL_INTEGRATOR_COMPACT_SHADOW_STATES
@ DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE_RAYTRACE
@ DEVICE_KERNEL_FILTER_GUIDING_PREPROCESS
@ DEVICE_KERNEL_INTEGRATOR_COMPACT_STATES
@ DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE_MNEE
@ DEVICE_KERNEL_INTEGRATOR_TERMINATED_SHADOW_PATHS_ARRAY
@ DEVICE_KERNEL_INTEGRATOR_MEGAKERNEL
@ DEVICE_KERNEL_NUM
@ DEVICE_KERNEL_INTEGRATOR_ACTIVE_PATHS_ARRAY
@ DEVICE_KERNEL_INTEGRATOR_INIT_FROM_CAMERA
@ DEVICE_KERNEL_ADAPTIVE_SAMPLING_CONVERGENCE_FILTER_Y
@ DEVICE_KERNEL_ADAPTIVE_SAMPLING_CONVERGENCE_FILTER_X
@ DEVICE_KERNEL_CRYPTOMATTE_POSTPROCESS
@ DEVICE_KERNEL_INTEGRATOR_COMPACT_PATHS_ARRAY
@ DEVICE_KERNEL_INTEGRATOR_INIT_FROM_BAKE
@ DEVICE_KERNEL_SHADER_EVAL_CURVE_SHADOW_TRANSPARENCY
@ DEVICE_KERNEL_INTEGRATOR_SHADE_VOLUME
@ DEVICE_KERNEL_INTEGRATOR_INTERSECT_SHADOW
@ DEVICE_KERNEL_INTEGRATOR_INTERSECT_CLOSEST
@ DEVICE_KERNEL_INTEGRATOR_SHADE_BACKGROUND
@ DEVICE_KERNEL_PREFIX_SUM
struct differential3 differential3
struct KernelCamera KernelCamera
CameraType
Definition: kernel/types.h:466
@ CAMERA_PERSPECTIVE
Definition: kernel/types.h:466
@ CAMERA_PANORAMA
Definition: kernel/types.h:466
@ CAMERA_ORTHOGRAPHIC
Definition: kernel/types.h:466
ShaderDataCausticsStorage
Definition: kernel/types.h:941
static float P(float k)
Definition: math_interp.c:25
#define N
#define I
@ FLOAT4
@ FLOAT3
@ FLOAT
unsigned int uint32_t
Definition: stdint.h:80
unsigned char uint8_t
Definition: stdint.h:78
AttributeElement element
Definition: kernel/types.h:656
NodeAttributeType type
Definition: kernel/types.h:657
uint8_t flags
Definition: kernel/types.h:668
uint8_t pad[2]
Definition: kernel/types.h:669
uint8_t type
Definition: kernel/types.h:667
float3 sum
Definition: kernel/types.h:418
float3 diffuse
Definition: kernel/types.h:416
float3 glossy
Definition: kernel/types.h:417
float focaldistance
ProjectionTransform ndctoworld
float pole_merge_angle_to
Definition: kernel/types.h:999
int have_perspective_motion
float sensorheight
ProjectionTransform rastertocamera
float pole_merge_angle_from
Definition: kernel/types.h:998
float aperturesize
int shutter_table_offset
ProjectionTransform worldtoraster
float fisheye_fov
Definition: kernel/types.h:989
float fisheye_lens_polynomial_bias
Definition: kernel/types.h:992
Transform motion_pass_post
Transform cameratoworld
float4 equirectangular_range
Definition: kernel/types.h:991
float interocular_offset
Definition: kernel/types.h:996
Transform worldtocamera
ProjectionTransform screentoworld
float inv_aperture_ratio
ProjectionTransform perspective_post
float rolling_shutter_duration
ProjectionTransform perspective_pre
ProjectionTransform worldtoscreen
Transform motion_pass_pre
int rolling_shutter_type
ProjectionTransform worldtondc
float fisheye_lens
Definition: kernel/types.h:990
float bladesrotation
float convergence_distance
Definition: kernel/types.h:997
ProjectionTransform rastertoworld
float4 fisheye_lens_polynomial_coefficients
Definition: kernel/types.h:993
KernelTables tables
KernelCamera cam
uint max_closures
uint max_shaders
KernelBake bake
uint volume_stack_size
uint kernel_features
int use_approximate_shadow_catcher_background
int use_approximate_shadow_catcher
int pass_shadow_catcher_sample_count
struct KernelLightDistribution::@1252::@1254 mesh_light
struct KernelLightDistribution::@1252::@1255 lamp
float co[3]
Transform itfm
float strength[3]
float max_bounces
KernelSpotLight spot
Transform tfm
KernelDistantLight distant
KernelAreaLight area
float velocity_scale
Transform tfm
Transform itfm
float dupli_uv[2]
float volume_density
float random_number
float shadow_terminator_geometry_offset
float cryptomatte_asset
float color[3]
uint attribute_map_offset
uint patch_map_offset
float shadow_terminator_shading_offset
float dupli_generated[3]
float cryptomatte_object
float4 angular_velocity
float constant_emission[3]
float cryptomatte_id
int filter_table_offset
struct Intersection hits[LOCAL_MAX_HITS]
Definition: kernel/types.h:973
float3 Ng[LOCAL_MAX_HITS]
Definition: kernel/types.h:974
float tmax
Definition: kernel/types.h:527
float tmin
Definition: kernel/types.h:526
float dD
Definition: kernel/types.h:534
float3 P
Definition: kernel/types.h:524
float time
Definition: kernel/types.h:528
float dP
Definition: kernel/types.h:533
float3 D
Definition: kernel/types.h:525
ShaderVolumeClosure closure[MAX_VOLUME_CLOSURE]
Definition: kernel/types.h:957