Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/kernel/integrator/integrator_state_util.h')
-rw-r--r--intern/cycles/kernel/integrator/integrator_state_util.h170
1 files changed, 88 insertions, 82 deletions
diff --git a/intern/cycles/kernel/integrator/integrator_state_util.h b/intern/cycles/kernel/integrator/integrator_state_util.h
index fddd9eb5ac8..fee59e451d9 100644
--- a/intern/cycles/kernel/integrator/integrator_state_util.h
+++ b/intern/cycles/kernel/integrator/integrator_state_util.h
@@ -23,145 +23,150 @@ CCL_NAMESPACE_BEGIN
/* Ray */
-ccl_device_forceinline void integrator_state_write_ray(INTEGRATOR_STATE_ARGS,
+ccl_device_forceinline void integrator_state_write_ray(KernelGlobals kg,
+ IntegratorState state,
ccl_private const Ray *ccl_restrict ray)
{
- INTEGRATOR_STATE_WRITE(ray, P) = ray->P;
- INTEGRATOR_STATE_WRITE(ray, D) = ray->D;
- INTEGRATOR_STATE_WRITE(ray, t) = ray->t;
- INTEGRATOR_STATE_WRITE(ray, time) = ray->time;
- INTEGRATOR_STATE_WRITE(ray, dP) = ray->dP;
- INTEGRATOR_STATE_WRITE(ray, dD) = ray->dD;
+ INTEGRATOR_STATE_WRITE(state, ray, P) = ray->P;
+ INTEGRATOR_STATE_WRITE(state, ray, D) = ray->D;
+ INTEGRATOR_STATE_WRITE(state, ray, t) = ray->t;
+ INTEGRATOR_STATE_WRITE(state, ray, time) = ray->time;
+ INTEGRATOR_STATE_WRITE(state, ray, dP) = ray->dP;
+ INTEGRATOR_STATE_WRITE(state, ray, dD) = ray->dD;
}
-ccl_device_forceinline void integrator_state_read_ray(INTEGRATOR_STATE_CONST_ARGS,
+ccl_device_forceinline void integrator_state_read_ray(KernelGlobals kg,
+ ConstIntegratorState state,
ccl_private Ray *ccl_restrict ray)
{
- ray->P = INTEGRATOR_STATE(ray, P);
- ray->D = INTEGRATOR_STATE(ray, D);
- ray->t = INTEGRATOR_STATE(ray, t);
- ray->time = INTEGRATOR_STATE(ray, time);
- ray->dP = INTEGRATOR_STATE(ray, dP);
- ray->dD = INTEGRATOR_STATE(ray, dD);
+ ray->P = INTEGRATOR_STATE(state, ray, P);
+ ray->D = INTEGRATOR_STATE(state, ray, D);
+ ray->t = INTEGRATOR_STATE(state, ray, t);
+ ray->time = INTEGRATOR_STATE(state, ray, time);
+ ray->dP = INTEGRATOR_STATE(state, ray, dP);
+ ray->dD = INTEGRATOR_STATE(state, ray, dD);
}
/* Shadow Ray */
ccl_device_forceinline void integrator_state_write_shadow_ray(
- INTEGRATOR_STATE_ARGS, ccl_private const Ray *ccl_restrict ray)
+ KernelGlobals kg, IntegratorState state, ccl_private const Ray *ccl_restrict ray)
{
- INTEGRATOR_STATE_WRITE(shadow_ray, P) = ray->P;
- INTEGRATOR_STATE_WRITE(shadow_ray, D) = ray->D;
- INTEGRATOR_STATE_WRITE(shadow_ray, t) = ray->t;
- INTEGRATOR_STATE_WRITE(shadow_ray, time) = ray->time;
- INTEGRATOR_STATE_WRITE(shadow_ray, dP) = ray->dP;
+ INTEGRATOR_STATE_WRITE(state, shadow_ray, P) = ray->P;
+ INTEGRATOR_STATE_WRITE(state, shadow_ray, D) = ray->D;
+ INTEGRATOR_STATE_WRITE(state, shadow_ray, t) = ray->t;
+ INTEGRATOR_STATE_WRITE(state, shadow_ray, time) = ray->time;
+ INTEGRATOR_STATE_WRITE(state, shadow_ray, dP) = ray->dP;
}
-ccl_device_forceinline void integrator_state_read_shadow_ray(INTEGRATOR_STATE_CONST_ARGS,
+ccl_device_forceinline void integrator_state_read_shadow_ray(KernelGlobals kg,
+ ConstIntegratorState state,
ccl_private Ray *ccl_restrict ray)
{
- ray->P = INTEGRATOR_STATE(shadow_ray, P);
- ray->D = INTEGRATOR_STATE(shadow_ray, D);
- ray->t = INTEGRATOR_STATE(shadow_ray, t);
- ray->time = INTEGRATOR_STATE(shadow_ray, time);
- ray->dP = INTEGRATOR_STATE(shadow_ray, dP);
+ ray->P = INTEGRATOR_STATE(state, shadow_ray, P);
+ ray->D = INTEGRATOR_STATE(state, shadow_ray, D);
+ ray->t = INTEGRATOR_STATE(state, shadow_ray, t);
+ ray->time = INTEGRATOR_STATE(state, shadow_ray, time);
+ ray->dP = INTEGRATOR_STATE(state, shadow_ray, dP);
ray->dD = differential_zero_compact();
}
/* Intersection */
ccl_device_forceinline void integrator_state_write_isect(
- INTEGRATOR_STATE_ARGS, ccl_private const Intersection *ccl_restrict isect)
+ KernelGlobals kg, IntegratorState state, ccl_private const Intersection *ccl_restrict isect)
{
- INTEGRATOR_STATE_WRITE(isect, t) = isect->t;
- INTEGRATOR_STATE_WRITE(isect, u) = isect->u;
- INTEGRATOR_STATE_WRITE(isect, v) = isect->v;
- INTEGRATOR_STATE_WRITE(isect, object) = isect->object;
- INTEGRATOR_STATE_WRITE(isect, prim) = isect->prim;
- INTEGRATOR_STATE_WRITE(isect, type) = isect->type;
+ INTEGRATOR_STATE_WRITE(state, isect, t) = isect->t;
+ INTEGRATOR_STATE_WRITE(state, isect, u) = isect->u;
+ INTEGRATOR_STATE_WRITE(state, isect, v) = isect->v;
+ INTEGRATOR_STATE_WRITE(state, isect, object) = isect->object;
+ INTEGRATOR_STATE_WRITE(state, isect, prim) = isect->prim;
+ INTEGRATOR_STATE_WRITE(state, isect, type) = isect->type;
#ifdef __EMBREE__
- INTEGRATOR_STATE_WRITE(isect, Ng) = isect->Ng;
+ INTEGRATOR_STATE_WRITE(state, isect, Ng) = isect->Ng;
#endif
}
ccl_device_forceinline void integrator_state_read_isect(
- INTEGRATOR_STATE_CONST_ARGS, ccl_private Intersection *ccl_restrict isect)
+ KernelGlobals kg, ConstIntegratorState state, ccl_private Intersection *ccl_restrict isect)
{
- isect->prim = INTEGRATOR_STATE(isect, prim);
- isect->object = INTEGRATOR_STATE(isect, object);
- isect->type = INTEGRATOR_STATE(isect, type);
- isect->u = INTEGRATOR_STATE(isect, u);
- isect->v = INTEGRATOR_STATE(isect, v);
- isect->t = INTEGRATOR_STATE(isect, t);
+ isect->prim = INTEGRATOR_STATE(state, isect, prim);
+ isect->object = INTEGRATOR_STATE(state, isect, object);
+ isect->type = INTEGRATOR_STATE(state, isect, type);
+ isect->u = INTEGRATOR_STATE(state, isect, u);
+ isect->v = INTEGRATOR_STATE(state, isect, v);
+ isect->t = INTEGRATOR_STATE(state, isect, t);
#ifdef __EMBREE__
- isect->Ng = INTEGRATOR_STATE(isect, Ng);
+ isect->Ng = INTEGRATOR_STATE(state, isect, Ng);
#endif
}
-ccl_device_forceinline VolumeStack integrator_state_read_volume_stack(INTEGRATOR_STATE_CONST_ARGS,
+ccl_device_forceinline VolumeStack integrator_state_read_volume_stack(ConstIntegratorState state,
int i)
{
- VolumeStack entry = {INTEGRATOR_STATE_ARRAY(volume_stack, i, object),
- INTEGRATOR_STATE_ARRAY(volume_stack, i, shader)};
+ VolumeStack entry = {INTEGRATOR_STATE_ARRAY(state, volume_stack, i, object),
+ INTEGRATOR_STATE_ARRAY(state, volume_stack, i, shader)};
return entry;
}
-ccl_device_forceinline void integrator_state_write_volume_stack(INTEGRATOR_STATE_ARGS,
+ccl_device_forceinline void integrator_state_write_volume_stack(IntegratorState state,
int i,
VolumeStack entry)
{
- INTEGRATOR_STATE_ARRAY_WRITE(volume_stack, i, object) = entry.object;
- INTEGRATOR_STATE_ARRAY_WRITE(volume_stack, i, shader) = entry.shader;
+ INTEGRATOR_STATE_ARRAY_WRITE(state, volume_stack, i, object) = entry.object;
+ INTEGRATOR_STATE_ARRAY_WRITE(state, volume_stack, i, shader) = entry.shader;
}
-ccl_device_forceinline bool integrator_state_volume_stack_is_empty(INTEGRATOR_STATE_CONST_ARGS)
+ccl_device_forceinline bool integrator_state_volume_stack_is_empty(KernelGlobals kg,
+ ConstIntegratorState state)
{
return (kernel_data.kernel_features & KERNEL_FEATURE_VOLUME) ?
- INTEGRATOR_STATE_ARRAY(volume_stack, 0, shader) == SHADER_NONE :
+ INTEGRATOR_STATE_ARRAY(state, volume_stack, 0, shader) == SHADER_NONE :
true;
}
/* Shadow Intersection */
ccl_device_forceinline void integrator_state_write_shadow_isect(
- INTEGRATOR_STATE_ARGS, ccl_private const Intersection *ccl_restrict isect, const int index)
+ IntegratorState state, ccl_private const Intersection *ccl_restrict isect, const int index)
{
- INTEGRATOR_STATE_ARRAY_WRITE(shadow_isect, index, t) = isect->t;
- INTEGRATOR_STATE_ARRAY_WRITE(shadow_isect, index, u) = isect->u;
- INTEGRATOR_STATE_ARRAY_WRITE(shadow_isect, index, v) = isect->v;
- INTEGRATOR_STATE_ARRAY_WRITE(shadow_isect, index, object) = isect->object;
- INTEGRATOR_STATE_ARRAY_WRITE(shadow_isect, index, prim) = isect->prim;
- INTEGRATOR_STATE_ARRAY_WRITE(shadow_isect, index, type) = isect->type;
+ INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_isect, index, t) = isect->t;
+ INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_isect, index, u) = isect->u;
+ INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_isect, index, v) = isect->v;
+ INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_isect, index, object) = isect->object;
+ INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_isect, index, prim) = isect->prim;
+ INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_isect, index, type) = isect->type;
#ifdef __EMBREE__
- INTEGRATOR_STATE_ARRAY_WRITE(shadow_isect, index, Ng) = isect->Ng;
+ INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_isect, index, Ng) = isect->Ng;
#endif
}
ccl_device_forceinline void integrator_state_read_shadow_isect(
- INTEGRATOR_STATE_CONST_ARGS, ccl_private Intersection *ccl_restrict isect, const int index)
+ ConstIntegratorState state, ccl_private Intersection *ccl_restrict isect, const int index)
{
- isect->prim = INTEGRATOR_STATE_ARRAY(shadow_isect, index, prim);
- isect->object = INTEGRATOR_STATE_ARRAY(shadow_isect, index, object);
- isect->type = INTEGRATOR_STATE_ARRAY(shadow_isect, index, type);
- isect->u = INTEGRATOR_STATE_ARRAY(shadow_isect, index, u);
- isect->v = INTEGRATOR_STATE_ARRAY(shadow_isect, index, v);
- isect->t = INTEGRATOR_STATE_ARRAY(shadow_isect, index, t);
+ isect->prim = INTEGRATOR_STATE_ARRAY(state, shadow_isect, index, prim);
+ isect->object = INTEGRATOR_STATE_ARRAY(state, shadow_isect, index, object);
+ isect->type = INTEGRATOR_STATE_ARRAY(state, shadow_isect, index, type);
+ isect->u = INTEGRATOR_STATE_ARRAY(state, shadow_isect, index, u);
+ isect->v = INTEGRATOR_STATE_ARRAY(state, shadow_isect, index, v);
+ isect->t = INTEGRATOR_STATE_ARRAY(state, shadow_isect, index, t);
#ifdef __EMBREE__
- isect->Ng = INTEGRATOR_STATE_ARRAY(shadow_isect, index, Ng);
+ isect->Ng = INTEGRATOR_STATE_ARRAY(state, shadow_isect, index, Ng);
#endif
}
-ccl_device_forceinline void integrator_state_copy_volume_stack_to_shadow(INTEGRATOR_STATE_ARGS)
+ccl_device_forceinline void integrator_state_copy_volume_stack_to_shadow(KernelGlobals kg,
+ IntegratorState state)
{
if (kernel_data.kernel_features & KERNEL_FEATURE_VOLUME) {
int index = 0;
int shader;
do {
- shader = INTEGRATOR_STATE_ARRAY(volume_stack, index, shader);
+ shader = INTEGRATOR_STATE_ARRAY(state, volume_stack, index, shader);
- INTEGRATOR_STATE_ARRAY_WRITE(shadow_volume_stack, index, object) = INTEGRATOR_STATE_ARRAY(
- volume_stack, index, object);
- INTEGRATOR_STATE_ARRAY_WRITE(shadow_volume_stack, index, shader) = shader;
+ INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_volume_stack, index, object) =
+ INTEGRATOR_STATE_ARRAY(state, volume_stack, index, object);
+ INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_volume_stack, index, shader) = shader;
++index;
} while (shader != OBJECT_NONE);
@@ -169,27 +174,27 @@ ccl_device_forceinline void integrator_state_copy_volume_stack_to_shadow(INTEGRA
}
ccl_device_forceinline VolumeStack
-integrator_state_read_shadow_volume_stack(INTEGRATOR_STATE_CONST_ARGS, int i)
+integrator_state_read_shadow_volume_stack(ConstIntegratorState state, int i)
{
- VolumeStack entry = {INTEGRATOR_STATE_ARRAY(shadow_volume_stack, i, object),
- INTEGRATOR_STATE_ARRAY(shadow_volume_stack, i, shader)};
+ VolumeStack entry = {INTEGRATOR_STATE_ARRAY(state, shadow_volume_stack, i, object),
+ INTEGRATOR_STATE_ARRAY(state, shadow_volume_stack, i, shader)};
return entry;
}
ccl_device_forceinline bool integrator_state_shadow_volume_stack_is_empty(
- INTEGRATOR_STATE_CONST_ARGS)
+ KernelGlobals kg, ConstIntegratorState state)
{
return (kernel_data.kernel_features & KERNEL_FEATURE_VOLUME) ?
- INTEGRATOR_STATE_ARRAY(shadow_volume_stack, 0, shader) == SHADER_NONE :
+ INTEGRATOR_STATE_ARRAY(state, shadow_volume_stack, 0, shader) == SHADER_NONE :
true;
}
-ccl_device_forceinline void integrator_state_write_shadow_volume_stack(INTEGRATOR_STATE_ARGS,
+ccl_device_forceinline void integrator_state_write_shadow_volume_stack(IntegratorState state,
int i,
VolumeStack entry)
{
- INTEGRATOR_STATE_ARRAY_WRITE(shadow_volume_stack, i, object) = entry.object;
- INTEGRATOR_STATE_ARRAY_WRITE(shadow_volume_stack, i, shader) = entry.shader;
+ INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_volume_stack, i, object) = entry.object;
+ INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_volume_stack, i, shader) = entry.shader;
}
#if defined(__KERNEL_GPU__)
@@ -244,15 +249,16 @@ ccl_device_inline void integrator_state_move(const IntegratorState to_state,
{
integrator_state_copy_only(to_state, state);
- INTEGRATOR_STATE_WRITE(path, queued_kernel) = 0;
- INTEGRATOR_STATE_WRITE(shadow_path, queued_kernel) = 0;
+ INTEGRATOR_STATE_WRITE(state, path, queued_kernel) = 0;
+ INTEGRATOR_STATE_WRITE(state, shadow_path, queued_kernel) = 0;
}
#endif
/* NOTE: Leaves kernel scheduling information untouched. Use INIT semantic for one of the paths
* after this function. */
-ccl_device_inline void integrator_state_shadow_catcher_split(INTEGRATOR_STATE_ARGS)
+ccl_device_inline void integrator_state_shadow_catcher_split(KernelGlobals kg,
+ IntegratorState state)
{
#if defined(__KERNEL_GPU__)
const IntegratorState to_state = atomic_fetch_and_add_uint32(