Skip to content

Commit a9c1b5c

Browse files
committed
WIP Bump to Embree v4.4
1 parent 26fbf50 commit a9c1b5c

18 files changed

Lines changed: 108 additions & 77 deletions

modules/cpu/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,8 +472,8 @@ if (OSPRAY_MODULE_GPU)
472472
varying=
473473
unmasked=
474474
export=
475-
rtcIntersectV=rtcIntersect1
476-
rtcOccludedV=rtcOccluded1
475+
rtcTraversableIntersectV=rtcTraversableIntersect1
476+
rtcTraversableOccludedV=rtcTraversableOccluded1
477477
rtcInterpolateV1=rtcInterpolate1
478478
vklComputeSampleV=vklComputeSample
479479
vklComputeGradientV=vklComputeGradient

modules/cpu/camera/Camera.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,17 @@ void Camera::commit()
5757
embreeGeometry = rtcNewGeometry(
5858
getISPCDevice().getEmbreeDevice(), RTC_GEOMETRY_TYPE_INSTANCE);
5959
embreeScene = rtcNewScene(getISPCDevice().getEmbreeDevice());
60+
rtcSetGeometryInstancedScene(embreeGeometry, embreeScene); // dummy
6061
rtcAttachGeometryByID(embreeScene, embreeGeometry, 0);
6162
}
6263

6364
motionTransform.setEmbreeTransform(embreeGeometry);
65+
rtcCommitScene(embreeScene);
66+
getSh()->traversable = rtcGetSceneTraversable(embreeScene);
6467

6568
if (shutter.lower == shutter.upper || !motionTransform.motionBlur) {
6669
// directly interpolate to single shutter time
67-
rtcGetGeometryTransformFromScene(embreeScene,
68-
0,
70+
rtcGetGeometryTransform(embreeGeometry,
6971
shutter.lower,
7072
RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR,
7173
&motionTransform.transform);
@@ -76,8 +78,7 @@ void Camera::commit()
7678
if (motionTransform.motionBlur) {
7779
// use main direction at center of shutter time
7880
affine3f middleTransform;
79-
rtcGetGeometryTransformFromScene(embreeScene,
80-
0,
81+
rtcGetGeometryTransform(embreeGeometry,
8182
shutter.center(),
8283
RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR,
8384
&middleTransform);
@@ -109,7 +110,6 @@ void Camera::commit()
109110
getSh()->subImage.upper = imageEnd;
110111
getSh()->shutter = shutter;
111112
getSh()->motionBlur = motionTransform.motionBlur;
112-
getSh()->scene = embreeScene;
113113
getSh()->globalShutter = shutterType == OSP_SHUTTER_GLOBAL;
114114
getSh()->rollingShutterHorizontal = (shutterType == OSP_SHUTTER_ROLLING_RIGHT
115115
|| shutterType == OSP_SHUTTER_ROLLING_LEFT);

modules/cpu/camera/CameraShared.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ struct Camera
4747
bool needTimeSample;
4848
bool rollingShutterHorizontal;
4949
float rollingShutterDuration;
50-
RTCScene scene; // only to call rtcGetGeometryTransformFromScene
50+
RTCTraversable traversable; // only for rtcGetGeometryTransformFromTraversable
5151

5252
#ifdef __cplusplus
5353
Camera()
@@ -62,7 +62,7 @@ struct Camera
6262
needTimeSample(false),
6363
rollingShutterHorizontal(false),
6464
rollingShutterDuration(0.f),
65-
scene(nullptr)
65+
traversable(nullptr)
6666
{}
6767
};
6868
} // namespace ispc

modules/cpu/camera/OrthographicCamera.ispc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,11 @@ SYCL_EXTERNAL void OrthographicCamera_initRay(const Camera *uniform _self,
2828
const uniform FeatureFlagsOther ffo = getFeatureFlagsOther(ffh);
2929
if (self->super.motionBlur && (ffo & FFO_CAMERA_MOTION_BLUR)) {
3030
AffineSpace3f xfm;
31-
rtcGetGeometryTransformFromScene(
32-
self->super.scene, 0, time, RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR, &xfm);
31+
rtcGetGeometryTransformFromTraversable(self->super.traversable,
32+
0,
33+
time,
34+
RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR,
35+
&xfm);
3336

3437
// we cannot just transform the final org & dir, because interpolated
3538
// transforms can scale (even if original transforms are without scale)

modules/cpu/camera/PanoramicCamera.ispc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,11 @@ SYCL_EXTERNAL void PanoramicCamera_initRay(const Camera *uniform _self,
6565
const uniform FeatureFlagsOther ffo = getFeatureFlagsOther(ffh);
6666
if (self->super.motionBlur && (ffo & FFO_CAMERA_MOTION_BLUR)) {
6767
AffineSpace3f xfm;
68-
rtcGetGeometryTransformFromScene(
69-
self->super.scene, 0, time, RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR, &xfm);
68+
rtcGetGeometryTransformFromTraversable(self->super.traversable,
69+
0,
70+
time,
71+
RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR,
72+
&xfm);
7073

7174
// we cannot just transform the final org & dir, because interpolated
7275
// transforms can scale (even if original transforms are without scale)

modules/cpu/camera/PerspectiveCamera.ispc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ SYCL_EXTERNAL void PerspectiveCamera_initRayMB(const Camera *uniform _self,
8989
const float time = Camera_shutterTime(_self, screen, sample.time);
9090

9191
AffineSpace3f xfm;
92-
rtcGetGeometryTransformFromScene(
93-
self->super.scene, 0, time, RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR, &xfm);
92+
rtcGetGeometryTransformFromTraversable(
93+
self->super.traversable, 0, time, RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR, &xfm);
9494

9595
vec3f org = xfmPoint(xfm, self->org);
9696
vec3f dir = normalize(xfmVector(xfm, self->dir_00));

modules/cpu/common/Instance.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,9 @@ void Instance::setEmbreeGeom(RTCScene scene, unsigned int geomID)
5555
{
5656
RTCGeometry geom = rtcGetGeometry(scene, geomID);
5757
motionTransform.setEmbreeTransform(geom);
58-
getSh()->scene = scene;
5958
getSh()->geomID = geomID;
6059
if (getSh()->motionBlur) {
61-
rtcGetGeometryTransformFromScene(scene,
62-
geomID,
60+
rtcGetGeometryTransform(geom,
6361
.5f,
6462
RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR,
6563
&getSh()->xfm); // for SciVis

modules/cpu/common/Instance.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ struct OSPRAY_SDK_INTERFACE Instance
2424
box3f getBounds() const override;
2525

2626
void setEmbreeGeom(RTCScene scene, unsigned int geomID);
27+
void setEmbreeGeom(RTCTraversable traversable)
28+
{
29+
getSh()->traversable = traversable;
30+
}
2731

2832
Ref<Group> group;
2933
const Ref<Group> groupAPI;

modules/cpu/common/Instance.ih

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,11 @@ inline uniform AffineSpace3f Instance_getTransform(
2323
const Instance *uniform self, const uniform float time)
2424
{
2525
uniform AffineSpace3f xfm;
26-
rtcGetGeometryTransformFromScene(
27-
self->scene, self->geomID, time, RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR, &xfm);
26+
rtcGetGeometryTransformFromTraversable(self->traversable,
27+
self->geomID,
28+
time,
29+
RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR,
30+
&xfm);
2831

2932
return xfm;
3033
}
@@ -34,8 +37,11 @@ inline AffineSpace3f Instance_getTransform(
3437
const Instance *uniform self, const float time)
3538
{
3639
AffineSpace3f xfm;
37-
rtcGetGeometryTransformFromScene(
38-
self->scene, self->geomID, time, RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR, &xfm);
40+
rtcGetGeometryTransformFromTraversable(self->traversable,
41+
self->geomID,
42+
time,
43+
RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR,
44+
&xfm);
3945

4046
return xfm;
4147
}

modules/cpu/common/InstanceShared.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ struct Instance
1313
{
1414
Group *group;
1515

16-
// Scene and geomID are used to call rtcGetGeometryTransformFromScene only
17-
RTCScene scene;
16+
// traversable and geomID are only for rtcGetGeometryTransformFromTraversable
17+
RTCTraversable traversable;
1818
unsigned int geomID;
1919

2020
AffineSpace3f xfm;
@@ -26,7 +26,7 @@ struct Instance
2626
#ifdef __cplusplus
2727
Instance()
2828
: group(nullptr),
29-
scene(nullptr),
29+
traversable(nullptr),
3030
geomID(0),
3131
xfm(one),
3232
rcp_xfm(one),

0 commit comments

Comments
 (0)