[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 ¶ms_, 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