Cleanup: minor refactoring in preparation of main and shadow path decoupling

Ref D12889
This commit is contained in:
Brecht Van Lommel 2021-10-18 18:25:56 +02:00
parent 2430f75279
commit a9cb330815
4 changed files with 24 additions and 16 deletions

View File

@ -56,7 +56,7 @@ ccl_device_forceinline bool integrate_surface_holdout(KernelGlobals kg,
if (kernel_data.background.transparent) {
const float3 throughput = INTEGRATOR_STATE(state, path, throughput);
const float transparent = average(holdout_weight * throughput);
kernel_accum_transparent(kg, state, path_flag, transparent, render_buffer);
kernel_accum_holdout(kg, state, path_flag, transparent, render_buffer);
}
if (isequal_float3(holdout_weight, one_float3())) {
return false;
@ -385,6 +385,14 @@ ccl_device bool integrate_surface(KernelGlobals kg,
/* Evaluate shader. */
PROFILING_EVENT(PROFILING_SHADE_SURFACE_EVAL);
shader_eval_surface<node_feature_mask>(kg, state, &sd, render_buffer, path_flag);
/* Initialize additional RNG for BSDFs. */
if (sd.flag & SD_BSDF_NEEDS_LCG) {
sd.lcg_state = lcg_state_init(INTEGRATOR_STATE(state, path, rng_hash),
INTEGRATOR_STATE(state, path, rng_offset),
INTEGRATOR_STATE(state, path, sample),
0xb4bc3953);
}
}
#ifdef __SUBSURFACE__

View File

@ -473,10 +473,8 @@ ccl_device_inline void kernel_accum_transparent(KernelGlobals kg,
ConstIntegratorState state,
const uint32_t path_flag,
const float transparent,
ccl_global float *ccl_restrict render_buffer)
ccl_global float *ccl_restrict buffer)
{
ccl_global float *buffer = kernel_accum_pixel_render_buffer(kg, state, render_buffer);
if (kernel_data.film.light_pass_flag & PASSMASK(COMBINED)) {
kernel_write_pass_float(buffer + kernel_data.film.pass_combined + 3, transparent);
}
@ -484,6 +482,17 @@ ccl_device_inline void kernel_accum_transparent(KernelGlobals kg,
kernel_accum_shadow_catcher_transparent_only(kg, path_flag, transparent, buffer);
}
/* Write holdout to render buffer. */
ccl_device_inline void kernel_accum_holdout(KernelGlobals kg,
ConstIntegratorState state,
const uint32_t path_flag,
const float transparent,
ccl_global float *ccl_restrict render_buffer)
{
ccl_global float *buffer = kernel_accum_pixel_render_buffer(kg, state, render_buffer);
kernel_accum_transparent(kg, state, path_flag, transparent, buffer);
}
/* Write background contribution to render buffer.
*
* Includes transparency, matching kernel_accum_transparent. */
@ -501,7 +510,7 @@ ccl_device_inline void kernel_accum_background(KernelGlobals kg,
const uint32_t path_flag = INTEGRATOR_STATE(state, path, flag);
if (is_transparent_background_ray) {
kernel_accum_transparent(kg, state, path_flag, transparent, render_buffer);
kernel_accum_transparent(kg, state, path_flag, transparent, buffer);
}
else {
const int sample = INTEGRATOR_STATE(state, path, sample);

View File

@ -76,7 +76,8 @@ ccl_device void kernel_background_evaluate(KernelGlobals kg,
/* Evaluate shader.
* This is being evaluated for all BSDFs, so path flag does not contain a specific type. */
const uint32_t path_flag = PATH_RAY_EMISSION;
shader_eval_surface<KERNEL_FEATURE_NODE_MASK_SURFACE_LIGHT>(
shader_eval_surface<KERNEL_FEATURE_NODE_MASK_SURFACE_LIGHT &
~(KERNEL_FEATURE_NODE_RAYTRACE | KERNEL_FEATURE_NODE_LIGHT_PATH)>(
kg, INTEGRATOR_STATE_NULL, &sd, NULL, path_flag);
float3 color = shader_background_eval(&sd);

View File

@ -625,16 +625,6 @@ ccl_device void shader_eval_surface(KernelGlobals kg,
}
#endif
}
IF_KERNEL_NODES_FEATURE(BSDF)
{
if (sd->flag & SD_BSDF_NEEDS_LCG) {
sd->lcg_state = lcg_state_init(INTEGRATOR_STATE(state, path, rng_hash),
INTEGRATOR_STATE(state, path, rng_offset),
INTEGRATOR_STATE(state, path, sample),
0xb4bc3953);
}
}
}
/* Volume */