Fix Cycles speed regression after dynamic volume stack change
Only copy required part of volume stack instead of entire stack. Solves time regression introduced by D12759 and avoids need in implementing volume stack calculation to exactly match what the path tracing will do (as well as potentially makes scenes with a lot of volumes ans a tiny bit of deeply nested ones render faster). Still need to look into memory aspect of the regression, but that is for separate patch. Ref T92014 Maniphest Tasks: T92014 Differential Revision: https://developer.blender.org/D12790
This commit is contained in:
parent
ff9587d28e
commit
f01c4f27f9
Notes:
blender-bot
2023-02-13 17:29:53 +01:00
Referenced by issue #92014, Cycles big regression GPU performance 40% and 2x more memory.
|
@ -155,12 +155,17 @@ ccl_device_forceinline void integrator_state_read_shadow_isect(INTEGRATOR_STATE_
|
|||
ccl_device_forceinline void integrator_state_copy_volume_stack_to_shadow(INTEGRATOR_STATE_ARGS)
|
||||
{
|
||||
if (kernel_data.kernel_features & KERNEL_FEATURE_VOLUME) {
|
||||
for (int i = 0; i < kernel_data.volume_stack_size; i++) {
|
||||
INTEGRATOR_STATE_ARRAY_WRITE(shadow_volume_stack, i, object) = INTEGRATOR_STATE_ARRAY(
|
||||
volume_stack, i, object);
|
||||
INTEGRATOR_STATE_ARRAY_WRITE(shadow_volume_stack, i, shader) = INTEGRATOR_STATE_ARRAY(
|
||||
volume_stack, i, shader);
|
||||
}
|
||||
int index = 0;
|
||||
int shader;
|
||||
do {
|
||||
shader = INTEGRATOR_STATE_ARRAY(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;
|
||||
|
||||
++index;
|
||||
} while (shader != OBJECT_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue