diff options
-rw-r--r-- | intern/cycles/blender/blender_session.cpp | 3 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_debug.h | 6 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_path.h | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_types.h | 5 | ||||
-rw-r--r-- | intern/cycles/kernel/split/kernel_scene_intersect.h | 1 | ||||
-rw-r--r-- | intern/cycles/render/buffers.cpp | 6 | ||||
-rw-r--r-- | intern/cycles/render/film.cpp | 7 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_render.c | 1 | ||||
-rw-r--r-- | source/blender/render/extern/include/RE_pipeline.h | 1 | ||||
-rw-r--r-- | source/blender/render/intern/source/render_result.c | 2 |
10 files changed, 33 insertions, 1 deletions
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp index bb345e2b3cf..47ede7d9b88 100644 --- a/intern/cycles/blender/blender_session.cpp +++ b/intern/cycles/blender/blender_session.cpp @@ -271,6 +271,8 @@ static PassType get_pass_type(BL::RenderPass b_pass) { if(b_pass.debug_type() == BL::RenderPass::debug_type_BVH_TRAVERSAL_STEPS) return PASS_BVH_TRAVERSAL_STEPS; + if(b_pass.debug_type() == BL::RenderPass::debug_type_RAY_BOUNCES) + return PASS_RAY_BOUNCES; break; } #endif @@ -439,6 +441,7 @@ void BlenderSession::render() Pass::add(PASS_COMBINED, passes); #ifdef WITH_CYCLES_DEBUG Pass::add(PASS_BVH_TRAVERSAL_STEPS, passes); + /* Pass::add(PASS_RAY_BOUNCES, passes); */ #endif if(session_params.device.advanced_shading) { diff --git a/intern/cycles/kernel/kernel_debug.h b/intern/cycles/kernel/kernel_debug.h index 94ede397848..da9a48a11f9 100644 --- a/intern/cycles/kernel/kernel_debug.h +++ b/intern/cycles/kernel/kernel_debug.h @@ -19,6 +19,7 @@ CCL_NAMESPACE_BEGIN ccl_device_inline void debug_data_init(DebugData *debug_data) { debug_data->num_bvh_traversal_steps = 0; + debug_data->num_ray_bounces = 0; } ccl_device_inline void kernel_write_debug_passes(KernelGlobals *kg, @@ -33,6 +34,11 @@ ccl_device_inline void kernel_write_debug_passes(KernelGlobals *kg, sample, debug_data->num_bvh_traversal_steps); } + if(flag & PASS_RAY_BOUNCES) { + kernel_write_pass_float(buffer + kernel_data.film.pass_ray_bounces, + sample, + debug_data->num_ray_bounces); + } } CCL_NAMESPACE_END diff --git a/intern/cycles/kernel/kernel_path.h b/intern/cycles/kernel/kernel_path.h index e2dbf6e22f7..857d97329b6 100644 --- a/intern/cycles/kernel/kernel_path.h +++ b/intern/cycles/kernel/kernel_path.h @@ -477,6 +477,7 @@ ccl_device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample, if(state.flag & PATH_RAY_CAMERA) { debug_data.num_bvh_traversal_steps += isect.num_traversal_steps; } + debug_data.num_ray_bounces++; #endif #ifdef __LAMP_MIS__ @@ -878,6 +879,7 @@ ccl_device float4 kernel_branched_path_integrate(KernelGlobals *kg, RNG *rng, in if(state.flag & PATH_RAY_CAMERA) { debug_data.num_bvh_traversal_steps += isect.num_traversal_steps; } + debug_data.num_ray_bounces++; #endif #ifdef __VOLUME__ diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h index 1ef07629a3e..67e41a5ee81 100644 --- a/intern/cycles/kernel/kernel_types.h +++ b/intern/cycles/kernel/kernel_types.h @@ -337,6 +337,7 @@ typedef enum PassType { PASS_LIGHT = (1 << 25), /* no real pass, used to force use_light_pass */ #ifdef __KERNEL_DEBUG__ PASS_BVH_TRAVERSAL_STEPS = (1 << 26), + PASS_RAY_BOUNCES = (1 << 27), #endif } PassType; @@ -848,7 +849,8 @@ typedef struct KernelFilm { #ifdef __KERNEL_DEBUG__ int pass_bvh_traversal_steps; - int pass_pad3, pass_pad4, pass_pad5; + int pass_ray_bounces; + int pass_pad3, pass_pad4; #endif } KernelFilm; @@ -987,6 +989,7 @@ typedef ccl_addr_space struct DebugData { // Total number of BVH node traversal steps and primitives intersections // for the camera rays. int num_bvh_traversal_steps; + int num_ray_bounces; } DebugData; #endif diff --git a/intern/cycles/kernel/split/kernel_scene_intersect.h b/intern/cycles/kernel/split/kernel_scene_intersect.h index 09e3e5ddd7e..c1e82c7a21b 100644 --- a/intern/cycles/kernel/split/kernel_scene_intersect.h +++ b/intern/cycles/kernel/split/kernel_scene_intersect.h @@ -124,6 +124,7 @@ ccl_device void kernel_scene_intersect( if(state.flag & PATH_RAY_CAMERA) { debug_data->num_bvh_traversal_steps += isect->num_traversal_steps; } + debug_data->num_ray_bounces++; #endif if(!hit) { diff --git a/intern/cycles/render/buffers.cpp b/intern/cycles/render/buffers.cpp index 011c722c000..fab3f701757 100644 --- a/intern/cycles/render/buffers.cpp +++ b/intern/cycles/render/buffers.cpp @@ -197,6 +197,12 @@ bool RenderBuffers::get_pass_rect(PassType type, float exposure, int sample, int pixels[0] = f; } } + else if(type == PASS_RAY_BOUNCES) { + for(int i = 0; i < size; i++, in += pass_stride, pixels++) { + float f = *in; + pixels[0] = f; + } + } #endif else { for(int i = 0; i < size; i++, in += pass_stride, pixels++) { diff --git a/intern/cycles/render/film.cpp b/intern/cycles/render/film.cpp index b23678dea44..93b29ed90a9 100644 --- a/intern/cycles/render/film.cpp +++ b/intern/cycles/render/film.cpp @@ -151,6 +151,10 @@ void Pass::add(PassType type, vector<Pass>& passes) pass.components = 1; pass.exposure = false; break; + case PASS_RAY_BOUNCES: + pass.components = 1; + pass.exposure = false; + break; #endif } @@ -399,6 +403,9 @@ void Film::device_update(Device *device, DeviceScene *dscene, Scene *scene) case PASS_BVH_TRAVERSAL_STEPS: kfilm->pass_bvh_traversal_steps = kfilm->pass_stride; break; + case PASS_RAY_BOUNCES: + kfilm->pass_ray_bounces = kfilm->pass_stride; + break; #endif case PASS_NONE: diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index ee51dcf2acf..7ec2619d2df 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -769,6 +769,7 @@ static void rna_def_render_pass(BlenderRNA *brna) static EnumPropertyItem render_pass_debug_type_items[] = { {RENDER_PASS_DEBUG_BVH_TRAVERSAL_STEPS, "BVH_TRAVERSAL_STEPS", 0, "BVH Traversal Steps", ""}, + {RENDER_PASS_DEBUG_RAY_BOUNCES, "RAY_BOUNCES", 0, "Ray Steps", ""}, {0, NULL, 0, NULL, NULL} }; diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index 9331c45237d..98abae26488 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -99,6 +99,7 @@ typedef struct RenderPass { enum { RENDER_PASS_DEBUG_BVH_TRAVERSAL_STEPS = 0, + RENDER_PASS_DEBUG_RAY_BOUNCES = 1, }; /* a renderlayer is a full image, but with all passes and samples */ diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c index 1bcde896e82..ea7b32d2da9 100644 --- a/source/blender/render/intern/source/render_result.c +++ b/source/blender/render/intern/source/render_result.c @@ -531,6 +531,8 @@ static const char *debug_pass_type_name_get(int debug_type) switch (debug_type) { case RENDER_PASS_DEBUG_BVH_TRAVERSAL_STEPS: return "BVH Traversal Steps"; + case RENDER_PASS_DEBUG_RAY_BOUNCES: + return "Ray Bounces"; } return "Unknown"; } |