diff --git a/kernels/CMakeLists.txt b/kernels/CMakeLists.txt index 7c2f43d..106b1d5 100644 --- a/kernels/CMakeLists.txt +++ b/kernels/CMakeLists.txt @@ -208,6 +208,12 @@ embree_files(EMBREE_LIBRARY_FILES_AVX512 ${AVX512}) #message("AVX2: ${EMBREE_LIBRARY_FILES_AVX2}") #message("AVX512: ${EMBREE_LIBRARY_FILES_AVX512}") +# Bundle Neon2x into the main static library. +IF(EMBREE_ISA_NEON2X AND EMBREE_STATIC_LIB) + LIST(APPEND EMBREE_LIBRARY_FILES ${EMBREE_LIBRARY_FILES_AVX2}) + LIST(REMOVE_DUPLICATES EMBREE_LIBRARY_FILES) +ENDIF() + # replaces all .cpp files with a dummy file that includes that .cpp file # this is to work around an ICC name mangling issue related to lambda functions under windows MACRO (CreateISADummyFiles list isa) @@ -311,7 +317,7 @@ IF (EMBREE_ISA_AVX AND EMBREE_LIBRARY_FILES_AVX) ENDIF() ENDIF() -IF (EMBREE_ISA_AVX2 AND EMBREE_LIBRARY_FILES_AVX2) +IF (EMBREE_ISA_AVX2 AND EMBREE_LIBRARY_FILES_AVX2 AND NOT (EMBREE_ISA_NEON2X AND EMBREE_STATIC_LIB)) DISABLE_STACK_PROTECTOR_FOR_INTERSECTORS(${EMBREE_LIBRARY_FILES_AVX2}) ADD_LIBRARY(embree_avx2 STATIC ${EMBREE_LIBRARY_FILES_AVX2}) TARGET_LINK_LIBRARIES(embree_avx2 PRIVATE tasking) diff --git a/kernels/rthwif/rtbuild/rtbuild.cpp b/kernels/rthwif/rtbuild/rtbuild.cpp index 6d439f939..367b1ce7b 100644 --- a/kernels/rthwif/rtbuild/rtbuild.cpp +++ b/kernels/rthwif/rtbuild/rtbuild.cpp @@ -10,7 +10,7 @@ namespace embree { using namespace embree::isa; - static std::unique_ptr g_arena; + static tbb::task_arena g_arena(tbb::this_task_arena::max_concurrency(),tbb::this_task_arena::max_concurrency()); typedef enum _ze_raytracing_accel_format_internal_t { ZE_RTAS_DEVICE_FORMAT_EXP_INVALID = 0, // invalid acceleration structure format @@ -210,13 +210,10 @@ namespace embree RTHWIF_API void zeRTASInitExp() { - uint32_t numThreads = tbb::this_task_arena::max_concurrency(); - g_arena.reset(new tbb::task_arena(numThreads,numThreads)); } RTHWIF_API void zeRTASExitExp() { - g_arena.reset(); } typedef struct _zet_base_desc_t @@ -740,7 +737,7 @@ namespace embree //if (op->hBuilder != hBuilder) // return ZE_RESULT_ERROR_INVALID_ARGUMENT; - g_arena->execute([&](){ op->group.run([=](){ + g_arena.execute([&](){ op->group.run([=](){ op->errorCode = zeRTASBuilderBuildExpInternal(args, pScratchBuffer, scratchBufferSizeBytes, pRtasBuffer, rtasBufferSizeBytes, @@ -753,7 +750,7 @@ namespace embree else { ze_result_t errorCode = ZE_RESULT_SUCCESS; - g_arena->execute([&](){ errorCode = zeRTASBuilderBuildExpInternal(args, + g_arena.execute([&](){ errorCode = zeRTASBuilderBuildExpInternal(args, pScratchBuffer, scratchBufferSizeBytes, pRtasBuffer, rtasBufferSizeBytes, pBuildUserPtr, pBounds, pRtasBufferSizeBytes); @@ -801,7 +798,7 @@ namespace embree VALIDATE(hParallelOperation); ze_rtas_parallel_operation_t* op = (ze_rtas_parallel_operation_t*) hParallelOperation; - g_arena->execute([&](){ op->group.wait(); }); + g_arena.execute([&](){ op->group.wait(); }); return op->errorCode; } }