[Bf-blender-cvs] [db229b2380c] soc-2019-embree-gpu: Add basic access to Embree's internal data

MATILLAT Quentin noreply at git.blender.org
Fri Jun 14 22:21:41 CEST 2019


Commit: db229b2380c71e16364c16997c3431a69974ce88
Author: MATILLAT Quentin
Date:   Fri Jun 14 22:20:21 2019 +0200
Branches: soc-2019-embree-gpu
https://developer.blender.org/rBdb229b2380c71e16364c16997c3431a69974ce88

Add basic access to Embree's internal data

===================================================================

M	intern/cycles/bvh/bvh_embree.cpp
A	intern/cycles/bvh/embree/common/CMakeLists.txt
A	intern/cycles/bvh/embree/common/algorithms/CMakeLists.txt
A	intern/cycles/bvh/embree/common/algorithms/parallel_filter.h
A	intern/cycles/bvh/embree/common/algorithms/parallel_for.h
A	intern/cycles/bvh/embree/common/algorithms/parallel_for_for.h
A	intern/cycles/bvh/embree/common/algorithms/parallel_for_for_prefix_sum.h
A	intern/cycles/bvh/embree/common/algorithms/parallel_map.h
A	intern/cycles/bvh/embree/common/algorithms/parallel_partition.h
A	intern/cycles/bvh/embree/common/algorithms/parallel_prefix_sum.h
A	intern/cycles/bvh/embree/common/algorithms/parallel_reduce.h
A	intern/cycles/bvh/embree/common/algorithms/parallel_set.h
A	intern/cycles/bvh/embree/common/algorithms/parallel_sort.h
A	intern/cycles/bvh/embree/common/cmake/FindOpenImageIO.cmake
A	intern/cycles/bvh/embree/common/cmake/FindPNG.cmake
A	intern/cycles/bvh/embree/common/cmake/FindTBB.cmake
A	intern/cycles/bvh/embree/common/cmake/check_globals.cmake
A	intern/cycles/bvh/embree/common/cmake/check_isa_default.cmake
A	intern/cycles/bvh/embree/common/cmake/check_stack_frame_size.cmake
A	intern/cycles/bvh/embree/common/cmake/clang.cmake
A	intern/cycles/bvh/embree/common/cmake/crayprgenv.cmake
A	intern/cycles/bvh/embree/common/cmake/create_isa_dummy_file.cmake
A	intern/cycles/bvh/embree/common/cmake/embree-config-builddir.cmake
A	intern/cycles/bvh/embree/common/cmake/embree-config-version.cmake
A	intern/cycles/bvh/embree/common/cmake/embree-config.cmake
A	intern/cycles/bvh/embree/common/cmake/gnu.cmake
A	intern/cycles/bvh/embree/common/cmake/intel.cmake
A	intern/cycles/bvh/embree/common/cmake/ispc.cmake
A	intern/cycles/bvh/embree/common/cmake/msvc.cmake
A	intern/cycles/bvh/embree/common/cmake/msvc_post.cmake
A	intern/cycles/bvh/embree/common/cmake/package.cmake
A	intern/cycles/bvh/embree/common/cmake/rpm_ldconfig.sh
A	intern/cycles/bvh/embree/common/cmake/test.cmake
A	intern/cycles/bvh/embree/common/cmake/tutorial.cmake
A	intern/cycles/bvh/embree/common/cmake/uninstall.cmake.in
A	intern/cycles/bvh/embree/common/lexers/CMakeLists.txt
A	intern/cycles/bvh/embree/common/lexers/parsestream.h
A	intern/cycles/bvh/embree/common/lexers/stream.h
A	intern/cycles/bvh/embree/common/lexers/streamfilters.h
A	intern/cycles/bvh/embree/common/lexers/stringstream.h
A	intern/cycles/bvh/embree/common/lexers/tokenstream.h
A	intern/cycles/bvh/embree/common/math/CMakeLists.txt
A	intern/cycles/bvh/embree/common/math/affinespace.h
A	intern/cycles/bvh/embree/common/math/bbox.h
A	intern/cycles/bvh/embree/common/math/col3.h
A	intern/cycles/bvh/embree/common/math/col4.h
A	intern/cycles/bvh/embree/common/math/color.h
A	intern/cycles/bvh/embree/common/math/constants.h
A	intern/cycles/bvh/embree/common/math/interval.h
A	intern/cycles/bvh/embree/common/math/lbbox.h
A	intern/cycles/bvh/embree/common/math/linearspace2.h
A	intern/cycles/bvh/embree/common/math/linearspace3.h
A	intern/cycles/bvh/embree/common/math/math.h
A	intern/cycles/bvh/embree/common/math/obbox.h
A	intern/cycles/bvh/embree/common/math/quaternion.h
A	intern/cycles/bvh/embree/common/math/range.h
A	intern/cycles/bvh/embree/common/math/vec2.h
A	intern/cycles/bvh/embree/common/math/vec2fa.h
A	intern/cycles/bvh/embree/common/math/vec3.h
A	intern/cycles/bvh/embree/common/math/vec3ba.h
A	intern/cycles/bvh/embree/common/math/vec3fa.h
A	intern/cycles/bvh/embree/common/math/vec3ia.h
A	intern/cycles/bvh/embree/common/math/vec4.h
A	intern/cycles/bvh/embree/common/simd/CMakeLists.txt
A	intern/cycles/bvh/embree/common/simd/avx.h
A	intern/cycles/bvh/embree/common/simd/avx512.h
A	intern/cycles/bvh/embree/common/simd/simd.h
A	intern/cycles/bvh/embree/common/simd/sse.h
A	intern/cycles/bvh/embree/common/simd/varying.h
A	intern/cycles/bvh/embree/common/simd/vboold4_avx.h
A	intern/cycles/bvh/embree/common/simd/vboold4_avx512.h
A	intern/cycles/bvh/embree/common/simd/vboold8_avx512.h
A	intern/cycles/bvh/embree/common/simd/vboolf16_avx512.h
A	intern/cycles/bvh/embree/common/simd/vboolf4_avx512.h
A	intern/cycles/bvh/embree/common/simd/vboolf4_sse2.h
A	intern/cycles/bvh/embree/common/simd/vboolf8_avx.h
A	intern/cycles/bvh/embree/common/simd/vboolf8_avx512.h
A	intern/cycles/bvh/embree/common/simd/vdouble4_avx.h
A	intern/cycles/bvh/embree/common/simd/vdouble8_avx512.h
A	intern/cycles/bvh/embree/common/simd/vfloat16_avx512.h
A	intern/cycles/bvh/embree/common/simd/vfloat4_sse2.h
A	intern/cycles/bvh/embree/common/simd/vfloat8_avx.h
A	intern/cycles/bvh/embree/common/simd/vint16_avx512.h
A	intern/cycles/bvh/embree/common/simd/vint4_sse2.h
A	intern/cycles/bvh/embree/common/simd/vint8_avx.h
A	intern/cycles/bvh/embree/common/simd/vint8_avx2.h
A	intern/cycles/bvh/embree/common/simd/vllong4_avx2.h
A	intern/cycles/bvh/embree/common/simd/vllong8_avx512.h
A	intern/cycles/bvh/embree/common/simd/vuint16_avx512.h
A	intern/cycles/bvh/embree/common/simd/vuint4_sse2.h
A	intern/cycles/bvh/embree/common/simd/vuint8_avx.h
A	intern/cycles/bvh/embree/common/simd/vuint8_avx2.h
A	intern/cycles/bvh/embree/common/sys/CMakeLists.txt
A	intern/cycles/bvh/embree/common/sys/alloc.h
A	intern/cycles/bvh/embree/common/sys/array.h
A	intern/cycles/bvh/embree/common/sys/atomic.h
A	intern/cycles/bvh/embree/common/sys/barrier.h
A	intern/cycles/bvh/embree/common/sys/condition.h
A	intern/cycles/bvh/embree/common/sys/filename.h
A	intern/cycles/bvh/embree/common/sys/intrinsics.h
A	intern/cycles/bvh/embree/common/sys/library.h
A	intern/cycles/bvh/embree/common/sys/mutex.h
A	intern/cycles/bvh/embree/common/sys/platform.h
A	intern/cycles/bvh/embree/common/sys/ref.h
A	intern/cycles/bvh/embree/common/sys/regression.h
A	intern/cycles/bvh/embree/common/sys/string.h
A	intern/cycles/bvh/embree/common/sys/sysinfo.h
A	intern/cycles/bvh/embree/common/sys/thread.h
A	intern/cycles/bvh/embree/common/sys/vector.h
A	intern/cycles/bvh/embree/common/tasking/CMakeLists.txt
A	intern/cycles/bvh/embree/common/tasking/taskscheduler.h
A	intern/cycles/bvh/embree/common/tasking/taskschedulerinternal.h
A	intern/cycles/bvh/embree/common/tasking/taskschedulerppl.h
A	intern/cycles/bvh/embree/common/tasking/taskschedulertbb.h
A	intern/cycles/bvh/embree/kernels/CMakeLists.txt
A	intern/cycles/bvh/embree/kernels/builders/bvh_builder_hair.h
A	intern/cycles/bvh/embree/kernels/builders/bvh_builder_morton.h
A	intern/cycles/bvh/embree/kernels/builders/bvh_builder_msmblur.h
A	intern/cycles/bvh/embree/kernels/builders/bvh_builder_msmblur_hair.h
A	intern/cycles/bvh/embree/kernels/builders/bvh_builder_sah.h
A	intern/cycles/bvh/embree/kernels/builders/heuristic_binning.h
A	intern/cycles/bvh/embree/kernels/builders/heuristic_binning_array_aligned.h
A	intern/cycles/bvh/embree/kernels/builders/heuristic_binning_array_unaligned.h
A	intern/cycles/bvh/embree/kernels/builders/heuristic_openmerge_array.h
A	intern/cycles/bvh/embree/kernels/builders/heuristic_spatial.h
A	intern/cycles/bvh/embree/kernels/builders/heuristic_spatial_array.h
A	intern/cycles/bvh/embree/kernels/builders/heuristic_strand_array.h
A	intern/cycles/bvh/embree/kernels/builders/heuristic_timesplit_array.h
A	intern/cycles/bvh/embree/kernels/builders/priminfo.h
A	intern/cycles/bvh/embree/kernels/builders/primrefgen.h
A	intern/cycles/bvh/embree/kernels/builders/splitter.h
A	intern/cycles/bvh/embree/kernels/bvh/bvh.h
A	intern/cycles/bvh/embree/kernels/bvh/bvh4_factory.h
A	intern/cycles/bvh/embree/kernels/bvh/bvh8_factory.h
A	intern/cycles/bvh/embree/kernels/bvh/bvh_builder.h
A	intern/cycles/bvh/embree/kernels/bvh/bvh_builder_twolevel.h
A	intern/cycles/bvh/embree/kernels/bvh/bvh_factory.h
A	intern/cycles/bvh/embree/kernels/bvh/bvh_intersector1.h
A	intern/cycles/bvh/embree/kernels/bvh/bvh_intersector_hybrid.h
A	intern/cycles/bvh/embree/kernels/bvh/bvh_intersector_stream.h
A	intern/cycles/bvh/embree/kernels/bvh/bvh_intersector_stream_filters.h
A	intern/cycles/bvh/embree/kernels/bvh/bvh_refit.h
A	intern/cycles/bvh/embree/kernels/bvh/bvh_rotate.h
A	intern/cycles/bvh/embree/kernels/bvh/bvh_statistics.h
A	intern/cycles/bvh/embree/kernels/bvh/bvh_traverser1.h
A	intern/cycles/bvh/embree/kernels/bvh/bvh_traverser_stream.h
A	intern/cycles/bvh/embree/kernels/bvh/node_intersector.h
A	intern/cycles/bvh/embree/kernels/bvh/node_intersector1.h
A	intern/cycles/bvh/embree/kernels/bvh/node_intersector_frustum.h
A	intern/cycles/bvh/embree/kernels/bvh/node_intersector_packet.h
A	intern/cycles/bvh/embree/kernels/bvh/node_intersector_packet_stream.h
A	intern/cycles/bvh/embree/kernels/common/accel.h
A	intern/cycles/bvh/embree/kernels/common/accelinstance.h
A	intern/cycles/bvh/embree/kernels/common/acceln.h
A	intern/cycles/bvh/embree/kernels/common/accelset.h
A	intern/cycles/bvh/embree/kernels/common/alloc.h
A	intern/cycles/bvh/embree/kernels/common/buffer.h
A	intern/cycles/bvh/embree/kernels/common/builder.h
A	intern/cycles/bvh/embree/kernels/common/context.h
A	intern/cycles/bvh/embree/kernels/common/default.h
A	intern/cycles/bvh/embree/kernels/common/device.h
A	intern/cycles/bvh/embree/kernels/common/geometry.h
A	intern/cycles/bvh/embree/kernels/common/hit.h
A	intern/cycles/bvh/embree/kernels/common/isa.h
A	intern/cycles/bvh/embree/kernels/common/primref.h
A	intern/cycles/bvh/embree/kernels/common/primref_mb.h
A	intern/cycles/bvh/embree/kernels/common/profile.h
A	intern/cycles/bvh/embree/kernels/common/ray.h
A	intern/cycles/bvh/embree/kernels/common/rtcore.h
A	intern/cycles/bvh/embree/kernels/common/scene.h
A	intern/cycles/bvh/embree/kernels/common/scene_curves.h
A	intern/cycles/bvh/embree/kernels/common/scene_grid_mesh.h
A	intern/cycles/bvh/embree/kernels/common/scene_instance.h
A	intern/cycles/bvh/embree/kernels/common/scene_line_segments.h
A	intern/cycles/bvh/embree/kernels/common/scene_points.h
A	intern/cycles/bvh/embree/kernels/common/scene_quad_mesh.h
A	intern/cycles/bvh/embree/kernels/common/scene_subdiv_mesh.h
A	intern/cycles/bvh/embree/kernels/common/scene_triangle_mesh.h
A	intern/cycles/bvh/embree/kernels/common/scene_user_geometry.h
A	intern/cycles/bvh/embree/kernels/common/stack_item.h
A	intern/cycles/bvh/embree/kernels/common/stat.h
A	intern/cycles/bvh/embree/kernels/common/state.h
A	intern/cycles/bvh/embree/kernels/common/vector.h
A	intern/cycles/bvh/embree/kernels/config.h.in
A	intern/cycles/bvh/embree/kernels/embree.rc
A	intern/cycles/bvh/embree/kernels/export.linux.map.in
A	intern/cycles/bvh/embree/kernels/export.macosx.map
A	intern/cycles/bvh/embree/kernels/export.macosx.map.in
A	intern/cycles/bvh/embree/kernels/geometry/curveNi.h
A	intern/cycles/bvh/embree/kernels/geometry/curveNi_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/curveNi_mb.h
A	intern/cycles/bvh/embree/kernels/geometry/curveNi_mb_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/curveNv.h
A	intern/cycles/bvh/embree/kernels/geometry/curveNv_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/curve_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/curve_intersector_distance.h
A	intern/cycles/bvh/embree/kernels/geometry/curve_intersector_oriented.h
A	intern/cycles/bvh/embree/kernels/geometry/curve_intersector_precalculations.h
A	intern/cycles/bvh/embree/kernels/geometry/curve_intersector_ribbon.h
A	intern/cycles/bvh/embree/kernels/geometry/curve_intersector_sweep.h
A	intern/cycles/bvh/embree/kernels/geometry/curve_intersector_virtual.h
A	intern/cycles/bvh/embree/kernels/geometry/cylinder.h
A	intern/cycles/bvh/embree/kernels/geometry/disc_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/disci_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/filter.h
A	intern/cycles/bvh/embree/kernels/geometry/grid_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/grid_soa.h
A	intern/cycles/bvh/embree/kernels/geometry/grid_soa_intersector1.h
A	intern/cycles/bvh/embree/kernels/geometry/grid_soa_intersector_packet.h
A	intern/cycles/bvh/embree/kernels/geometry/instance.h
A	intern/cycles/bvh/embree/kernels/geometry/instance_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/intersector_epilog.h
A	intern/cycles/bvh/embree/kernels/geometry/intersector_iterators.h
A	intern/cycles/bvh/embree/kernels/geometry/line_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/linei.h
A	intern/cycles/bvh/embree/kernels/geometry/linei_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/object.h
A	intern/cycles/bvh/embree/kernels/geometry/object_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/plane.h
A	intern/cycles/bvh/embree/kernels/geometry/pointi.h
A	intern/cycles/bvh/embree/kernels/geometry/primitive.h
A	intern/cycles/bvh/embree/kernels/geometry/quad_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/quad_intersector_moeller.h
A	intern/cycles/bvh/embree/kernels/geometry/quad_intersector_pluecker.h
A	intern/cycles/bvh/embree/kernels/geometry/quadi.h
A	intern/cycles/bvh/embree/kernels/geometry/quadi_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/quadv.h
A	intern/cycles/bvh/embree/kernels/geometry/quadv_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/sphere_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/spherei_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/subdivpatch1.h
A	intern/cycles/bvh/embree/kernels/geometry/subdivpatch1_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/subgrid.h
A	intern/cycles/bvh/embree/kernels/geometry/subgrid_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/subgrid_intersector_moeller.h
A	intern/cycles/bvh/embree/kernels/geometry/subgrid_intersector_pluecker.h
A	intern/cycles/bvh/embree/kernels/geometry/subgrid_mb_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/triangle.h
A	intern/cycles/bvh/embree/kernels/geometry/triangle_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/triangle_intersector_moeller.h
A	intern/cycles/bvh/embree/kernels/geometry/triangle_intersector_pluecker.h
A	intern/cycles/bvh/embree/kernels/geometry/triangle_intersector_woop.h
A	intern/cycles/bvh/embree/kernels/geometry/trianglei.h
A	intern/cycles/bvh/embree/kernels/geometry/trianglei_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/trianglev.h
A	intern/cycles/bvh/embree/kernels/geometry/trianglev_intersector.h
A	intern/cycles/bvh/embree/kernels/geometry/trianglev_mb.h
A	intern/cycles/bvh/embree/kernels/geometry/trianglev_mb_intersector.h
A	intern/cycles/bvh/embree/kernels/hash.h.in
A	intern/cycles/bvh/embree/kernels/rtcore_version.h.in
A	intern/cycles/bvh/embree/kernels/subdiv/bezier_curve.h
A	intern/cycles/bvh/embree/kernels/subdiv/bezier_patch.h
A	intern/cycles/bvh/embree/kernels/subdiv/bilinear_patch.h
A	intern/cycles/bvh/embree/kernels/subdiv/bspline_curve.h
A	intern/cycles/bvh/embree/kernels/subdiv/bspline_patch.h
A	intern/cycles/bvh/embree/kernels/subdiv/catmullclark_coefficients.h
A	intern/cycles/bvh/embree/kernels/subdiv/catmullclark_patch.h
A	intern/cycles/bvh/embree/kernels/subdiv/catmullclark_ring.h
A	intern/cycles/bvh/embree/kernels/subdiv/feature_adaptive_eval.h
A	intern/cycles/bvh/embree/kernels/subdiv/feature_adaptive_eval_grid.h
A	intern/cycles/bvh/embree/kernels/subdiv/feature_adaptive_eval_simd.h
A	intern/cycles/bvh/embree/kernels/subdiv/gregory_patch.h
A	intern/cycles/bvh/embree/kernels/subdiv/gregory_patch_dense.h
A	intern/cycles/bvh/embree/kernels/subdiv/gridrange.h
A	intern/cycles/bvh/embree/kernels/subdiv/half_edge.h
A	intern/cycles/bvh/embree/kernels/subdiv/hermite_curve.h
A	intern/cycles/bvh/embree/kernels/subdiv/linear_bezier_patch.h
A	intern/cycles/bvh/embree/kernels/subdiv/patch.h
A	intern/cycles/bvh/embree/kernels/subdiv/patch_eval.h
A	intern/cycles/bvh/embree/kernels/subdiv/patch_eval_grid.h
A	intern/cycles/bvh/embree/kernels/subdiv/patch_eval_simd.h
A	intern/cycles/bvh/embree/kernels/subdiv/subdivpatch1base.h
A	intern/cycles/bvh/embree/kernels/subdiv/tessellation.h
A	intern/cycles/bvh/embree/kernels/subdiv/tessellation_cache.h

===================================================================

diff --git a/intern/cycles/bvh/bvh_embree.cpp b/intern/cycles/bvh/bvh_embree.cpp
index 088ec759331..355e28b4fb9 100644
--- a/intern/cycles/bvh/bvh_embree.cpp
+++ b/intern/cycles/bvh/bvh_embree.cpp
@@ -55,10 +55,106 @@
 #  include "util/util_logging.h"
 #  include "util/util_progress.h"
 
+#define TASKING_INTERNAL
+#define RTC_NAMESPACE_BEGIN
+#define RTC_NAMESPACE_END
+
+#include "embree/kernels/common/scene.h"
+#include "embree/kernels/bvh/bvh.h"
+#include "embree/kernels/geometry/trianglev.h"
+#include "bvh_node.h"
 CCL_NAMESPACE_BEGIN
 
 #  define IS_HAIR(x) (x & 1)
 
+ccl::BoundBox RTCBoundBoxToCCL(const embree::BBox3fa &bound) {
+    return ccl::BoundBox(
+                make_float3(bound.lower.x, bound.lower.y, bound.lower.z),
+                make_float3(bound.upper.x, bound.upper.y, bound.upper.z));
+
+}
+
+template<typename Primitive>
+BVHNode* nodeEmbreeToCcl(embree::BVH4::NodeRef node, ccl::BoundBox bb, embree::Scene *s) {
+    if(node.isLeaf()) {
+        LeafNode *ret = nullptr; // new LeafNode(bb, vis, lo, hi);
+        size_t nb;
+        Primitive *prims = reinterpret_cast<Primitive *>(node.leaf(nb));
+
+        int visibility = 0;
+        unsigned int min = 999999,
+                max = 0;
+        for(size_t i = 0; i < nb; i++) {
+            for(size_t j = 0; j < prims[i].size(); j++) {
+                const auto geom_id = prims[i].geomID(j);
+                const auto prim_id = prims[i].primID(j);
+
+                embree::Geometry *g = s->get(geom_id);
+
+                size_t prim_offset = reinterpret_cast<size_t>(g->getUserData());
+                visibility |= g->mask;
+
+                const unsigned int id = prim_offset + prim_id;
+                if(id < min) min = id;
+                if(id > max) max = id;
+            }
+        }
+        return new LeafNode(bb, visibility, min, max);
+    } else {
+        InnerNode *ret = nullptr;
+
+        if(node.isAlignedNode()) {
+            embree::BVH4::AlignedNode *anode = node.alignedNode();
+
+            BVHNode *children[4];
+            for(int i = 0; i < 4; i++) {
+                    children[i] = nodeEmbreeToCcl<Primitive>(
+                                anode->children[i],
+                                RTCBoundBoxToCCL(anode->bounds(i)),
+                                s
+                                );
+            }
+
+            ret = new InnerNode(
+                        bb,
+                        children,
+                        4);
+        } else {
+            std::cout << "Unknown node" << std::endl;
+        }
+
+        return ret;
+    }
+}
+
+void print_bvhInfo(RTCScene);
+
+void print_bvhInfo(RTCScene scene) {
+    embree::Scene *s = (embree::Scene *)scene;
+
+    std::cout << "<- Accel used ->" << std::endl;
+    for (embree::Accel *a : s->accels) {
+        std::cout << "Accel " << a->intersectors.intersector1.name << std::endl;
+        embree::AccelData *ad = a->intersectors.ptr;
+        switch (ad->type) {
+        case embree::AccelData::TY_BVH4: {
+            embree::BVH4 *bvh = dynamic_cast<embree::BVHN<4> *>(ad);
+            std::cout << "Prim type -> " << bvh->primTy->name() << std::endl;
+
+            embree::BVH4::NodeRef root = bvh->root;
+            nodeEmbreeToCcl<embree::Triangle4v>(root, RTCBoundBoxToCCL(bvh->bounds.bounds()), s);
+
+        } break;
+        default:
+            std::cout << "[EMBREE - BVH] Unknown type " << ad->type << std::endl;
+            break;
+        }
+    }
+    std::cout << "[DONE]" << std::endl;
+}
+
+
+
 /* This gets called by Embree at every valid ray/object intersection.
  * Things like recording subsurface or shadow hits for later evaluation
  * as well as filtering for volume objects happen here.
@@ -301,7 +397,7 @@ BVHEmbree::BVHEmbree(const BVHParams &params_, const vector<Object *> &objects_)
   _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);
   thread_scoped_lock lock(rtc_shared_mutex);
   if (rtc_shared_users == 0) {
-    rtc_shared_device = rtcNewDevice("verbose=0");
+    rtc_shared_device = rtcNewDevice("verbose=0;tri_accel=bvh4.triangle4v");
     /* Check here if Embree was built with the correct flags. */
     ssize_t ret = rtcGetDeviceProperty(rtc_shared_device, RTC_DEVICE_PROPERTY_RAY_MASK_SUPPORTED);
     if (ret != 1) {
@@ -483,6 +579,9 @@ void BVHEmbree::build(Progress &progress, Stats *stats_)
   rtcSetSceneProgressMonitorFunction(scene, rtc_progress_func, &progress);
   rtcCommitScene(scene);
 
+  if(this->params.top_level)
+    print_bvhInfo(scene);
+
   pack_primitives();
 
   if (progress.get_cancel()) {
diff --git a/intern/cycles/bvh/embree/common/CMakeLists.txt b/intern/cycles/bvh/embree/common/CMakeLists.txt
new file mode 100644
index 00000000000..234e9252adc
--- /dev/null
+++ b/intern/cycles/bvh/embree/common/CMakeLists.txt
@@ -0,0 +1,22 @@
+## ======================================================================== ##
+## Copyright 2009-2018 Intel Corporation                                    ##
+##                                                                          ##
+## Licensed under the Apache License, Version 2.0 (the "License");          ##
+## you may not use this file except in compliance with the License.         ##
+## You may obtain a copy of the License at                                  ##
+##                                                                          ##
+##     http://www.apache.org/licenses/LICENSE-2.0                           ##
+##                                                                          ##
+## Unless required by applicable law or agreed to in writing, software      ##
+## distributed under the License is distributed on an "AS IS" BASIS,        ##
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ##
+## See the License for the specific language governing permissions and      ##
+## limitations under the License.                                           ##
+## ======================================================================== ##
+
+ADD_SUBDIRECTORY(sys)
+ADD_SUBDIRECTORY(math)
+ADD_SUBDIRECTORY(simd)
+ADD_SUBDIRECTORY(lexers)
+ADD_SUBDIRECTORY(tasking)
+ADD_SUBDIRECTORY(algorithms)
diff --git a/intern/cycles/bvh/embree/common/algorithms/CMakeLists.txt b/intern/cycles/bvh/embree/common/algorithms/CMakeLists.txt
new file mode 100644
index 00000000000..ad81d14a822
--- /dev/null
+++ b/intern/cycles/bvh/embree/common/algorithms/CMakeLists.txt
@@ -0,0 +1,31 @@
+## ======================================================================== ##
+## Copyright 2009-2018 Intel Corporation                                    ##
+##                                                                          ##
+## Licensed under the Apache License, Version 2.0 (the "License");          ##
+## you may not use this file except in compliance with the License.         ##
+## You may obtain a copy of the License at                                  ##
+##                                                                          ##
+##     http://www.apache.org/licenses/LICENSE-2.0                           ##
+##                                                                          ##
+## Unless required by applicable law or agreed to in writing, software      ##
+## distributed under the License is distributed on an "AS IS" BASIS,        ##
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ##
+## See the License for the specific language governing permissions and      ##
+## limitations under the License.                                           ##
+## ======================================================================== ##
+
+ADD_LIBRARY(algorithms OBJECT
+ parallel_for.cpp
+ parallel_reduce.cpp
+ parallel_prefix_sum.cpp
+ parallel_for_for.cpp
+ parallel_for_for_prefix_sum.cpp
+ parallel_partition.cpp
+ parallel_sort.cpp
+ parallel_set.cpp
+ parallel_map.cpp
+ parallel_filter.cpp
+)
+
+SET_PROPERTY(TARGET algorithms PROPERTY FOLDER common)
+SET_PROPERTY(TARGET algorithms APPEND PROPERTY COMPILE_FLAGS " ${FLAGS_LOWEST}")
diff --git a/intern/cycles/bvh/embree/common/algorithms/parallel_filter.h b/intern/cycles/bvh/embree/common/algorithms/parallel_filter.h
new file mode 100644
index 00000000000..53182a717c6
--- /dev/null
+++ b/intern/cycles/bvh/embree/common/algorithms/parallel_filter.h
@@ -0,0 +1,106 @@
+// ======================================================================== //
+// Copyright 2009-2018 Intel Corporation                                    //
+//                                                                          //
+// Licensed under the Apache License, Version 2.0 (the "License");          //
+// you may not use this file except in compliance with the License.         //
+// You may obtain a copy of the License at                                  //
+//                                                                          //
+//     http://www.apache.org/licenses/LICENSE-2.0                           //
+//                                                                          //
+// Unless required by applicable law or agreed to in writing, software      //
+// distributed under the License is distributed on an "AS IS" BASIS,        //
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //
+// See the License for the specific language governing permissions and      //
+// limitations under the License.                                           //
+// ======================================================================== //
+
+#pragma once
+
+#include "parallel_for.h"
+
+namespace embree
+{
+  template<typename Ty, typename Index, typename Predicate>
+    inline Index sequential_filter( Ty* data, const Index first, const Index last, const Predicate& predicate)
+  {
+    Index j = first;
+    for (Index i=first; i<last; i++)
+      if (predicate(data[i]))
+        data[j++] = data[i];
+
+    return j;
+  }
+
+  template<typename Ty, typename Index, typename Predicate>
+    inline Index parallel_filter( Ty* data, const Index begin, const Index end, const Index minStepSize, const Predicate& predicate)
+  {
+    /* sequential fallback */
+    if (end-begin <= minStepSize)
+      return seque

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list