15#ifdef __KERNEL_OPTIX__
28 const uint32_t path_flag,
36 globals->dPdx = dP.
dx;
37 globals->dPdy = dP.
dy;
39 globals->dIdx = dI.
dx;
40 globals->dIdy = dI.
dy;
44 globals->dudx = sd->du.dx;
45 globals->dudy = sd->du.dy;
47 globals->dvdx = sd->dv.dx;
48 globals->dvdy = sd->dv.dy;
49 globals->dPdu = sd->dPdu;
50 globals->dPdv = sd->dPdv;
51 globals->time = sd->time;
52 globals->dtime = 1.0f;
53 globals->surfacearea = 1.0f;
54 globals->raytype = path_flag;
55 globals->flipHandedness = 0;
60 globals->shadingStateUniform =
nullptr;
61 globals->thread_index = 0;
62 globals->shade_index = 0;
65 globals->shader2common = sd;
66 globals->object2common = sd;
69 globals->Ci =
nullptr;
74 const uint32_t path_flag,
81 int layer_stack_level = -1;
85 switch (closure->id) {
89 weight *=
mul->weight;
90 closure =
mul->closure;
94 if (stack_size >= 16) {
100 closure =
add->closureA;
101 weight_stack[stack_size] = weight;
102 closure_stack[stack_size++] =
add->closureB;
105 case OSL_CLOSURE_LAYER_ID: {
107 static_cast<const ccl_private OSLClosureComponent *
>(closure);
114 if (layer->top !=
nullptr) {
116 weight_stack[stack_size] = weight;
117 closure_stack[stack_size] = layer->base;
119 layer_stack_level = stack_size++;
122 closure = layer->top;
126 closure = layer->base;
130#define OSL_CLOSURE_STRUCT_BEGIN(Upper, lower) \
131 case OSL_CLOSURE_##Upper##_ID: { \
132 ccl_private const OSLClosureComponent *comp = \
133 static_cast<ccl_private const OSLClosureComponent *>(closure); \
134 float3 albedo = one_float3(); \
135 osl_closure_##lower##_setup(kg, \
138 weight * comp->weight, \
139 reinterpret_cast<ccl_private const Upper##Closure *>(comp + 1), \
140 (layer_stack_level >= 0) ? &albedo : nullptr); \
141 if (layer_stack_level >= 0) { \
142 layer_albedo += albedo; \
153 if (stack_size == 0) {
157 weight = weight_stack[--stack_size];
158 closure = closure_stack[stack_size];
159 if (stack_size == layer_stack_level) {
163 layer_stack_level = -1;
170 }
while (closure ==
nullptr);
174#ifndef __KERNEL_GPU__
176template<ShaderType type>
184template<ShaderType type,
typename ConstIntegratorGenericState>
186 ConstIntegratorGenericState
state,
188 const uint32_t path_flag)
195# ifdef __KERNEL_OPTIX__
196 uint8_t closure_pool[1024];
197 globals.closure_pool = closure_pool;
211 const float dP = sd->dP;
243 unsigned int optix_dc_index = 2 + 1 +
245 optixDirectCall<void>(optix_dc_index,
266 unsigned int optix_dc_index = 2 + 1 +
268 optixDirectCall<void>(optix_dc_index,
280 else if (globals.
Ci) {
ccl_device_inline Spectrum closure_layering_weight(const Spectrum layer_albedo, const Spectrum weight)
static void mul(btAlignedObjectArray< T > &items, const Q &value)
ccl_device_forceinline float3 dPdx(const ccl_private ShaderData *sd)
ccl_device_forceinline float3 dPdy(const ccl_private ShaderData *sd)
#define kernel_assert(cond)
const ThreadKernelGlobalsCPU * KernelGlobals
#define ccl_device_inline
#define CCL_NAMESPACE_END
ccl_device_forceinline float differential_make_compact(const float dD)
ccl_device_forceinline differential3 differential_from_compact(const float3 D, const float dD)
ccl_device_inline void object_normal_transform(KernelGlobals kg, const ccl_private ShaderData *sd, ccl_private float3 *N)
ccl_device_inline void object_position_transform(KernelGlobals kg, const ccl_private ShaderData *sd, ccl_private T *P)
ccl_device void flatten_closure_tree(KernelGlobals kg, ccl_private ShaderData *sd, const uint32_t path_flag, const ccl_private OSLClosure *closure)
CCL_NAMESPACE_BEGIN ccl_device_inline void shaderdata_to_shaderglobals(ccl_private ShaderData *sd, const uint32_t path_flag, ccl_private ShaderGlobals *globals)
void osl_eval_nodes(const ThreadKernelGlobalsCPU *kg, const void *state, ShaderData *sd, uint32_t path_flag)
@ SHADER_TYPE_DISPLACEMENT
@ ATTR_STD_POSITION_UNDISPLACED
@ ATTR_STD_NORMAL_UNDISPLACED
ccl_device_inline bool is_zero(const float2 a)
ccl_device_inline float2 safe_normalize(const float2 a)
ccl_device_inline float3 one_float3()
CCL_NAMESPACE_BEGIN ccl_device_inline float3 zero_float3()
static void add(blender::Map< std::string, std::string > &messages, Message &msg)
CCL_NAMESPACE_BEGIN ccl_device_forceinline dual< T > primitive_surface_attribute(KernelGlobals kg, const ccl_private ShaderData *sd, const AttributeDescriptor desc, const bool dx=false, const bool dy=false)
static bool find_attribute(const std::string &attributes, const char *search_attribute)
ccl_private OSLClosure * Ci