diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-04-02 20:37:28 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-04-02 20:37:28 +0400 |
commit | 5c74e6dae2826774b7ff36295d6499a5d45d1060 (patch) | |
tree | 09198dcc04581fc20f698559dceedc5105070fb6 /intern | |
parent | be1a5a23284910c1bf1a9c635e34f51a5b22940f (diff) |
Cycles: small code cleanup + fix SSS closure mixed with other closures doing
a bit too much work.
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/kernel/kernel_displace.h | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_emission.h | 3 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_path.h | 35 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_shader.h | 7 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_subsurface.h | 1 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_types.h | 2 |
6 files changed, 10 insertions, 40 deletions
diff --git a/intern/cycles/kernel/kernel_displace.h b/intern/cycles/kernel/kernel_displace.h index fc2be342e02..5f95e0c2e3b 100644 --- a/intern/cycles/kernel/kernel_displace.h +++ b/intern/cycles/kernel/kernel_displace.h @@ -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); } - shader_release(kg, &sd); - /* write output */ output[i] = make_float4(out.x, out.y, out.z, 0.0f); } diff --git a/intern/cycles/kernel/kernel_emission.h b/intern/cycles/kernel/kernel_emission.h index 9787af535bb..7d7494657e2 100644 --- a/intern/cycles/kernel/kernel_emission.h +++ b/intern/cycles/kernel/kernel_emission.h @@ -69,8 +69,6 @@ __device_noinline float3 direct_emissive_eval(KernelGlobals *kg, float rando, eval *= ls->eval_fac; - shader_release(kg, &sd); - return eval; } @@ -207,7 +205,6 @@ __device_noinline float3 indirect_background(KernelGlobals *kg, Ray *ray, int pa ShaderData sd; shader_setup_from_background(kg, &sd, ray); float3 L = shader_eval_background(kg, &sd, path_flag, SHADER_CONTEXT_EMISSION); - shader_release(kg, &sd); #ifdef __BACKGROUND_MIS__ /* check if background light exists or if we should skip pdf */ diff --git a/intern/cycles/kernel/kernel_path.h b/intern/cycles/kernel/kernel_path.h index bfa44930108..f64a4306aeb 100644 --- a/intern/cycles/kernel/kernel_path.h +++ b/intern/cycles/kernel/kernel_path.h @@ -216,8 +216,6 @@ __device_inline bool shadow_blocked(KernelGlobals *kg, PathState *state, Ray *ra if(ray->t != FLT_MAX) ray->D = normalize_len(Pend - ray->P, &ray->t); - shader_release(kg, &sd); - bounce++; } } @@ -327,10 +325,8 @@ __device float4 kernel_path_progressive(KernelGlobals *kg, RNG *rng, int sample, L_transparent += average(holdout_weight*throughput); } - if(sd.flag & SD_HOLDOUT_MASK) { - shader_release(kg, &sd); + if(sd.flag & SD_HOLDOUT_MASK) break; - } } #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 terminate = path_rng(kg, rng, sample, rng_offset + PRNG_TERMINATE); - if(terminate >= probability) { - shader_release(kg, &sd); + if(terminate >= probability) break; - } throughput /= probability; @@ -437,10 +431,8 @@ __device float4 kernel_path_progressive(KernelGlobals *kg, RNG *rng, int sample, #endif /* no BSDF? we can stop here */ - if(!(sd.flag & SD_BSDF)) { - shader_release(kg, &sd); + if(!(sd.flag & SD_BSDF)) break; - } /* sample BSDF */ 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, &bsdf_omega_in, &bsdf_domega_in, &bsdf_pdf); - shader_release(kg, &sd); - if(bsdf_pdf == 0.0f || bsdf_eval_is_zero(&bsdf_eval)) 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 terminate = path_rng(kg, rng, sample, rng_offset + PRNG_TERMINATE); - if(terminate >= probability) { - shader_release(kg, &sd); + if(terminate >= probability) break; - } throughput /= probability; @@ -668,10 +656,8 @@ __device void kernel_path_indirect(KernelGlobals *kg, RNG *rng, int sample, Ray #endif /* no BSDF? we can stop here */ - if(!(sd.flag & SD_BSDF)) { - shader_release(kg, &sd); + if(!(sd.flag & SD_BSDF)) break; - } /* sample BSDF */ 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, &bsdf_omega_in, &bsdf_domega_in, &bsdf_pdf); - shader_release(kg, &sd); - if(bsdf_pdf == 0.0f || bsdf_eval_is_zero(&bsdf_eval)) break; @@ -967,10 +951,8 @@ __device float4 kernel_path_non_progressive(KernelGlobals *kg, RNG *rng, int sam L_transparent += average(holdout_weight*throughput); } - if(sd.flag & SD_HOLDOUT_MASK) { - shader_release(kg, &sd); + if(sd.flag & SD_HOLDOUT_MASK) break; - } } #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 terminate = path_rng(kg, rng, sample, rng_offset + PRNG_TERMINATE); - if(terminate >= probability) { - shader_release(kg, &sd); + if(terminate >= probability) break; - } throughput /= probability; } @@ -1033,7 +1013,6 @@ __device float4 kernel_path_non_progressive(KernelGlobals *kg, RNG *rng, int sam /* continue in case of transparency */ throughput *= shader_bsdf_transparency(kg, &sd); - shader_release(kg, &sd); if(is_zero(throughput)) break; diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h index b5acf4824e3..444543bf709 100644 --- a/intern/cycles/kernel/kernel_shader.h +++ b/intern/cycles/kernel/kernel_shader.h @@ -925,12 +925,5 @@ __device void shader_merge_closures(KernelGlobals *kg, ShaderData *sd) } #endif -/* Free ShaderData */ - -__device void shader_release(KernelGlobals *kg, ShaderData *sd) -{ - /* nothing to do currently */ -} - CCL_NAMESPACE_END diff --git a/intern/cycles/kernel/kernel_subsurface.h b/intern/cycles/kernel/kernel_subsurface.h index 7dd5c2d4475..cd4d4179410 100644 --- a/intern/cycles/kernel/kernel_subsurface.h +++ b/intern/cycles/kernel/kernel_subsurface.h @@ -143,6 +143,7 @@ __device void subsurface_scatter_setup_diffuse_bsdf(ShaderData *sd, float3 weigh sc->data0 = 0.0f; sc->data1 = 0.0f; sc->N = sd->N; + sd->flag &= ~SD_CLOSURE_FLAGS; sd->flag |= bsdf_diffuse_setup(sc); sd->randb_closure = 0.0f; diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h index 9c126074e83..526609d0506 100644 --- a/intern/cycles/kernel/kernel_types.h +++ b/intern/cycles/kernel/kernel_types.h @@ -452,6 +452,8 @@ enum ShaderDataFlag { SD_VOLUME = 128, /* have volume 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 */ SD_SAMPLE_AS_LIGHT = 512, /* direct light sample */ SD_HAS_SURFACE_TRANSPARENT = 1024, /* has surface transparency */ |