forked from bartvdbraak/blender
Cycles: Avoid redundant call to volume_stack_is_heterogeneous() for Distance Sampling.
This commit is contained in:
parent
c89287e057
commit
031620aba2
@ -149,7 +149,7 @@ ccl_device void kernel_path_indirect(KernelGlobals *kg, RNG *rng, Ray ray,
|
|||||||
/* integrate along volume segment with distance sampling */
|
/* integrate along volume segment with distance sampling */
|
||||||
ShaderData volume_sd;
|
ShaderData volume_sd;
|
||||||
VolumeIntegrateResult result = kernel_volume_integrate(
|
VolumeIntegrateResult result = kernel_volume_integrate(
|
||||||
kg, &state, &volume_sd, &volume_ray, L, &throughput, rng);
|
kg, &state, &volume_sd, &volume_ray, L, &throughput, rng, heterogeneous);
|
||||||
|
|
||||||
#ifdef __VOLUME_SCATTER__
|
#ifdef __VOLUME_SCATTER__
|
||||||
if(result == VOLUME_PATH_SCATTERED) {
|
if(result == VOLUME_PATH_SCATTERED) {
|
||||||
@ -536,7 +536,7 @@ ccl_device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample,
|
|||||||
/* integrate along volume segment with distance sampling */
|
/* integrate along volume segment with distance sampling */
|
||||||
ShaderData volume_sd;
|
ShaderData volume_sd;
|
||||||
VolumeIntegrateResult result = kernel_volume_integrate(
|
VolumeIntegrateResult result = kernel_volume_integrate(
|
||||||
kg, &state, &volume_sd, &volume_ray, &L, &throughput, rng);
|
kg, &state, &volume_sd, &volume_ray, &L, &throughput, rng, heterogeneous);
|
||||||
|
|
||||||
#ifdef __VOLUME_SCATTER__
|
#ifdef __VOLUME_SCATTER__
|
||||||
if(result == VOLUME_PATH_SCATTERED) {
|
if(result == VOLUME_PATH_SCATTERED) {
|
||||||
@ -816,9 +816,10 @@ ccl_device float4 kernel_branched_path_integrate(KernelGlobals *kg, RNG *rng, in
|
|||||||
Ray volume_ray = ray;
|
Ray volume_ray = ray;
|
||||||
volume_ray.t = (hit)? isect.t: FLT_MAX;
|
volume_ray.t = (hit)? isect.t: FLT_MAX;
|
||||||
|
|
||||||
|
bool heterogeneous = volume_stack_is_heterogeneous(kg, state.volume_stack);
|
||||||
|
|
||||||
#ifdef __VOLUME_DECOUPLED__
|
#ifdef __VOLUME_DECOUPLED__
|
||||||
/* decoupled ray marching only supported on CPU */
|
/* decoupled ray marching only supported on CPU */
|
||||||
bool heterogeneous = volume_stack_is_heterogeneous(kg, state.volume_stack);
|
|
||||||
|
|
||||||
/* cache steps along volume for repeated sampling */
|
/* cache steps along volume for repeated sampling */
|
||||||
VolumeSegment volume_segment;
|
VolumeSegment volume_segment;
|
||||||
@ -901,7 +902,7 @@ ccl_device float4 kernel_branched_path_integrate(KernelGlobals *kg, RNG *rng, in
|
|||||||
path_state_branch(&ps, j, num_samples);
|
path_state_branch(&ps, j, num_samples);
|
||||||
|
|
||||||
VolumeIntegrateResult result = kernel_volume_integrate(
|
VolumeIntegrateResult result = kernel_volume_integrate(
|
||||||
kg, &ps, &volume_sd, &volume_ray, &L, &tp, rng);
|
kg, &ps, &volume_sd, &volume_ray, &L, &tp, rng, heterogeneous);
|
||||||
|
|
||||||
#ifdef __VOLUME_SCATTER__
|
#ifdef __VOLUME_SCATTER__
|
||||||
if(result == VOLUME_PATH_SCATTERED) {
|
if(result == VOLUME_PATH_SCATTERED) {
|
||||||
|
@ -560,13 +560,12 @@ ccl_device VolumeIntegrateResult kernel_volume_integrate_heterogeneous_distance(
|
|||||||
* between the endpoints. distance sampling is used to decide if we will
|
* between the endpoints. distance sampling is used to decide if we will
|
||||||
* scatter or not. */
|
* scatter or not. */
|
||||||
ccl_device_noinline VolumeIntegrateResult kernel_volume_integrate(KernelGlobals *kg,
|
ccl_device_noinline VolumeIntegrateResult kernel_volume_integrate(KernelGlobals *kg,
|
||||||
PathState *state, ShaderData *sd, Ray *ray, PathRadiance *L, float3 *throughput, RNG *rng)
|
PathState *state, ShaderData *sd, Ray *ray, PathRadiance *L, float3 *throughput, RNG *rng, bool heterogeneous)
|
||||||
{
|
{
|
||||||
/* workaround to fix correlation bug in T38710, can find better solution
|
/* workaround to fix correlation bug in T38710, can find better solution
|
||||||
* in random number generator later, for now this is done here to not impact
|
* in random number generator later, for now this is done here to not impact
|
||||||
* performance of rendering without volumes */
|
* performance of rendering without volumes */
|
||||||
RNG tmp_rng = cmj_hash(*rng, state->rng_offset);
|
RNG tmp_rng = cmj_hash(*rng, state->rng_offset);
|
||||||
bool heterogeneous = volume_stack_is_heterogeneous(kg, state->volume_stack);
|
|
||||||
|
|
||||||
shader_setup_from_volume(kg, sd, ray, state->bounce, state->transparent_bounce);
|
shader_setup_from_volume(kg, sd, ray, state->bounce, state->transparent_bounce);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user