Skip to content

Commit e09c68c

Browse files
authored
Merge branch 'RenderKit:master' into patch-1
2 parents ab0a08c + 756ff35 commit e09c68c

144 files changed

Lines changed: 82 additions & 66 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CMakeLists.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -317,9 +317,6 @@ IF (WIN32)
317317
INCLUDE(gnu)
318318
ELSE()
319319
set(EMBREE_SYCL_SUPPORT OFF)
320-
IF (EMBREE_ISA_AVX512)
321-
MESSAGE(FATAL_ERROR "Microsoft Visual C++ Compiler does not support AVX512. Please use Intel Compiler or Clang.")
322-
ENDIF()
323320
MESSAGE("-- MSVC detected")
324321
INCLUDE (msvc)
325322
ENDIF()
@@ -403,7 +400,7 @@ IF (EMBREE_MAX_ISA STREQUAL "NONE")
403400
OPTION(EMBREE_ISA_SSE42 "Enables SSE4.2 ISA." ON)
404401
OPTION(EMBREE_ISA_AVX "Enables AVX ISA." ${COMPILER_SUPPORTS_AVX})
405402
OPTION(EMBREE_ISA_AVX2 "Enables AVX2 ISA." ${COMPILER_SUPPORTS_AVX2})
406-
IF (WIN32 OR APPLE)
403+
IF (APPLE)
407404
OPTION(EMBREE_ISA_AVX512 "Enables AVX512 ISA." OFF)
408405
ELSE()
409406
OPTION(EMBREE_ISA_AVX512 "Enables AVX512 ISA." ${COMPILER_SUPPORTS_AVX512})

common/cmake/msvc.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ SET(FLAGS_SSE2 "/D__SSE__ /D__SSE2__")
55
SET(FLAGS_SSE42 "${FLAGS_SSE2} /D__SSE3__ /D__SSSE3__ /D__SSE4_1__ /D__SSE4_2__")
66
SET(FLAGS_AVX "${FLAGS_SSE42} /arch:AVX")
77
SET(FLAGS_AVX2 "${FLAGS_SSE42} /arch:AVX2")
8+
SET(FLAGS_AVX512 "${FLAGS_AVX2} /arch:AVX512")
89

910
SET(COMMON_CXX_FLAGS "")
1011
SET(COMMON_CXX_FLAGS "${COMMON_CXX_FLAGS} /EHsc") # catch C++ exceptions only and extern "C" functions never throw a C++ exception

common/sys/barrier.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ namespace embree
101101
__forceinline void wait()
102102
{
103103
mutex.lock();
104-
count++;
104+
count = count + 1;
105105

106106
if (count == barrierSize) {
107107
count = 0;

doc/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ webimages := $(addprefix www/, $(images_jpg))
1010
docfiles := $(addprefix doc/, README.md CHANGELOG.md readme.pdf)
1111
spec := embree-spec.rst
1212
man_src := $(wildcard src/api/*.md)
13-
manfiles := $(patsubst src/api/%.md,man/man3/%.4embree4,$(man_src))
13+
manfiles := $(patsubst src/api/%.md,man/man3/%.3embree4,$(man_src))
1414

1515
all: www images man doc spec
1616
www: $(webpages) $(webimages)
@@ -175,7 +175,7 @@ doc/readme.pdf: tmp/readme.tex tmp/readme_all.tex $(images_jpg) $(images_pdf)
175175
### manpages
176176
########################################################################
177177

178-
man/man3/%.4embree4: src/api/%.md
178+
man/man3/%.3embree4: src/api/%.md
179179
$(PANDOC) -s -t man $< -o $@
180180

181181
########################################################################

kernels/bvh/bvh_builder_morton.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -566,16 +566,16 @@ namespace embree
566566
#endif
567567

568568
#if defined(EMBREE_GEOMETRY_INSTANCE)
569-
Builder* BVH4InstanceMeshBuilderMortonGeneral (void* bvh, Instance* mesh, Geometry::GTypeMask gtype, unsigned int geomID, size_t mode) { return new class BVHNMeshBuilderMorton<4,Instance,InstancePrimitive>((BVH4*)bvh,mesh,gtype,geomID,1,BVH4::maxLeafBlocks); }
569+
Builder* BVH4InstanceMeshBuilderMortonGeneral (void* bvh, Instance* mesh, unsigned int geomID, size_t mode) { return new class BVHNMeshBuilderMorton<4,Instance,InstancePrimitive>((BVH4*)bvh,mesh,geomID,1,BVH4::maxLeafBlocks); }
570570
#if defined(__AVX__)
571-
Builder* BVH8InstanceMeshBuilderMortonGeneral (void* bvh, Instance* mesh, Geometry::GTypeMask gtype, unsigned int geomID, size_t mode) { return new class BVHNMeshBuilderMorton<8,Instance,InstancePrimitive>((BVH8*)bvh,mesh,gtype,geomID,1,BVH4::maxLeafBlocks); }
571+
Builder* BVH8InstanceMeshBuilderMortonGeneral (void* bvh, Instance* mesh, unsigned int geomID, size_t mode) { return new class BVHNMeshBuilderMorton<8,Instance,InstancePrimitive>((BVH8*)bvh,mesh,geomID,1,BVH4::maxLeafBlocks); }
572572
#endif
573573
#endif
574574

575575
#if defined(EMBREE_GEOMETRY_INSTANCE_ARRAY)
576-
Builder* BVH4InstanceArrayMeshBuilderMortonGeneral (void* bvh, InstanceArray* mesh, Geometry::GTypeMask gtype, unsigned int geomID, size_t mode) { return new class BVHNMeshBuilderMorton<4,InstanceArray,InstanceArrayPrimitive>((BVH4*)bvh,mesh,gtype,geomID,1,BVH4::maxLeafBlocks); }
576+
Builder* BVH4InstanceArrayMeshBuilderMortonGeneral (void* bvh, InstanceArray* mesh, unsigned int geomID, size_t mode) { return new class BVHNMeshBuilderMorton<4,InstanceArray,InstanceArrayPrimitive>((BVH4*)bvh,mesh,geomID,1,BVH4::maxLeafBlocks); }
577577
#if defined(__AVX__)
578-
Builder* BVH8InstanceArrayMeshBuilderMortonGeneral (void* bvh, InstanceArray* mesh, Geometry::GTypeMask gtype, unsigned int geomID, size_t mode) { return new class BVHNMeshBuilderMorton<8,InstanceArray,InstanceArrayPrimitive>((BVH8*)bvh,mesh,gtype,geomID,1,BVH4::maxLeafBlocks); }
578+
Builder* BVH8InstanceArrayMeshBuilderMortonGeneral (void* bvh, InstanceArray* mesh, unsigned int geomID, size_t mode) { return new class BVHNMeshBuilderMorton<8,InstanceArray,InstanceArrayPrimitive>((BVH8*)bvh,mesh,geomID,1,BVH4::maxLeafBlocks); }
579579
#endif
580580
#endif
581581

kernels/bvh/bvh_builder_twolevel_internal.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ namespace embree
3030
DECLARE_ISA_FUNCTION(Builder*,BVH4VirtualMeshBuilderMortonGeneral,void* COMMA UserGeometry* COMMA unsigned int COMMA size_t);
3131
DECLARE_ISA_FUNCTION(Builder*,BVH4VirtualMeshBuilderSAH,void* COMMA UserGeometry* COMMA unsigned int COMMA size_t);
3232
DECLARE_ISA_FUNCTION(Builder*,BVH4VirtualMeshRefitSAH,void* COMMA UserGeometry* COMMA unsigned int COMMA size_t);
33-
DECLARE_ISA_FUNCTION(Builder*,BVH4InstanceMeshBuilderMortonGeneral,void* COMMA Instance* COMMA Geometry::GTypeMask COMMA unsigned int COMMA size_t);
33+
DECLARE_ISA_FUNCTION(Builder*,BVH4InstanceMeshBuilderMortonGeneral,void* COMMA Instance* COMMA unsigned int COMMA size_t);
3434
DECLARE_ISA_FUNCTION(Builder*,BVH4InstanceMeshBuilderSAH,void* COMMA Instance* COMMA Geometry::GTypeMask COMMA unsigned int COMMA size_t);
3535
DECLARE_ISA_FUNCTION(Builder*,BVH4InstanceMeshRefitSAH,void* COMMA Instance* COMMA Geometry::GTypeMask COMMA unsigned int COMMA size_t)
36-
DECLARE_ISA_FUNCTION(Builder*,BVH4InstanceArrayMeshBuilderMortonGeneral,void* COMMA InstanceArray* COMMA Geometry::GTypeMask COMMA unsigned int COMMA size_t);
36+
DECLARE_ISA_FUNCTION(Builder*,BVH4InstanceArrayMeshBuilderMortonGeneral,void* COMMA InstanceArray* COMMA unsigned int COMMA size_t);
3737
DECLARE_ISA_FUNCTION(Builder*,BVH4InstanceArrayMeshBuilderSAH,void* COMMA InstanceArray* COMMA Geometry::GTypeMask COMMA unsigned int COMMA size_t);
3838
DECLARE_ISA_FUNCTION(Builder*,BVH4InstanceArrayMeshRefitSAH,void* COMMA InstanceArray* COMMA Geometry::GTypeMask COMMA unsigned int COMMA size_t)
3939
DECLARE_ISA_FUNCTION(Builder*,BVH8Triangle4MeshBuilderMortonGeneral,void* COMMA TriangleMesh* COMMA unsigned int COMMA size_t);
@@ -51,10 +51,10 @@ namespace embree
5151
DECLARE_ISA_FUNCTION(Builder*,BVH8VirtualMeshBuilderMortonGeneral,void* COMMA UserGeometry* COMMA unsigned int COMMA size_t);
5252
DECLARE_ISA_FUNCTION(Builder*,BVH8VirtualMeshBuilderSAH,void* COMMA UserGeometry* COMMA unsigned int COMMA size_t);
5353
DECLARE_ISA_FUNCTION(Builder*,BVH8VirtualMeshRefitSAH,void* COMMA UserGeometry* COMMA unsigned int COMMA size_t);
54-
DECLARE_ISA_FUNCTION(Builder*,BVH8InstanceMeshBuilderMortonGeneral,void* COMMA Instance* COMMA Geometry::GTypeMask COMMA unsigned int COMMA size_t);
54+
DECLARE_ISA_FUNCTION(Builder*,BVH8InstanceMeshBuilderMortonGeneral,void* COMMA Instance* COMMA unsigned int COMMA size_t);
5555
DECLARE_ISA_FUNCTION(Builder*,BVH8InstanceMeshBuilderSAH,void* COMMA Instance* COMMA Geometry::GTypeMask COMMA unsigned int COMMA size_t);
5656
DECLARE_ISA_FUNCTION(Builder*,BVH8InstanceMeshRefitSAH,void* COMMA Instance* COMMA Geometry::GTypeMask COMMA unsigned int COMMA size_t)
57-
DECLARE_ISA_FUNCTION(Builder*,BVH8InstanceArrayMeshBuilderMortonGeneral,void* COMMA InstanceArray* COMMA Geometry::GTypeMask COMMA unsigned int COMMA size_t);
57+
DECLARE_ISA_FUNCTION(Builder*,BVH8InstanceArrayMeshBuilderMortonGeneral,void* COMMA InstanceArray* COMMA unsigned int COMMA size_t);
5858
DECLARE_ISA_FUNCTION(Builder*,BVH8InstanceArrayMeshBuilderSAH,void* COMMA InstanceArray* COMMA Geometry::GTypeMask COMMA unsigned int COMMA size_t);
5959
DECLARE_ISA_FUNCTION(Builder*,BVH8InstanceArrayMeshRefitSAH,void* COMMA InstanceArray* COMMA Geometry::GTypeMask COMMA unsigned int COMMA size_t)
6060

@@ -93,12 +93,12 @@ namespace embree
9393
template<>
9494
struct MortonBuilder<4,Instance,InstancePrimitive> {
9595
MortonBuilder () {}
96-
Builder* operator () (void* bvh, Instance* mesh, size_t geomID, Geometry::GTypeMask gtype) { return BVH4InstanceMeshBuilderMortonGeneral(bvh,mesh,gtype,geomID,0);}
96+
Builder* operator () (void* bvh, Instance* mesh, size_t geomID, Geometry::GTypeMask /*gtype*/) { return BVH4InstanceMeshBuilderMortonGeneral(bvh,mesh,geomID,0);}
9797
};
9898
template<>
9999
struct MortonBuilder<4,InstanceArray,InstanceArrayPrimitive> {
100100
MortonBuilder () {}
101-
Builder* operator () (void* bvh, InstanceArray* mesh, size_t geomID, Geometry::GTypeMask gtype) { return BVH4InstanceArrayMeshBuilderMortonGeneral(bvh,mesh,gtype,geomID,0);}
101+
Builder* operator () (void* bvh, InstanceArray* mesh, size_t geomID, Geometry::GTypeMask /*gtype*/) { return BVH4InstanceArrayMeshBuilderMortonGeneral(bvh,mesh,geomID,0);}
102102
};
103103
template<>
104104
struct MortonBuilder<8,TriangleMesh,Triangle4> {
@@ -128,12 +128,12 @@ namespace embree
128128
template<>
129129
struct MortonBuilder<8,Instance,InstancePrimitive> {
130130
MortonBuilder () {}
131-
Builder* operator () (void* bvh, Instance* mesh, size_t geomID, Geometry::GTypeMask gtype) { return BVH8InstanceMeshBuilderMortonGeneral(bvh,mesh,gtype,geomID,0);}
131+
Builder* operator () (void* bvh, Instance* mesh, size_t geomID, Geometry::GTypeMask /*gtype*/) { return BVH8InstanceMeshBuilderMortonGeneral(bvh, mesh, geomID, 0); }
132132
};
133133
template<>
134134
struct MortonBuilder<8,InstanceArray,InstanceArrayPrimitive> {
135135
MortonBuilder () {}
136-
Builder* operator () (void* bvh, InstanceArray* mesh, size_t geomID, Geometry::GTypeMask gtype) { return BVH8InstanceArrayMeshBuilderMortonGeneral(bvh,mesh,gtype,geomID,0);}
136+
Builder* operator () (void* bvh, InstanceArray* mesh, size_t geomID, Geometry::GTypeMask /*gtype*/) { return BVH8InstanceArrayMeshBuilderMortonGeneral(bvh, mesh, geomID, 0); }
137137
};
138138

139139
template<int N, typename Mesh, typename Primitive>
@@ -301,4 +301,4 @@ namespace embree
301301
};
302302
}
303303
}
304-
}
304+
}

kernels/common/scene_instance.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ namespace embree
2828
device->free(local2world);
2929
device->memoryMonitor(-ssize_t(numTimeSteps*sizeof(AffineSpace3ff)), true);
3030
if (object) object->refDec();
31-
device->memoryMonitor(-sizeof(*this), false);
31+
device->memoryMonitor(-ssize_t(sizeof(*this)), false);
3232
}
3333

3434
void Instance::setNumTimeSteps (unsigned int numTimeSteps_in)

kernels/common/scene_instance_array.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ namespace embree
2828
}
2929
device->free(objects);
3030
}
31-
device->memoryMonitor(-sizeof(*this), false);
31+
device->memoryMonitor(-ssize_t(sizeof(*this)), false);
3232
}
3333

3434
void InstanceArray::setNumTimeSteps (unsigned int numTimeSteps_in)

kernels/sycl/rthwif_embree.cpp

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -214,10 +214,10 @@ __forceinline bool intersect_user_geometry(intel_ray_query_t& query, Ray& ray, U
214214
}
215215

216216
template<typename Ray>
217-
__forceinline bool intersect_instance(intel_ray_query_t& query, Ray& ray, Geometry* geom, Scenes& scenes, sycl::private_ptr<RayQueryContext> context, uint32_t geomID, uint32_t primID, bool instance_array);
217+
__forceinline bool intersect_instance(intel_ray_query_t& query, Ray& ray, Geometry* geom, Scenes& scenes, sycl::private_ptr<RayQueryContext> context, uint32_t geomID, uint32_t primID, bool instance_array, const RTCFeatureFlags feature_mask);
218218

219219
template<>
220-
__forceinline bool intersect_instance(intel_ray_query_t& query, RayHit& ray, Geometry* geom, Scenes& scenes, sycl::private_ptr<RayQueryContext> context, uint32_t geomID, uint32_t primID, bool instance_array)
220+
__forceinline bool intersect_instance(intel_ray_query_t& query, RayHit& ray, Geometry* geom, Scenes& scenes, sycl::private_ptr<RayQueryContext> context, uint32_t geomID, uint32_t primID, bool instance_array, const RTCFeatureFlags feature_mask)
221221
{
222222
/* perform ray mask test */
223223
#if defined(EMBREE_RAY_MASK)
@@ -239,9 +239,18 @@ __forceinline bool intersect_instance(intel_ray_query_t& query, RayHit& ray, Geo
239239
: (Scene*) ((Instance*)geom)->object;
240240
if (!object) return false;
241241

242-
const AffineSpace3fa world2local = instance_array
243-
? ((InstanceArray*)geom)->getWorld2Local(primID, ray.time())
244-
: ((Instance*)geom)->getWorld2Local(ray.time());
242+
AffineSpace3fa world2local;
243+
if (feature_mask & RTC_FEATURE_FLAG_MOTION_BLUR) {
244+
world2local =
245+
instance_array
246+
? ((InstanceArray *)geom)->getWorld2Local(primID, ray.time())
247+
: ((Instance *)geom)->getWorld2Local(ray.time());
248+
} else {
249+
world2local =
250+
instance_array
251+
? ((InstanceArray *)geom)->getWorld2Local(primID)
252+
: ((Instance *)geom)->getWorld2Local();
253+
}
245254

246255
const Vec3fa ray_org = xfmPoint (world2local, (Vec3f) ray.org);
247256
const Vec3fa ray_dir = xfmVector(world2local, (Vec3f) ray.dir);
@@ -260,7 +269,7 @@ __forceinline bool intersect_instance(intel_ray_query_t& query, RayHit& ray, Geo
260269
#endif
261270

262271
uint32_t bvh_id = 0;
263-
if (context->args->feature_mask & RTC_FEATURE_FLAG_MOTION_BLUR) {
272+
if (feature_mask & RTC_FEATURE_FLAG_MOTION_BLUR) {
264273
float time = clamp(ray.time(),0.0f,1.0f);
265274
uint32_t numTimeSegments = object->getMaxTimeSegments();
266275
bvh_id = (uint32_t) clamp(uint32_t(numTimeSegments*time), 0u, numTimeSegments-1);
@@ -274,7 +283,7 @@ __forceinline bool intersect_instance(intel_ray_query_t& query, RayHit& ray, Geo
274283
}
275284

276285
template<>
277-
__forceinline bool intersect_instance(intel_ray_query_t& query, Ray& ray, Geometry* geom, Scenes& scenes, sycl::private_ptr<RayQueryContext> context, uint32_t geomID, uint32_t primID, bool instance_array)
286+
__forceinline bool intersect_instance(intel_ray_query_t& query, Ray& ray, Geometry* geom, Scenes& scenes, sycl::private_ptr<RayQueryContext> context, uint32_t geomID, uint32_t primID, bool instance_array, const RTCFeatureFlags feature_mask)
278287
{
279288
/* perform ray mask test */
280289
#if defined(EMBREE_RAY_MASK)
@@ -296,9 +305,18 @@ __forceinline bool intersect_instance(intel_ray_query_t& query, Ray& ray, Geomet
296305
: (Scene*) ((Instance*)geom)->object;
297306
if (!object) return false;
298307

299-
const AffineSpace3fa world2local = instance_array
300-
? ((InstanceArray*)geom)->getWorld2Local(primID, ray.time())
301-
: ((Instance*)geom)->getWorld2Local(ray.time());
308+
AffineSpace3fa world2local;
309+
if (feature_mask & RTC_FEATURE_FLAG_MOTION_BLUR) {
310+
world2local =
311+
instance_array
312+
? ((InstanceArray *)geom)->getWorld2Local(primID, ray.time())
313+
: ((Instance *)geom)->getWorld2Local(ray.time());
314+
} else {
315+
world2local =
316+
instance_array
317+
? ((InstanceArray *)geom)->getWorld2Local(primID)
318+
: ((Instance *)geom)->getWorld2Local();
319+
}
302320

303321
const Vec3fa ray_org = xfmPoint (world2local, (Vec3f) ray.org);
304322
const Vec3fa ray_dir = xfmVector(world2local, (Vec3f) ray.dir);
@@ -352,7 +370,7 @@ __forceinline bool intersect_primitive(intel_ray_query_t& query, Ray& ray, Scene
352370
#if defined(EMBREE_GEOMETRY_INSTANCE) || defined(EMBREE_GEOMETRY_INSTANCE_ARRAY)
353371
if ((feature_mask & RTC_FEATURE_FLAG_INSTANCE) && (geom->getTypeMask() & Geometry::MTY_INSTANCE) ||
354372
(feature_mask & RTC_FEATURE_FLAG_INSTANCE_ARRAY) && (geom->getTypeMask() & Geometry::MTY_INSTANCE_ARRAY)) {
355-
return intersect_instance(query,ray,(Instance*)geom, scenes, context, geomID, primID, geom->getTypeMask() & Geometry::MTY_INSTANCE_ARRAY);
373+
return intersect_instance(query,ray,(Instance*)geom, scenes, context, geomID, primID, geom->getTypeMask() & Geometry::MTY_INSTANCE_ARRAY, feature_mask);
356374
}
357375
#endif
358376

0 commit comments

Comments
 (0)