diff options
-rw-r--r-- | intern/cycles/blender/blender_session.cpp | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/geom/geom_bvh_traversal.h | 5 | ||||
-rw-r--r-- | intern/cycles/kernel/geom/geom_qbvh_traversal.h | 5 | ||||
-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 | 8 | ||||
-rw-r--r-- | intern/cycles/kernel/split/kernel_scene_intersect.h | 1 | ||||
-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 | 3 | ||||
-rw-r--r-- | source/blender/render/intern/source/render_result.c | 2 |
11 files changed, 39 insertions, 3 deletions
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp index 47ede7d9b88..bc1fd37962e 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_BVH_TRAVERSED_INSTANCES) + return PASS_BVH_TRAVERSED_INSTANCES; if(b_pass.debug_type() == BL::RenderPass::debug_type_RAY_BOUNCES) return PASS_RAY_BOUNCES; break; diff --git a/intern/cycles/kernel/geom/geom_bvh_traversal.h b/intern/cycles/kernel/geom/geom_bvh_traversal.h index 87f8ccd01b1..73d79fd78ee 100644 --- a/intern/cycles/kernel/geom/geom_bvh_traversal.h +++ b/intern/cycles/kernel/geom/geom_bvh_traversal.h @@ -76,6 +76,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg, #if defined(__KERNEL_DEBUG__) isect->num_traversal_steps = 0; + isect->num_traversed_instances = 0; #endif #if defined(__KERNEL_SSE2__) @@ -362,6 +363,10 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg, traversalStack[stackPtr] = ENTRYPOINT_SENTINEL; nodeAddr = kernel_tex_fetch(__object_node, object); + +#if defined(__KERNEL_DEBUG__) + isect->num_traversed_instances++; +#endif } } #endif /* FEATURE(BVH_INSTANCING) */ diff --git a/intern/cycles/kernel/geom/geom_qbvh_traversal.h b/intern/cycles/kernel/geom/geom_qbvh_traversal.h index cc20ebd8154..be7519d0cff 100644 --- a/intern/cycles/kernel/geom/geom_qbvh_traversal.h +++ b/intern/cycles/kernel/geom/geom_qbvh_traversal.h @@ -80,6 +80,7 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg, #if defined(__KERNEL_DEBUG__) isect->num_traversal_steps = 0; + isect->num_traversed_instances = 0; #endif ssef tnear(0.0f), tfar(ray->t); @@ -377,6 +378,10 @@ ccl_device bool BVH_FUNCTION_FULL_NAME(QBVH)(KernelGlobals *kg, traversalStack[stackPtr].dist = -FLT_MAX; nodeAddr = kernel_tex_fetch(__object_node, object); + +#if defined(__KERNEL_DEBUG__) + isect->num_traversed_instances++; +#endif } } #endif /* FEATURE(BVH_INSTANCING) */ diff --git a/intern/cycles/kernel/kernel_debug.h b/intern/cycles/kernel/kernel_debug.h index da9a48a11f9..24d6458567e 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_bvh_traversed_instances = 0; debug_data->num_ray_bounces = 0; } @@ -34,6 +35,11 @@ ccl_device_inline void kernel_write_debug_passes(KernelGlobals *kg, sample, debug_data->num_bvh_traversal_steps); } + if(flag & PASS_BVH_TRAVERSED_INSTANCES) { + kernel_write_pass_float(buffer + kernel_data.film.pass_bvh_traversed_instances, + sample, + debug_data->num_bvh_traversed_instances); + } if(flag & PASS_RAY_BOUNCES) { kernel_write_pass_float(buffer + kernel_data.film.pass_ray_bounces, sample, diff --git a/intern/cycles/kernel/kernel_path.h b/intern/cycles/kernel/kernel_path.h index 857d97329b6..1804c8bfbe3 100644 --- a/intern/cycles/kernel/kernel_path.h +++ b/intern/cycles/kernel/kernel_path.h @@ -476,6 +476,7 @@ ccl_device float4 kernel_path_integrate(KernelGlobals *kg, RNG *rng, int sample, #ifdef __KERNEL_DEBUG__ if(state.flag & PATH_RAY_CAMERA) { debug_data.num_bvh_traversal_steps += isect.num_traversal_steps; + debug_data.num_bvh_traversed_instances += isect.num_traversed_instances; } debug_data.num_ray_bounces++; #endif @@ -878,6 +879,7 @@ ccl_device float4 kernel_branched_path_integrate(KernelGlobals *kg, RNG *rng, in #ifdef __KERNEL_DEBUG__ if(state.flag & PATH_RAY_CAMERA) { debug_data.num_bvh_traversal_steps += isect.num_traversal_steps; + debug_data.num_bvh_traversed_instances += isect.num_traversed_instances; } debug_data.num_ray_bounces++; #endif diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h index 26b286a5c9f..2a70bfcb8f0 100644 --- a/intern/cycles/kernel/kernel_types.h +++ b/intern/cycles/kernel/kernel_types.h @@ -339,7 +339,8 @@ 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), + PASS_BVH_TRAVERSED_INSTANCES = (1 << 27), + PASS_RAY_BOUNCES = (1 << 28), #endif } PassType; @@ -501,6 +502,7 @@ typedef ccl_addr_space struct Intersection { #ifdef __KERNEL_DEBUG__ int num_traversal_steps; + int num_traversed_instances; #endif } Intersection; @@ -851,8 +853,9 @@ typedef struct KernelFilm { #ifdef __KERNEL_DEBUG__ int pass_bvh_traversal_steps; + int pass_bvh_traversed_instances; int pass_ray_bounces; - int pass_pad3, pass_pad4; + int pass_pad3; #endif } KernelFilm; @@ -991,6 +994,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_bvh_traversed_instances; 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 c1e82c7a21b..73aa005a496 100644 --- a/intern/cycles/kernel/split/kernel_scene_intersect.h +++ b/intern/cycles/kernel/split/kernel_scene_intersect.h @@ -123,6 +123,7 @@ ccl_device void kernel_scene_intersect( #ifdef __KERNEL_DEBUG__ if(state.flag & PATH_RAY_CAMERA) { debug_data->num_bvh_traversal_steps += isect->num_traversal_steps; + debug_data->num_bvh_traversed_instances += isect->num_traversed_instances; } debug_data->num_ray_bounces++; #endif diff --git a/intern/cycles/render/film.cpp b/intern/cycles/render/film.cpp index 93b29ed90a9..7282b04a22e 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_BVH_TRAVERSED_INSTANCES: + pass.components = 1; + pass.exposure = false; + break; case PASS_RAY_BOUNCES: pass.components = 1; pass.exposure = false; @@ -403,6 +407,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_BVH_TRAVERSED_INSTANCES: + kfilm->pass_bvh_traversed_instances = kfilm->pass_stride; + break; case PASS_RAY_BOUNCES: kfilm->pass_ray_bounces = kfilm->pass_stride; break; diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index a759779d6a3..61eb2c69bfe 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -79,6 +79,7 @@ EnumPropertyItem render_pass_type_items[] = { EnumPropertyItem render_pass_debug_type_items[] = { {RENDER_PASS_DEBUG_BVH_TRAVERSAL_STEPS, "BVH_TRAVERSAL_STEPS", 0, "BVH Traversal Steps", ""}, + {RENDER_PASS_DEBUG_BVH_TRAVERSED_INSTANCES, "BVH_TRAVERSED_INSTANCES", 0, "BVH Traversed Instances", ""}, {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 98abae26488..4b6004cea3d 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -99,7 +99,8 @@ typedef struct RenderPass { enum { RENDER_PASS_DEBUG_BVH_TRAVERSAL_STEPS = 0, - RENDER_PASS_DEBUG_RAY_BOUNCES = 1, + RENDER_PASS_DEBUG_BVH_TRAVERSED_INSTANCES = 1, + RENDER_PASS_DEBUG_RAY_BOUNCES = 2, }; /* 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 7f54bebd673..05a46927b63 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_BVH_TRAVERSED_INSTANCES: + return "BVH Traversed Instances"; case RENDER_PASS_DEBUG_RAY_BOUNCES: return "Ray Bounces"; } |