diff options
Diffstat (limited to 'intern/cycles/kernel/kernel_shader.h')
-rw-r--r-- | intern/cycles/kernel/kernel_shader.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h index af883aa715b..4b2e675bb21 100644 --- a/intern/cycles/kernel/kernel_shader.h +++ b/intern/cycles/kernel/kernel_shader.h @@ -54,6 +54,8 @@ ccl_device_noinline void shader_setup_from_ray(KernelGlobals *kg, const Intersection *isect, const Ray *ray) { + PROFILING_INIT(kg, PROFILING_SHADER_SETUP); + #ifdef __INSTANCING__ sd->object = (isect->object == PRIM_NONE)? kernel_tex_fetch(__prim_object, isect->prim): isect->object; #endif @@ -147,6 +149,9 @@ ccl_device_noinline void shader_setup_from_ray(KernelGlobals *kg, differential_incoming(&sd->dI, ray->dD); differential_dudv(&sd->du, &sd->dv, sd->dPdu, sd->dPdv, sd->dP, sd->Ng); #endif + + PROFILING_SHADER(sd->shader); + PROFILING_OBJECT(sd->object); } /* ShaderData setup from BSSRDF scatter */ @@ -163,6 +168,8 @@ void shader_setup_from_subsurface( const Intersection *isect, const Ray *ray) { + PROFILING_INIT(kg, PROFILING_SHADER_SETUP); + const bool backfacing = sd->flag & SD_BACKFACING; /* object, matrices, time, ray_length stay the same */ @@ -233,6 +240,8 @@ void shader_setup_from_subsurface( differential_dudv(&sd->du, &sd->dv, sd->dPdu, sd->dPdv, sd->dP, sd->Ng); /* don't modify dP and dI */ # endif + + PROFILING_SHADER(sd->shader); } #endif @@ -249,6 +258,8 @@ ccl_device_inline void shader_setup_from_sample(KernelGlobals *kg, bool object_space, int lamp) { + PROFILING_INIT(kg, PROFILING_SHADER_SETUP); + /* vectors */ sd->P = P; sd->N = Ng; @@ -353,6 +364,9 @@ ccl_device_inline void shader_setup_from_sample(KernelGlobals *kg, sd->du = differential_zero(); sd->dv = differential_zero(); #endif + + PROFILING_SHADER(sd->shader); + PROFILING_OBJECT(sd->object); } /* ShaderData setup for displacement */ @@ -380,6 +394,8 @@ ccl_device void shader_setup_from_displace(KernelGlobals *kg, ShaderData *sd, ccl_device_inline void shader_setup_from_background(KernelGlobals *kg, ShaderData *sd, const Ray *ray) { + PROFILING_INIT(kg, PROFILING_SHADER_SETUP); + /* vectors */ sd->P = ray->D; sd->N = -ray->D; @@ -414,6 +430,9 @@ ccl_device_inline void shader_setup_from_background(KernelGlobals *kg, ShaderDat sd->du = differential_zero(); sd->dv = differential_zero(); #endif + + PROFILING_SHADER(sd->shader); + PROFILING_OBJECT(sd->object); } /* ShaderData setup from point inside volume */ @@ -421,6 +440,8 @@ ccl_device_inline void shader_setup_from_background(KernelGlobals *kg, ShaderDat #ifdef __VOLUME__ ccl_device_inline void shader_setup_from_volume(KernelGlobals *kg, ShaderData *sd, const Ray *ray) { + PROFILING_INIT(kg, PROFILING_SHADER_SETUP); + /* vectors */ sd->P = ray->P; sd->N = -ray->D; @@ -461,6 +482,9 @@ ccl_device_inline void shader_setup_from_volume(KernelGlobals *kg, ShaderData *s /* for NDC coordinates */ sd->ray_P = ray->P; sd->ray_dP = ray->dP; + + PROFILING_SHADER(sd->shader); + PROFILING_OBJECT(sd->object); } #endif /* __VOLUME__ */ @@ -591,6 +615,8 @@ void shader_bsdf_eval(KernelGlobals *kg, float light_pdf, bool use_mis) { + PROFILING_INIT(kg, PROFILING_CLOSURE_EVAL); + bsdf_eval_init(eval, NBUILTIN_CLOSURES, make_float3(0.0f, 0.0f, 0.0f), kernel_data.film.use_light_pass); #ifdef __BRANCHED_PATH__ @@ -720,6 +746,8 @@ ccl_device_inline int shader_bsdf_sample(KernelGlobals *kg, differential3 *domega_in, float *pdf) { + PROFILING_INIT(kg, PROFILING_CLOSURE_SAMPLE); + const ShaderClosure *sc = shader_bsdf_pick(sd, &randu); if(sc == NULL) { *pdf = 0.0f; @@ -751,6 +779,8 @@ ccl_device int shader_bsdf_sample_closure(KernelGlobals *kg, ShaderData *sd, const ShaderClosure *sc, float randu, float randv, BsdfEval *bsdf_eval, float3 *omega_in, differential3 *domega_in, float *pdf) { + PROFILING_INIT(kg, PROFILING_CLOSURE_SAMPLE); + int label; float3 eval; @@ -984,6 +1014,8 @@ ccl_device float3 shader_holdout_eval(KernelGlobals *kg, ShaderData *sd) ccl_device void shader_eval_surface(KernelGlobals *kg, ShaderData *sd, ccl_addr_space PathState *state, int path_flag) { + PROFILING_INIT(kg, PROFILING_SHADER_EVAL); + /* If path is being terminated, we are tracing a shadow ray or evaluating * emission, then we don't need to store closures. The emission and shadow * shader data also do not have a closure array to save GPU memory. */ @@ -1084,6 +1116,8 @@ ccl_device_inline void _shader_volume_phase_multi_eval(const ShaderData *sd, con ccl_device void shader_volume_phase_eval(KernelGlobals *kg, const ShaderData *sd, const float3 omega_in, BsdfEval *eval, float *pdf) { + PROFILING_INIT(kg, PROFILING_CLOSURE_VOLUME_EVAL); + bsdf_eval_init(eval, NBUILTIN_CLOSURES, make_float3(0.0f, 0.0f, 0.0f), kernel_data.film.use_light_pass); _shader_volume_phase_multi_eval(sd, omega_in, pdf, -1, eval, 0.0f, 0.0f); @@ -1093,6 +1127,8 @@ ccl_device int shader_volume_phase_sample(KernelGlobals *kg, const ShaderData *s float randu, float randv, BsdfEval *phase_eval, float3 *omega_in, differential3 *domega_in, float *pdf) { + PROFILING_INIT(kg, PROFILING_CLOSURE_VOLUME_SAMPLE); + int sampled = 0; if(sd->num_closure > 1) { @@ -1151,6 +1187,8 @@ ccl_device int shader_phase_sample_closure(KernelGlobals *kg, const ShaderData * const ShaderClosure *sc, float randu, float randv, BsdfEval *phase_eval, float3 *omega_in, differential3 *domega_in, float *pdf) { + PROFILING_INIT(kg, PROFILING_CLOSURE_VOLUME_SAMPLE); + int label; float3 eval; |