[Bf-blender-cvs] [30d4bbcab3b] cycles_embree: Cycles: Some cleanup of Embree integration.

Stefan Werner noreply at git.blender.org
Mon Sep 3 14:17:56 CEST 2018


Commit: 30d4bbcab3b0bc49e3a056a8a64697bd432f1499
Author: Stefan Werner
Date:   Mon Sep 3 14:17:53 2018 +0200
Branches: cycles_embree
https://developer.blender.org/rB30d4bbcab3b0bc49e3a056a8a64697bd432f1499

Cycles: Some cleanup of Embree integration.

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

M	intern/cycles/bvh/bvh_embree.cpp
M	intern/cycles/bvh/bvh_embree.h
M	intern/cycles/kernel/CMakeLists.txt
M	intern/cycles/kernel/bvh/bvh.h
R070	intern/cycles/kernel/bvh/bvh_embree_traversal.h	intern/cycles/kernel/bvh/bvh_embree.h
M	intern/cycles/kernel/kernel_types.h

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

diff --git a/intern/cycles/bvh/bvh_embree.cpp b/intern/cycles/bvh/bvh_embree.cpp
index 6da9e79722a..934701240c0 100644
--- a/intern/cycles/bvh/bvh_embree.cpp
+++ b/intern/cycles/bvh/bvh_embree.cpp
@@ -16,25 +16,24 @@
 
 #ifdef WITH_EMBREE
 
-#include "bvh/bvh_embree.h"
-
-#include "render/mesh.h"
-#include "render/object.h"
-#include "util/util_progress.h"
-#include "util/util_foreach.h"
-#include "util/util_logging.h"
+#include <pmmintrin.h>
+#include <xmmintrin.h>
+#include <embree3/rtcore_geometry.h>
 
-#include "embree3/rtcore_geometry.h"
+#include "bvh/bvh_embree.h"
 
 /* Kernel includes are necessary so that the filter function for Embree can access the packed BVH. */
+#include "kernel/bvh/bvh_embree.h"
 #include "kernel/kernel_compat_cpu.h"
 #include "kernel/split/kernel_split_data_types.h"
 #include "kernel/kernel_globals.h"
 #include "kernel/kernel_random.h"
-#include "kernel/bvh/bvh_embree_traversal.h"
 
-#include "xmmintrin.h"
-#include "pmmintrin.h"
+#include "render/mesh.h"
+#include "render/object.h"
+#include "util/util_foreach.h"
+#include "util/util_logging.h"
+#include "util/util_progress.h"
 
 CCL_NAMESPACE_BEGIN
 
@@ -866,4 +865,3 @@ void BVHEmbree::refit_nodes()
 CCL_NAMESPACE_END
 
 #endif /* WITH_EMBREE */
-
diff --git a/intern/cycles/bvh/bvh_embree.h b/intern/cycles/bvh/bvh_embree.h
index 6d8297f0fb4..119fe0d49f7 100644
--- a/intern/cycles/bvh/bvh_embree.h
+++ b/intern/cycles/bvh/bvh_embree.h
@@ -19,24 +19,25 @@
 
 #ifdef WITH_EMBREE
 
+#include <embree3/rtcore.h>
+#include <embree3/rtcore_scene.h>
+
 #include "bvh/bvh.h"
 #include "bvh/bvh_params.h"
 
+#include "util/util_thread.h"
 #include "util/util_types.h"
 #include "util/util_vector.h"
-#include "util/util_thread.h"
-
-#include "embree3/rtcore.h"
-#include "embree3/rtcore_scene.h"
 
 CCL_NAMESPACE_BEGIN
 
 class Mesh;
+struct EmbreeInstance;
 
 class BVHEmbree : public BVH
 {
 public:
-	void build(Progress& progress, Stats *stats);
+	virtual void build(Progress& progress, Stats *stats) override;
 	virtual ~BVHEmbree();
 	RTCScene scene;
 	static void destroy(RTCScene);
@@ -44,8 +45,8 @@ protected:
 	friend class BVH;
 	BVHEmbree(const BVHParams& params, const vector<Object*>& objects);
 
-	virtual void pack_nodes(const BVHNode*);
-	virtual void refit_nodes();
+	virtual void pack_nodes(const BVHNode*) override;
+	virtual void refit_nodes() override;
 
 	void add_object(Object *ob, int i);
 	void add_instance(Object *ob, int i);
diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt
index c6e92c6d89d..8628d0486cf 100644
--- a/intern/cycles/kernel/CMakeLists.txt
+++ b/intern/cycles/kernel/CMakeLists.txt
@@ -82,6 +82,7 @@ set(SRC_BVH_HEADERS
 	bvh/obvh_traversal.h
 	bvh/obvh_volume.h
 	bvh/obvh_volume_all.h
+	bvh/bvh_embree.h
 )
 
 set(SRC_HEADERS
diff --git a/intern/cycles/kernel/bvh/bvh.h b/intern/cycles/kernel/bvh/bvh.h
index 429964aac57..6d5dc6264b5 100644
--- a/intern/cycles/kernel/bvh/bvh.h
+++ b/intern/cycles/kernel/bvh/bvh.h
@@ -26,7 +26,7 @@
  * with CPU/CUDA/OpenCL. */
 
 #ifdef __EMBREE__
-#include "kernel/bvh/bvh_embree_traversal.h"
+#include "kernel/bvh/bvh_embree.h"
 #endif
 
 CCL_NAMESPACE_BEGIN
diff --git a/intern/cycles/kernel/bvh/bvh_embree_traversal.h b/intern/cycles/kernel/bvh/bvh_embree.h
similarity index 70%
rename from intern/cycles/kernel/bvh/bvh_embree_traversal.h
rename to intern/cycles/kernel/bvh/bvh_embree.h
index a50ecc7e432..94bd5dab991 100644
--- a/intern/cycles/kernel/bvh/bvh_embree_traversal.h
+++ b/intern/cycles/kernel/bvh/bvh_embree.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017 , Blender Foundation.
+ * Copyright 2017-2018, Blender Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,8 +14,15 @@
  * limitations under the License.
  */
 
-#include "embree3/rtcore_ray.h"
-#include "embree3/rtcore_scene.h"
+#include <embree3/rtcore_ray.h>
+#include <embree3/rtcore_scene.h>
+
+#include "kernel/kernel_compat_cpu.h"
+#include "kernel/split/kernel_split_data_types.h"
+#include "kernel/kernel_globals.h"
+#include "util/util_vector.h"
+
+CCL_NAMESPACE_BEGIN
 
 struct CCLIntersectContext  {
 	typedef enum {
@@ -26,21 +33,20 @@ struct CCLIntersectContext  {
 		
 	} RayType;
 
-	// cycles extensions:
-	ccl::KernelGlobals *kg;
+	KernelGlobals *kg;
 	RayType type;
 
-	// for shadow rays
-	ccl::Intersection *isect_s;
+	/* for shadow rays */
+	Intersection *isect_s;
 	int max_hits;
 	int num_hits;
 
-	// for SSS Rays:
-	ccl::LocalIntersection *ss_isect;
+	/* for SSS Rays: */
+	LocalIntersection *ss_isect;
 	int sss_object_id;
-	ccl::uint *lcg_state;
+	uint *lcg_state;
 
-	CCLIntersectContext(const ccl::Ray& ray, ccl::KernelGlobals *kg_,  RayType type_)
+	CCLIntersectContext(const Ray& ray, KernelGlobals *kg_,  RayType type_)
 	{
 		kg = kg_;
 		type = type_;
@@ -65,7 +71,7 @@ public:
 	CCLIntersectContext* userRayExt;
 };
 
-ccl_device_inline void kernel_embree_setup_ray(const ccl::Ray& ray, RTCRay& rtc_ray, const ccl::uint visibility)
+ccl_device_inline void kernel_embree_setup_ray(const Ray& ray, RTCRay& rtc_ray, const uint visibility)
 {
 	rtc_ray.org_x = ray.P.x;
 	rtc_ray.org_y = ray.P.y;
@@ -79,20 +85,20 @@ ccl_device_inline void kernel_embree_setup_ray(const ccl::Ray& ray, RTCRay& rtc_
 	rtc_ray.mask = visibility;
 }
 
-ccl_device_inline void kernel_embree_setup_rayhit(const ccl::Ray& ray, RTCRayHit& rayhit, const ccl::uint visibility)
+ccl_device_inline void kernel_embree_setup_rayhit(const Ray& ray, RTCRayHit& rayhit, const uint visibility)
 {
 	kernel_embree_setup_ray(ray, rayhit.ray, visibility);
 	rayhit.hit.geomID = RTC_INVALID_GEOMETRY_ID;
 	rayhit.hit.primID = RTC_INVALID_GEOMETRY_ID;
 }
 
-ccl_device_inline void kernel_embree_convert_hit(ccl::KernelGlobals *kg, const RTCRay *ray, const RTCHit *hit, ccl::Intersection *isect)
+ccl_device_inline void kernel_embree_convert_hit(KernelGlobals *kg, const RTCRay *ray, const RTCHit *hit, Intersection *isect)
 {
 	bool is_hair = hit->geomID & 1;
 	isect->u = is_hair ? hit->u : 1.0f - hit->v - hit->u;
 	isect->v = is_hair ? hit->v : hit->u;
 	isect->t = ray->tfar;
-	isect->Ng = ccl::make_float3(hit->Ng_x, hit->Ng_y, hit->Ng_z);
+	isect->Ng = make_float3(hit->Ng_x, hit->Ng_y, hit->Ng_z);
 	if(hit->instID[0] != RTC_INVALID_GEOMETRY_ID) {
 		RTCScene inst_scene = (RTCScene)rtcGetGeometryUserData(rtcGetGeometry(kernel_data.bvh.scene, hit->instID[0]));
 		isect->prim = hit->primID + (intptr_t)rtcGetGeometryUserData(rtcGetGeometry(inst_scene, hit->geomID)) + kernel_tex_fetch(__object_node, hit->instID[0]/2);
@@ -105,14 +111,16 @@ ccl_device_inline void kernel_embree_convert_hit(ccl::KernelGlobals *kg, const R
 	isect->type = kernel_tex_fetch(__prim_type, isect->prim);
 }
 
-ccl_device_inline void kernel_embree_convert_local_hit(ccl::KernelGlobals *kg, const RTCRay *ray, const RTCHit *hit, ccl::Intersection *isect, int local_object_id)
+ccl_device_inline void kernel_embree_convert_local_hit(KernelGlobals *kg, const RTCRay *ray, const RTCHit *hit, Intersection *isect, int local_object_id)
 {
 	isect->u = 1.0f - hit->v - hit->u;
 	isect->v = hit->u;
 	isect->t = ray->tfar;
-	isect->Ng = ccl::make_float3(hit->Ng_x, hit->Ng_y, hit->Ng_z);
+	isect->Ng = make_float3(hit->Ng_x, hit->Ng_y, hit->Ng_z);
 	RTCScene inst_scene = (RTCScene)rtcGetGeometryUserData(rtcGetGeometry(kernel_data.bvh.scene, local_object_id * 2));
 	isect->prim = hit->primID + (intptr_t)rtcGetGeometryUserData(rtcGetGeometry(inst_scene, hit->geomID)) + kernel_tex_fetch(__object_node, local_object_id);
 	isect->object = local_object_id;
 	isect->type = kernel_tex_fetch(__prim_type, isect->prim);
 }
+
+CCL_NAMESPACE_END
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index b8d2dffca91..f799dff3a43 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -26,8 +26,8 @@
 #endif
 
 #if defined(__KERNEL_CPU__) && defined(WITH_EMBREE)
-#include "embree3/rtcore.h"
-#include "embree3/rtcore_scene.h"
+#include <embree3/rtcore.h>
+#include <embree3/rtcore_scene.h>
 #endif
 
 /* TODO(sergey): This is only to make it possible to include this header



More information about the Bf-blender-cvs mailing list