diff options
author | Brecht Van Lommel <brecht@blender.org> | 2021-10-18 19:25:56 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2021-10-18 20:02:10 +0300 |
commit | a9cb33081506f14ffb693e3b82742a940b6c80b2 (patch) | |
tree | eebf54a3072307af581e1964f153d3279559617a /intern/cycles/kernel | |
parent | 2430f752797b83cd43892f656f5297fd6e0bb619 (diff) |
Cleanup: minor refactoring in preparation of main and shadow path decoupling
Ref D12889
Diffstat (limited to 'intern/cycles/kernel')
-rw-r--r-- | intern/cycles/kernel/integrator/integrator_shade_surface.h | 10 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_accumulate.h | 17 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_bake.h | 3 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_shader.h | 10 |
4 files changed, 24 insertions, 16 deletions
diff --git a/intern/cycles/kernel/integrator/integrator_shade_surface.h b/intern/cycles/kernel/integrator/integrator_shade_surface.h index bbf613a669e..08580645984 100644 --- a/intern/cycles/kernel/integrator/integrator_shade_surface.h +++ b/intern/cycles/kernel/integrator/integrator_shade_surface.h @@ -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__ diff --git a/intern/cycles/kernel/kernel_accumulate.h b/intern/cycles/kernel/kernel_accumulate.h index d4bb1ef8685..5f32150d33c 100644 --- a/intern/cycles/kernel/kernel_accumulate.h +++ b/intern/cycles/kernel/kernel_accumulate.h @@ -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); diff --git a/intern/cycles/kernel/kernel_bake.h b/intern/cycles/kernel/kernel_bake.h index 25b8ca55ead..1473e9ba8bf 100644 --- a/intern/cycles/kernel/kernel_bake.h +++ b/intern/cycles/kernel/kernel_bake.h @@ -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); diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h index 4eded9039bd..4a5a5309c61 100644 --- a/intern/cycles/kernel/kernel_shader.h +++ b/intern/cycles/kernel/kernel_shader.h @@ -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 */ |