forked from bartvdbraak/blender
Cycles: small code cleanup + fix SSS closure mixed with other closures doing
a bit too much work.
This commit is contained in:
parent
be1a5a2328
commit
5c74e6dae2
@ -66,8 +66,6 @@ __device void kernel_shader_evaluate(KernelGlobals *kg, uint4 *input, float4 *ou
|
|||||||
out = shader_eval_background(kg, &sd, flag, SHADER_CONTEXT_MAIN);
|
out = shader_eval_background(kg, &sd, flag, SHADER_CONTEXT_MAIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
shader_release(kg, &sd);
|
|
||||||
|
|
||||||
/* write output */
|
/* write output */
|
||||||
output[i] = make_float4(out.x, out.y, out.z, 0.0f);
|
output[i] = make_float4(out.x, out.y, out.z, 0.0f);
|
||||||
}
|
}
|
||||||
|
@ -69,8 +69,6 @@ __device_noinline float3 direct_emissive_eval(KernelGlobals *kg, float rando,
|
|||||||
|
|
||||||
eval *= ls->eval_fac;
|
eval *= ls->eval_fac;
|
||||||
|
|
||||||
shader_release(kg, &sd);
|
|
||||||
|
|
||||||
return eval;
|
return eval;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,7 +205,6 @@ __device_noinline float3 indirect_background(KernelGlobals *kg, Ray *ray, int pa
|
|||||||
ShaderData sd;
|
ShaderData sd;
|
||||||
shader_setup_from_background(kg, &sd, ray);
|
shader_setup_from_background(kg, &sd, ray);
|
||||||
float3 L = shader_eval_background(kg, &sd, path_flag, SHADER_CONTEXT_EMISSION);
|
float3 L = shader_eval_background(kg, &sd, path_flag, SHADER_CONTEXT_EMISSION);
|
||||||
shader_release(kg, &sd);
|
|
||||||
|
|
||||||
#ifdef __BACKGROUND_MIS__
|
#ifdef __BACKGROUND_MIS__
|
||||||
/* check if background light exists or if we should skip pdf */
|
/* check if background light exists or if we should skip pdf */
|
||||||
|
@ -216,8 +216,6 @@ __device_inline bool shadow_blocked(KernelGlobals *kg, PathState *state, Ray *ra
|
|||||||
if(ray->t != FLT_MAX)
|
if(ray->t != FLT_MAX)
|
||||||
ray->D = normalize_len(Pend - ray->P, &ray->t);
|
ray->D = normalize_len(Pend - ray->P, &ray->t);
|
||||||
|
|
||||||
shader_release(kg, &sd);
|
|
||||||
|
|
||||||
bounce++;
|
bounce++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -327,10 +325,8 @@ __device float4 kernel_path_progressive(KernelGlobals *kg, RNG *rng, int sample,
|
|||||||
L_transparent += average(holdout_weight*throughput);
|
L_transparent += average(holdout_weight*throughput);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sd.flag & SD_HOLDOUT_MASK) {
|
if(sd.flag & SD_HOLDOUT_MASK)
|
||||||
shader_release(kg, &sd);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -349,10 +345,8 @@ __device float4 kernel_path_progressive(KernelGlobals *kg, RNG *rng, int sample,
|
|||||||
float probability = path_state_terminate_probability(kg, &state, throughput);
|
float probability = path_state_terminate_probability(kg, &state, throughput);
|
||||||
float terminate = path_rng(kg, rng, sample, rng_offset + PRNG_TERMINATE);
|
float terminate = path_rng(kg, rng, sample, rng_offset + PRNG_TERMINATE);
|
||||||
|
|
||||||
if(terminate >= probability) {
|
if(terminate >= probability)
|
||||||
shader_release(kg, &sd);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
throughput /= probability;
|
throughput /= probability;
|
||||||
|
|
||||||
@ -437,10 +431,8 @@ __device float4 kernel_path_progressive(KernelGlobals *kg, RNG *rng, int sample,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* no BSDF? we can stop here */
|
/* no BSDF? we can stop here */
|
||||||
if(!(sd.flag & SD_BSDF)) {
|
if(!(sd.flag & SD_BSDF))
|
||||||
shader_release(kg, &sd);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
/* sample BSDF */
|
/* sample BSDF */
|
||||||
float bsdf_pdf;
|
float bsdf_pdf;
|
||||||
@ -454,8 +446,6 @@ __device float4 kernel_path_progressive(KernelGlobals *kg, RNG *rng, int sample,
|
|||||||
label = shader_bsdf_sample(kg, &sd, bsdf_u, bsdf_v, &bsdf_eval,
|
label = shader_bsdf_sample(kg, &sd, bsdf_u, bsdf_v, &bsdf_eval,
|
||||||
&bsdf_omega_in, &bsdf_domega_in, &bsdf_pdf);
|
&bsdf_omega_in, &bsdf_domega_in, &bsdf_pdf);
|
||||||
|
|
||||||
shader_release(kg, &sd);
|
|
||||||
|
|
||||||
if(bsdf_pdf == 0.0f || bsdf_eval_is_zero(&bsdf_eval))
|
if(bsdf_pdf == 0.0f || bsdf_eval_is_zero(&bsdf_eval))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -579,10 +569,8 @@ __device void kernel_path_indirect(KernelGlobals *kg, RNG *rng, int sample, Ray
|
|||||||
float probability = path_state_terminate_probability(kg, &state, throughput*num_samples_adjust);
|
float probability = path_state_terminate_probability(kg, &state, throughput*num_samples_adjust);
|
||||||
float terminate = path_rng(kg, rng, sample, rng_offset + PRNG_TERMINATE);
|
float terminate = path_rng(kg, rng, sample, rng_offset + PRNG_TERMINATE);
|
||||||
|
|
||||||
if(terminate >= probability) {
|
if(terminate >= probability)
|
||||||
shader_release(kg, &sd);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
throughput /= probability;
|
throughput /= probability;
|
||||||
|
|
||||||
@ -668,10 +656,8 @@ __device void kernel_path_indirect(KernelGlobals *kg, RNG *rng, int sample, Ray
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* no BSDF? we can stop here */
|
/* no BSDF? we can stop here */
|
||||||
if(!(sd.flag & SD_BSDF)) {
|
if(!(sd.flag & SD_BSDF))
|
||||||
shader_release(kg, &sd);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
/* sample BSDF */
|
/* sample BSDF */
|
||||||
float bsdf_pdf;
|
float bsdf_pdf;
|
||||||
@ -685,8 +671,6 @@ __device void kernel_path_indirect(KernelGlobals *kg, RNG *rng, int sample, Ray
|
|||||||
label = shader_bsdf_sample(kg, &sd, bsdf_u, bsdf_v, &bsdf_eval,
|
label = shader_bsdf_sample(kg, &sd, bsdf_u, bsdf_v, &bsdf_eval,
|
||||||
&bsdf_omega_in, &bsdf_domega_in, &bsdf_pdf);
|
&bsdf_omega_in, &bsdf_domega_in, &bsdf_pdf);
|
||||||
|
|
||||||
shader_release(kg, &sd);
|
|
||||||
|
|
||||||
if(bsdf_pdf == 0.0f || bsdf_eval_is_zero(&bsdf_eval))
|
if(bsdf_pdf == 0.0f || bsdf_eval_is_zero(&bsdf_eval))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -967,10 +951,8 @@ __device float4 kernel_path_non_progressive(KernelGlobals *kg, RNG *rng, int sam
|
|||||||
L_transparent += average(holdout_weight*throughput);
|
L_transparent += average(holdout_weight*throughput);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sd.flag & SD_HOLDOUT_MASK) {
|
if(sd.flag & SD_HOLDOUT_MASK)
|
||||||
shader_release(kg, &sd);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -990,10 +972,8 @@ __device float4 kernel_path_non_progressive(KernelGlobals *kg, RNG *rng, int sam
|
|||||||
float probability = path_state_terminate_probability(kg, &state, throughput);
|
float probability = path_state_terminate_probability(kg, &state, throughput);
|
||||||
float terminate = path_rng(kg, rng, sample, rng_offset + PRNG_TERMINATE);
|
float terminate = path_rng(kg, rng, sample, rng_offset + PRNG_TERMINATE);
|
||||||
|
|
||||||
if(terminate >= probability) {
|
if(terminate >= probability)
|
||||||
shader_release(kg, &sd);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
throughput /= probability;
|
throughput /= probability;
|
||||||
}
|
}
|
||||||
@ -1033,7 +1013,6 @@ __device float4 kernel_path_non_progressive(KernelGlobals *kg, RNG *rng, int sam
|
|||||||
|
|
||||||
/* continue in case of transparency */
|
/* continue in case of transparency */
|
||||||
throughput *= shader_bsdf_transparency(kg, &sd);
|
throughput *= shader_bsdf_transparency(kg, &sd);
|
||||||
shader_release(kg, &sd);
|
|
||||||
|
|
||||||
if(is_zero(throughput))
|
if(is_zero(throughput))
|
||||||
break;
|
break;
|
||||||
|
@ -925,12 +925,5 @@ __device void shader_merge_closures(KernelGlobals *kg, ShaderData *sd)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Free ShaderData */
|
|
||||||
|
|
||||||
__device void shader_release(KernelGlobals *kg, ShaderData *sd)
|
|
||||||
{
|
|
||||||
/* nothing to do currently */
|
|
||||||
}
|
|
||||||
|
|
||||||
CCL_NAMESPACE_END
|
CCL_NAMESPACE_END
|
||||||
|
|
||||||
|
@ -143,6 +143,7 @@ __device void subsurface_scatter_setup_diffuse_bsdf(ShaderData *sd, float3 weigh
|
|||||||
sc->data0 = 0.0f;
|
sc->data0 = 0.0f;
|
||||||
sc->data1 = 0.0f;
|
sc->data1 = 0.0f;
|
||||||
sc->N = sd->N;
|
sc->N = sd->N;
|
||||||
|
sd->flag &= ~SD_CLOSURE_FLAGS;
|
||||||
sd->flag |= bsdf_diffuse_setup(sc);
|
sd->flag |= bsdf_diffuse_setup(sc);
|
||||||
sd->randb_closure = 0.0f;
|
sd->randb_closure = 0.0f;
|
||||||
|
|
||||||
|
@ -452,6 +452,8 @@ enum ShaderDataFlag {
|
|||||||
SD_VOLUME = 128, /* have volume closure? */
|
SD_VOLUME = 128, /* have volume closure? */
|
||||||
SD_AO = 256, /* have ao closure? */
|
SD_AO = 256, /* have ao closure? */
|
||||||
|
|
||||||
|
SD_CLOSURE_FLAGS = (SD_EMISSION|SD_BSDF|SD_BSDF_HAS_EVAL|SD_BSDF_GLOSSY|SD_BSSRDF|SD_HOLDOUT|SD_VOLUME|SD_AO),
|
||||||
|
|
||||||
/* shader flags */
|
/* shader flags */
|
||||||
SD_SAMPLE_AS_LIGHT = 512, /* direct light sample */
|
SD_SAMPLE_AS_LIGHT = 512, /* direct light sample */
|
||||||
SD_HAS_SURFACE_TRANSPARENT = 1024, /* has surface transparency */
|
SD_HAS_SURFACE_TRANSPARENT = 1024, /* has surface transparency */
|
||||||
|
Loading…
Reference in New Issue
Block a user