[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