Compare commits

..
286 Commits
Author SHA1 Message Date
Florian Reibold 800794931f fix typo in max_triangles_per_leaf option. 2024-06-12 10:06:51 +02:00
Jordan Saunders 578fa2d470 Fix triangle splitting crash where FP error causes binning differences
Ultimately the root problem here is that when we do the binning stage we use a
different method to test the first stage and the second. In the first stage we
use bin() to get an integer bin associated with a point in space. In the second
we get the floating point division point on the axis we have chosen to bin on
and do FP comparisons instead. Under most circumstances this is fine.

Occasionally these binning differences will result in unprofitable splits
happening but still building a usable tree.

In the test case I've given, the unprofitable splits we erroneously choose
fill up the split limit and we don't end up splitting the triangles the
previous stage had intended to choose. As a result, we can't split those
triangles. Then when we do the real bifurcation, everything is on the same
side. This resulted in an assertion failure in production (1).

(1) We never noticed that the RelWithDebInfo build in MSVC still has assertions
enabled. I can provide another change disabling these since I think it's
unintentional.
2024-06-12 10:06:51 +02:00
Jordan Saunders e4b1a6c9ad Provide a configuration setting for limiting leaf size 2024-06-12 10:06:51 +02:00
Florian Reibold ae91575ad5 use composite mode in release job for pvc testing due to switch to older
dpcpp.
2024-05-22 11:28:25 +02:00
Florian Reibold b61520b6be clean up continouus tests and move some to nightly. 2024-05-17 21:51:08 +02:00
Florian Reibold 870607d1b7 use same compiler version for release as last time. 2024-05-17 21:51:08 +02:00
Florian Reibold 7363032ded remove ICX-RC tests. ICX 2024.1 is out. 2024-05-17 16:34:57 +02:00
Florian Reibold a1103da9a2 turn L0RTAS builder off for nightly validation test. 2024-05-17 16:34:57 +02:00
Florian Reibold 3244cdefe4 add known issue about ISPC and macOS universal binary in changelog. 2024-05-17 16:34:57 +02:00
Florian Reibold 56d12bac07 use UMD migration for PVC for now because KMD migration is buggy. 2024-05-17 16:34:57 +02:00
Florian Reibold 905a655674 move function for USM prefetch into embree4.dll 2024-05-17 16:34:57 +02:00
Florian Reibold 1f3d3fcbf2 add test function dummy 2024-05-17 16:34:57 +02:00
Florian Reibold 1562c5fe97 turn level zero raytracing acceleration structure build on by default. 2024-05-17 16:34:57 +02:00
Florian Reibold acfd961a20 update tests to ICX 2024.1 compiler. 2024-05-17 16:34:57 +02:00
Florian Reibold 593203cc2d add instruction to install intel-level-zero-gpu-raytracing to docu and
changelog.
2024-05-17 16:34:57 +02:00
Florian Reibold c66ffcaa60 fix misleading "USM allocation not enabled" exception thrown Tutorial destructor when a SYCL device could not be created successfully. 2024-05-17 16:34:57 +02:00
Florian Reibold 5b0607ad57 update linux internal driver. 2024-05-17 16:34:57 +02:00
Florian Reibold 29dd82134b add embree_info and embree_minimal to CI tests for debugging purposes. 2024-05-17 16:34:57 +02:00
Florian Reibold a6582330c2 check for driver support for building RTAS properly. 2024-05-17 16:34:57 +02:00
Florian Reibold 34950db33a update Linux drivers. 2024-05-17 16:34:57 +02:00
Florian Reibold 5b0b109840 update Windows drivers. 2024-05-17 16:34:57 +02:00
Daniel Opitz cda4cf1919 fix output operator, issue #486 2024-05-17 15:08:21 +02:00
Florian Reibold 51f12d4729 add scene flag to trigger USM shared prefetch to GPU at the end of
rtcCommitScene
2024-05-08 14:13:32 +02:00
Florian Reibold afb90364a5 update PVC tests. 2024-05-08 14:13:32 +02:00
Florian Reibold fee2afe0cb remove references to obsolete CMake variables 2024-05-08 14:13:32 +02:00
Florian Reibold de6729720c more tests with sycl rc. 2024-05-08 14:13:32 +02:00
Florian Reibold 6c1ee46e7c use public driver for nightly PVC tests, too. 2024-05-08 14:13:32 +02:00
Florian Reibold fa07e8cab8 regress to older SYCL version due to issues with getting profiling information. 2024-05-08 14:13:32 +02:00
Florian Reibold fc2dfcdc2b handle exception in device info querying code. 2024-05-08 14:13:32 +02:00
Florian Reibold ecc2b5017b fix dpcpp download script for new versions of the compiler 2024-05-08 14:13:32 +02:00
Florian Reibold 291d69079a build Windows DG2 tests with sycl-nightly, too 2024-05-08 14:13:32 +02:00
Florian Reibold 695ca92ef3 fix release CI job. 2024-04-30 15:19:20 -04:00
Florian Reibold 11eb5f6031 Documentation update 2024-04-30 15:19:20 -04:00
Florian Reibold a4b8d4a3d0 version and changelog 2024-04-30 15:19:20 -04:00
Florian Reibold eb8f09d6fc use sycl-5-2-0 for release binaries. 2024-04-30 15:19:20 -04:00
Florian Reibold 5443670bf6 bump cmake_minimum_required verion to 3.5 2024-04-30 15:19:20 -04:00
DDxPlague 9f33b2be06 Fix tbb macOS port name
The tbb-devel port does not exist, and is actually called tbb. (https://ports.macports.org/port/tbb/)
2024-04-30 15:19:20 -04:00
Florian Reibold 9b33e7afd2 add static assert for proper RTCHitNt<N> alignment in verify. 2024-04-30 15:19:20 -04:00
Daniel Simon 819aedb442 Added alignment definitions to RTCHitNt and RTCRayNt
Added alignment definitions to RTCHitNt and RTCRayNt templates so they match the C definitions provided. As the alignment calculation is nasty without requiring the alignof keyword, or constexpr functions, this could instead be hidden behind a macro. Maybe RTC_ALIGN_SOA_AT_LEAST(N, MIN)?

The code is equivalent to:
```
constexpr std::size_t AlignSOAAtLeast(unsigned N, std::size_t min_alignment) noexcept {
    if (std::has_single_bit<unsigned>(N)) {
        return std::max<std::size_t>(min_alignment, N * alignof(float));
    } else {
        return min_alignment;
    }
}
```
Checking this works is as simple as adding a few static assertions:
```
static_assert(alignof(embree::RTCRayNt<1>) == alignof(embree::RTCRay));
static_assert(alignof(embree::RTCRayNt<4>) == alignof(embree::RTCRay4));
static_assert(alignof(embree::RTCRayNt<8>) == alignof(embree::RTCRay8));
static_assert(alignof(embree::RTCRayNt<16>) == alignof(embree::RTCRay16));
```
2024-04-30 15:19:20 -04:00
Patrick Shriwise 17fa6e82bb Fix for barycentric coordinate verification in 2024-04-30 15:19:20 -04:00
Florian Reibold e363c4e733 remove unused image code. 2024-04-30 15:19:20 -04:00
Florian Reibold f816f353d0 use public drivers for PVC, too. 2024-04-30 15:19:20 -04:00
Florian Reibold 8c47331b86 fixes for current sycl nightly and some warning fixes 2024-04-30 15:19:20 -04:00
Florian Reibold a9fe3d3eda add tests for syclos release candidate. 2024-04-25 09:25:43 -04:00
Florian Reibold 8990cc91bd add macOS universal binary build test. 2024-04-24 14:37:39 -04:00
Florian Reibold a617ac32c0 update to TBB 2021.12.0 2024-04-24 14:37:39 -04:00
Florian Reibold e3deefcc07 Build for ARM on Apple silicon machines by default when CMAKE_OSX_ARCHITECTURES is not set. 2024-04-24 14:37:39 -04:00
Werner, Stefan c61b24be1b Enabled support for Universal Binaries on macOS
It is now checking CMAKE_OSX_ARCHITECTURES to derive the compiler flags.
2024-04-24 14:37:39 -04:00
Daniel Opitz 532a1cc415 update drivers
enable l0rtas in continuous and nigtly tests
2024-04-23 06:00:52 -07:00
Daniel 13bbc328d2 Do/upgrade outdated os tests (#2711)
* minimum os version of fedora 29

* removed legacy os tests

* updated readme and continuous yaml
2024-04-10 10:48:54 +00:00
Florian Reibold 0c236df6f3 add token permissions for github workflows. 2024-03-21 21:02:24 +01:00
Florian Reibold 93189eacda add buildbench to performance CI pipeline 2024-03-12 12:24:20 +01:00
Florian Reibold a3aa2d8e43 add SYCL version of buildbench 2024-03-12 12:24:20 +01:00
Tomasz Pyra 0d29bfc3b8 fine tuning google benchmark 2024-03-05 08:40:07 -06:00
Tomasz Pyra 0a0c0cfffd more precise perf-CI measurements 2024-03-05 08:40:07 -06:00
Daniel 614793fe96 Do/scripts cleanup (#2701)
* delete scripts

* more cleanup
2024-02-22 09:50:29 +00:00
Florian Reibold 6c798e906b better output of which ISPC executable is found/used 2024-02-20 13:28:13 -06:00
Florian Reibold d5757f95b6 test ispc 1.23.0 2024-02-20 13:28:13 -06:00
Daniel 9eb89a70a1 Do/performance regression tests (#2699)
repaired performance tests
2024-02-20 11:33:30 +01:00
Florian Reibold 901306395b remove printf 2024-02-15 11:16:21 -06:00
Florian Reibold 766d120e8f test AVX512 compilation on x86 macOS in continuous test. 2024-02-15 08:24:32 -06:00
Florian Reibold 926df8ac78 Run Embree in AVX512 mode on AVX512 capable x86_64 machines running macOS. 2024-02-15 08:24:32 -06:00
Florian Reibold 7b4a2c22cf compile embree_info also for ARM. 2024-02-15 08:24:32 -06:00
Florian Reibold bb86c822c0 print warning about "flush to zero" and "denormals are zero" only on x86 systems 2024-02-15 08:24:32 -06:00
Daniel Opitz 23e5fa2902 fix missing backslash for overwriting EMBREE_TESTING_INTENSITY 2024-02-14 16:13:04 +01:00
Daniel 3920a980af fix path for macos-arm binary analysis and antivirus scan (#2692) 2024-02-14 12:06:10 +00:00
Florian Reibold daa8de0e71 allow overriding of EMBREE_TESTING_INTENSITY for tests 2024-02-09 11:30:18 -06:00
Florian Reibold 94a55e6992 update documentation 2024-02-09 11:30:18 -06:00
Florian Reibold 01b7dcc4f3 apply internally needed patch to glfw only when explicitly stated. 2024-02-09 11:30:18 -06:00
Florian Reibold e3f3be419b use same self-compiled tbb on macOS for x86_64 and arm64 versions. 2024-02-09 11:30:18 -06:00
Daniel Opitz cf5be6f9af update drivers 2024-02-09 12:54:51 +01:00
Florian Reibold f7d807bcb2 some issues with nightly tests 2024-02-09 00:35:47 +01:00
Florian Reibold 17721d46a7 add bdba and virus scan for arm binaries, too 2024-02-09 00:35:47 +01:00
Florian Reibold c57032c25a use TBB compiled for NAS for ARM release package 2024-02-09 00:35:47 +01:00
Florian Reibold 4a779d690e fix find command in package test check 2024-02-09 00:35:47 +01:00
Florian Reibold 608c019c37 docu 2024-02-09 00:35:47 +01:00
Florian Reibold 39a3e87e06 increase test epsilon for Apple Clang 14 on macOS ARM 2024-02-09 00:35:47 +01:00
Florian Reibold e81584bc2f add missing tests of release packages 2024-02-09 00:35:47 +01:00
Florian Reibold 15617d1aa2 some fixes. 2024-02-09 00:35:47 +01:00
Florian Reibold cdae188cfa different names for x86 and arm macOS packages 2024-02-09 00:35:47 +01:00
Florian Reibold 28abd2346c update to TBB 2021.11 and ISPC 1.22 2024-02-09 00:35:47 +01:00
Florian Reibold fe449425b8 bump embree version to 4.3.1 2024-02-09 00:35:47 +01:00
Florian Reibold 5f82bedf51 add NEON and NEON2X tests to continuous jobs again. 2024-02-09 00:35:47 +01:00
Florian Reibold 930a8ac459 update sycl-nightly and ICX RC 2024-02-09 00:35:47 +01:00
Daniel 9f2f9614ce Do/macos notarization update (#2684)
signing and notarization on macos x64 + arm
2024-02-01 17:17:10 +00:00
Daniel 1b589beb48 removed AOEUAOEU string from integration test exe (#2683) 2024-02-01 10:44:36 +00:00
DanielandFlorian Reibold 133f52ef71 Do/devel (#2682)
* Fail when no tests are executed.
* no more os specifix build and test scripts, converted CI jobs to cmake scripted test execution
* fix cmake error: could not load cache
* fix could not find libtbb_debug.so
* testintensity 0 -> 1
* test single primitive config error, added embree options for tests

---------

Co-authored-by: Florian Reibold <florian.reibold@intel.com>
2024-02-01 10:31:55 +01:00
Florian Reibold 289dee276c add dependloadflag also for msvc 2024-01-30 20:10:38 +01:00
Florian Reibold 3c50949440 Fail when no tests are executed. 2024-01-19 21:07:30 +01:00
Daniel dce4f47c84 Do/fix macos test execution (#2677)
* building as package
* removing signfile from macos package json
* build macos tests as release
* macos tests without arm, for merging
2024-01-19 10:19:50 +00:00
Woop, Sven bdcc53d143 updating PVC deviceID check 2024-01-19 07:22:29 +01:00
Florian Reibold 43c883a36f fix artifact name 2024-01-17 22:13:10 +01:00
Florian Reibold fc0061622d move Windows DG2 ICX tests to continuous again. 2024-01-17 21:17:13 +01:00
Florian Reibold 70edad3b58 update docu regarding supported compilers. 2024-01-17 21:17:13 +01:00
Florian Reibold 49e29dee45 update Windows public driver version again. 2024-01-17 21:17:13 +01:00
Florian Reibold d79241c534 remove Windows release driver version. We use official version now. 2024-01-17 11:41:53 +01:00
Florian Reibold 24c0859fe6 drop ICX versions from 2023 2024-01-17 11:41:53 +01:00
Florian Reibold cd018d7236 remove EMBREE_LEVEL_ZERO CMake variable from presets 2024-01-17 11:41:53 +01:00
Florian Reibold dda1fed6e2 disable ARM emultation tests for now because runner seems to be broken 2024-01-17 11:41:53 +01:00
Florian Reibold 68f1fa283d cleanups
* remove ICX version from cmake presets
* macOS builds/tests/release not using ICX anymore. Release binaries with
  AppleClang
2024-01-17 11:41:53 +01:00
Florian Reibold 3567ff9210 fixes for nightly tests 2024-01-17 11:41:53 +01:00
Florian Reibold b03916b5a2 revert public Windows driver 2024-01-17 11:41:53 +01:00
Florian Reibold aef82ba8fb add DG2 Windows tests with public and release drivers in continous CI, too 2024-01-17 11:41:53 +01:00
Daniel Opitz 67418a3927 added back notarization with TODO comment to mac tests 2024-01-16 16:33:51 +01:00
Daniel Opitz a16218e05e make notarize.sh executable 2024-01-16 16:33:51 +01:00
Daniel Opitz f4b0106831 update to correct icx version 2024-01-16 16:33:51 +01:00
Florian Reibold 271f14581e add missing feature flag checks 2024-01-15 18:15:18 +01:00
Daniel c9c58f2117 Do/release macos extern notarize (#2670)
* pulled notarization out of release build for macos

* trigger release macosx notarize only on workflow dispatch
2024-01-15 13:18:18 +00:00
Florian Reibold 3828b23773 Run Windows tests in CI again 2024-01-12 20:40:04 +01:00
DanielandFlorian Reibold 14f1996e4b Do/driver update (#2668)
* use dpcpp nightly 2023-12-18

* update drivers

ubuntu release: neo-releases-23.53.28202.1
ubuntu embargo: ci-master-15557
ubuntu internal: ci-neo-master-028280
ubuntu public: neo-releases-23.53.2802.1
windows internal: ci-master-15557
windows release: 24ww01-ci-master-15503

* change environment variable for PVC

* update Windows public driver, too

---------

Co-authored-by: Florian Reibold <florian.reibold@intel.com>
2024-01-11 14:50:33 +01:00
Daniel 767d72d5f2 Do/threadsanitizer issue (#2667)
* use atomic_bool in parallel_any_of
2024-01-10 11:01:24 +01:00
Florian Reibold dfae972074 fix dll dependency location for ICX 2024 2024-01-09 15:21:26 +01:00
Florian Reibold a5cec89a24 add dependent load flag to executables and shared libraries. 2024-01-09 15:21:26 +01:00
Florian Reibold 2851deb075 test intel-llvm/nightly-2023-12-18 2024-01-08 14:27:03 +01:00
Florian Reibold eead26e0ea update continouus ICX tests to 2024.0 and remove RC tests. 2024-01-08 14:27:03 +01:00
Woop, Sven be20c01707 catching exceptions in rthwif tests 2024-01-04 10:45:55 +01:00
Woop, Sven 846a6b9d61 adding compare threshold to cornell_box test 2024-01-04 10:45:55 +01:00
Daniel 42f637060e windows testing ICX 2023.2.1 (#2663)
* using force-delete for windows CI

* windows tests upgrade to ICX 2023.2.1
2023-12-08 09:48:59 +01:00
Daniel f18f9ce733 using force-delete for windows CI (#2662) 2023-12-06 14:31:10 +00:00
Daniel 6730b2afc4 fix nightly L0RTAS typo error (#2661) 2023-12-06 13:40:16 +00:00
DanielandSebastian Herholz d5270e18bb Sh/simd sse2neon 1.6.0 (#2660)
* Adding missing scalar functions asInt and asFloat and missing AVX512 functions isvalid and xchg

* Updating sse2neon to version 1.6.0

* testing sonoma

* fixed arm tests, upgrade to sse2neon-1.6.0

---------

Co-authored-by: Sebastian Herholz <sebastian.herholz@intel.com>
2023-12-05 11:41:40 +00:00
Daniel 076d80e333 fix coverity, upgrade all CI cmakepresets, accelerate continuous (#2659)
* clean up all yml
* dg2 split windows build and test
* investigate missing libsvml.so
* fix integration tests
* fix preset names
* coverity fix with tasking internal
2023-12-05 10:11:30 +00:00
Florian Reibold 388557c960 add nightly test for validation api 2023-11-22 14:26:16 +01:00
Florian Reibold 1cc5d59e67 EMBREE_SYCL_RT_VALIDATION_API=ON and EMBREE_SYCL_IMPLICIT_DISPATCH_GLOBALS=OFF works again 2023-11-22 14:26:16 +01:00
Florian Reibold 1f84ca8586 add ze_api header to repository directly. 2023-10-24 21:11:14 +02:00
Florian Reibold 5c4edbf519 WA compiler issues under Windows with -D_DEBUG. 2023-10-24 21:11:14 +02:00
Florian Reibold 6eed3eb16e make rthwif tests compatible with TBB 2023 2023-10-12 21:00:10 +02:00
Florian Reibold 798d1c1d25 fix static linking issues with ze_wrapper library 2023-10-12 21:00:10 +02:00
Daniel fff2e0f6e0 user-defined thread count precedence
Ensure that user-defined thread count takes precedence over getNumberOfLogicalThreads() (#2642)
2023-10-11 09:29:58 +02:00
Woop, Sven b5eed25cdd moving most Windows DG2 tests to nightly testing 2023-10-04 08:12:30 +02:00
Woop, Sven f71d3e4fc8 enabling usage of L0RTAS builder in CI under Windows 2023-10-04 07:40:51 +02:00
Woop, Sven 1f045f3c58 requiring RTAS extension when enabling EMBREE_SYCL_L0_RTAS_BUILDER 2023-10-04 07:40:51 +02:00
Woop, Sven 1292561053 updating gfx-driver 2023-10-04 07:40:51 +02:00
Johannes Günther 9d67ce7bbf Add missing EMBREE_GEOMETRY_??? to embree-config.cmake 2023-09-29 11:32:18 +02:00
Florian Reibold be0accfd0b updates
* use syclos 20230922 for release
* use proper public driver on Windows
* update ispc to 1.21.0
* update TBB to 2021.10.0
* update ICX RK to 20230926
2023-09-27 20:56:07 +02:00
Florian Reibold decc2ff04c add old include/lib directory structure for ICX 2024, too.
The decision is not finalized yet, which folder layout the new ICX
release will have. We now add both versions and hope for the best.
2023-09-27 12:09:46 +02:00
Florian Reibold 5536c11647 add also weird libsycl.so version (libsycl.so.7.0.0-8 ?!?!?) 2023-09-27 01:39:27 +02:00
Florian Reibold 23536d20c2 add pi_win_proxy_loader.dll to release package 2023-09-27 01:39:27 +02:00
Florian Reibold d1a7e57185 update documentation 2023-09-27 01:39:27 +02:00
Florian Reibold 67bebc4b07 use rockylinux for release and split linux sycl 2023-09-27 01:39:27 +02:00
Florian Reibold f0fcca77fb update compilation docu and version number 2023-09-27 01:39:27 +02:00
Florian Reibold 09cd83ec21 add instance array geometry type. 2023-09-26 23:48:54 +02:00
Daniel Opitz 9253096652 disable nightly bezier_round furball tests on 2 windows configs for now
see issue
https://github.com/intel-innersource/libraries.graphics.renderkit.embree/issues/2640
2023-09-25 17:31:57 +02:00
Florian Reibold 6e78c34376 add tests for sycl-nightly RK version 2023-09-22 21:25:26 +02:00
Florian Reibold c6ab6e511b Update changelog.md 2023-09-22 12:08:48 +02:00
Florian Reibold 19218b2409 add ICX release candidate tests 2023-09-22 10:48:38 +02:00
Florian Reibold 2231ed62b7 WA for changed sycl include headers in oneAPI DPC++ 2024.0 2023-09-22 10:48:38 +02:00
Woop, Sven 79b02724ed validating that rtasFormat is not ZE_RTAS_FORMAT_EXP_INVALID 2023-09-15 11:59:47 +02:00
Woop, Sven 906539d21a added argument to set resolution support for cornell_box test 2023-09-15 11:59:47 +02:00
Daniel 550dff8be6 integration of coverity
* coverity test
* fixing coverity issues
* disable klockwork
2023-09-13 13:10:52 +02:00
Woop, Sven 644f052aa1 disabling L0 RTAS builder by default 2023-09-12 08:33:54 +02:00
Woop, Sven b11d5f3922 disabling L0 rtas builder only for release 2023-09-07 12:53:07 +02:00
Woop, Sven a7149514a6 added cmake option to enable usage of L0 rtas builder 2023-09-07 10:53:03 +02:00
Woop, Sven 271aa76219 properly checking if rtas extension can get loaded 2023-09-07 10:53:03 +02:00
Woop, Sven bfc11336af not using rtas_builder extension by default in rthwif tests 2023-09-07 10:53:03 +02:00
Woop, Sven 1c173b4055 not using rtas_builder extension by default yet 2023-09-06 12:07:05 +02:00
Woop, Sven bbe4feee98 removed unused file 2023-09-01 07:45:04 +02:00
Woop, Sven 4e93800b99 fixed deviceID check for PVC 2023-09-01 07:45:04 +02:00
Daniel e1406d749b cherry pick from carlocab (#2623)
The semanic equivalend of `$ORIGIN` on macOS is `@loader_path`.
2023-08-31 15:05:51 +00:00
Daniel 0bbe11b64e do not sign the zip package after build for windows any more (#2624) 2023-08-31 11:22:16 +00:00
Florian Reibold 4af9535743 update to intel-llvm 20230830 2023-08-30 22:53:15 +02:00
Florian Reibold e479a834a8 remove using sycl::fmax and using sycl::fmin
it causes problems with new versions of dpcpp compiler:
    /common/sys/sycl.h:34:13: error: target of using declaration conflicts with declaration already in scope
       34 | using sycl::fmax;
2023-08-30 22:53:15 +02:00
Daniel 32129f8d30 Do/update compiler cmakepreset (#2621)
* update ispc version in cmake preset

* dpcpp-version referenced workflow from @freibold/devel to @main

* dpcpp-version workflow to docker_gpu@main
2023-08-14 14:00:13 +02:00
Florian Reibold 9c07dcffe7 use ubuntu 20.04 for release again and update release driver 2023-08-03 14:20:03 +02:00
Florian Reibold 4e8f066a53 do not source dpcpp environment manually
Please enter the commit message for your changes. Lines starting
2023-08-03 14:20:03 +02:00
Woop, Sven 89399c10e8 consistently using main version of reusable workflow 2023-08-01 17:18:15 +02:00
Woop, Sven c892749430 Revert "use DPCPP_SETUP_SCRIPT environment variable in test.py script"
This reverts commit 2fe0b4fa48.
2023-08-01 17:18:15 +02:00
Woop, Sven 05a6b0767f updated graphics drivers in CI 2023-07-31 19:31:36 +02:00
Florian Reibold 2fe0b4fa48 use DPCPP_SETUP_SCRIPT environment variable in test.py script 2023-07-31 19:31:36 +02:00
Tomasz Pyra b88b4b5451 CI-perf sycl build on Ubuntu 22.04 (#2617)
* ubuntu 22.04 docker

* docker_gpu.yml@main
2023-07-26 15:06:17 +02:00
Tomasz Pyra 90f437c7cb docker GPU image for perf CI to embree/ubuntu:22.04 (#2615)
* ubuntu 22.04 docker

* docker_gpu.yml@main
2023-07-26 12:36:11 +00:00
Woop, Sven c4b3140192 cleanups to sycl namespace usage 2023-07-25 13:22:12 +02:00
Woop, Sven 4b07dc6a2d fixed sub_group related compile warning 2023-07-25 13:22:12 +02:00
Woop, Sven 8ebc4e3e28 - updating to dpcpp compiler sycl-nightly/20230724
- fixing compile issues in rthwif tests
2023-07-25 13:22:12 +02:00
Woop, Sven ced8b40f7c rthwif tests use RTAS build extension only when available 2023-07-24 19:43:12 +02:00
Woop, Sven 53e20c928d using L0 RTAS build extension only when available 2023-07-21 12:23:36 +02:00
Woop, Sven a0ff9e16ff implemented varying version of rtcGetGeometryTransform for ISPC 2023-07-20 10:58:18 +02:00
Woop, Sven c91bc704ae matching rcp math between rthwif_test and BVH builder 2023-07-19 19:36:25 +02:00
Anthony Roberts 50f2fbc696 Add support for ARM64 windows platform cmake
This adds a check for ARM64 in the CMakeLists file, which is the name of
the system processor on native Windows ARM64 machines
2023-07-19 19:36:25 +02:00
Woop, Sven 9341ffede5 added configuration to run rtas builder tests using internal or level zero implementation 2023-07-19 11:22:58 +02:00
Daniel 117b26d00a Do/update driver (#2607)
* update dpcpp-sycl-nightly

* update gfx-ubuntu22-embargo

* update gfx-ubuntu22-internal

* update gfx-ubuntu22-public

* update dpcpp-sycl-nightly

* update gfx-ubuntu22-embargo

* update gfx-ubuntu22-internal

* update gfx-ubuntu22-public
2023-07-18 15:32:51 +00:00
Florian Reibold e69fe7cc1e add memory monitor to GPU BVH build 2023-07-17 13:57:07 +02:00
Florian Reibold 3a81dbe970 fix imgui empty label complaint on Windows 2023-07-17 13:57:07 +02:00
Woop, Sven 62731728d6 adding check if rtas extension present and properly initialized 2023-07-17 08:15:54 +02:00
Sven Woop 82f5485c0f checking ze_rtas_builder_procedural_geometry_info_exp_t reserved member to be 0 2023-07-17 08:15:54 +02:00
Daniel 341ef8c45d Do/release (#2601)
* fix release test package build

* fix embree version for windows integration tests

* fix cmake presets trailing comma

* test fix for windows integration tests

* embree docs run tests

* update docs

* added sign file back to windows packages
2023-07-04 09:17:39 +00:00
Daniel 58ac8e3f3d Do/release (#2597)
* fix release test package build

* fix embree version for windows integration tests

* fix cmake presets trailing comma

* test fix for windows integration tests

* embree docs run tests

* update docs
2023-06-30 09:12:09 +02:00
Daniel c5d4f158da fix typo (#2592) 2023-06-22 10:16:09 +00:00
Tomasz Pyra d4509034be removed extra comma (#2591) 2023-06-21 17:02:21 +00:00
Sven Woop 7ee36d1a36 setting version to 4.2.0 2023-06-21 07:53:09 +02:00
Sven Woop 6af3fa61fa SYCL version of Embree with GPU support is no longer in beta phase. 2023-06-21 07:53:09 +02:00
Sven Woop 6d1c92ad9f updated changelog 2023-06-21 07:53:09 +02:00
Tomasz Pyra fdf44d201a Added PVC runner to perf CI (#2588) 2023-06-20 16:48:50 +02:00
Sven Woop aebb7d7a49 clarified that rtcOccluded and occlusion filter cannot get used to gather next n hits 2023-06-19 12:46:29 +02:00
Sven Woop 32bde766e3 Added rtcGetGeometryTransformFromScene API function that can get used inside SYCL kernels. 2023-06-16 08:07:24 +02:00
Tomasz Pyra 922d7f935a Added CI feature to store results in database (#2584) 2023-06-15 18:31:51 +02:00
Daniel 1ef7d35a9e Do/fix release package name sycl (#2583)
* fixed package names for sycl release packages

* removed some verbose messages from testing package

* added testing package as release artifact
2023-06-15 11:37:40 +00:00
Daniel 6d201d9216 Do/release test package (#2579)
* removed MSVC 2015 support (v140 + v141)

* fixed release test package generation
2023-06-13 13:00:08 +00:00
Sven Woop ac6379a476 passing dispatch globals for through debug RTAS build API extension 2023-06-12 12:28:47 +02:00
Sven Woop 7a03af8136 fix to get dispatch globals allocation working again for debugging purposes 2023-06-05 21:18:54 +02:00
Tomasz Pyra 293622b567 New model repository address (#2575) 2023-06-05 14:17:16 +02:00
Sven Woop 572e5144e2 Improved BVH build performance on many core machines by avoiding spin locks. 2023-06-02 07:40:23 +02:00
Sven Woop a0a386174e using zeDeviceGetProperties to query RTAS device properties 2023-06-01 11:56:41 +02:00
Sven Woop 4a9089b4c3 - using new rtas API header
- properly returning ZE_RESULT_EXP_RTAS_BUILD_DEFERRED and ZE_RESULT_ERROR_HANDLE_OBJECT_IN_USE error codes
2023-06-01 11:56:41 +02:00
Sven Woop c9896d283d adding RTASBuilder support to ze_wrapper 2023-06-01 11:56:41 +02:00
Sven Woop 1b5475fdc6 moving ze_rtas.h to level_zero folder 2023-06-01 11:56:41 +02:00
Sven Woop abe945845e using decltype to get function types in ze_wrapper 2023-06-01 11:56:41 +02:00
Florian Reibold 2750ae9962 init ZeWrapper in rthwif tests. 2023-05-31 21:25:42 +02:00
Florian Reibold 20b09d04ca fix rthwif tests with new level zero runtime loading change. 2023-05-31 21:25:42 +02:00
Sven Woop 55c1b772bd adding MTL support 2023-05-31 07:46:08 +02:00
Sven Woop 0a9ece3019 fixing experimental disable of deviceID check 2023-05-30 11:31:32 +02:00
kraszkowandDaniel Opitz 14512e7a6e fix rthwif tests for test package (#2567)
Co-authored-by: Daniel Opitz <daniel.opitz@intel.com>
2023-05-30 10:22:15 +02:00
Florian Reibold c97b61a28c load ze_loader library during runtime with dlopen/LoadLibrary. Remove
EMBREE_LEVEL_ZERO CMake variable. It is used now by default.
2023-05-24 18:01:57 +02:00
Daniel 05ba861ff1 Do/integration (#2562)
added integration tests with cmake-presets
2023-05-23 12:13:42 +00:00
Sven Woop 637e1c8aa7 adding Impl to RTAS builder to have separate symbols to API function names 2023-05-22 14:28:21 +02:00
Daniel 3908b8d261 added filter files for test execution (#2541)
* added filter files for test execution

* changed cmake version of test project to 3.1.0

* added error message test filter file not found

* fixed missing NO_SYCL flag in embree-addtests.cmake

* added win_proxy_loader.dll to windows package install

* made install win_proxy_loader.dll optional
2023-05-17 10:43:40 +00:00
Daniel 9d6ebf2c2a Do/fix fopen (#2558)
* do not use fopen any more in FileStream

* removed unnecessary warning suppression
2023-05-16 15:32:21 +02:00
Daniel e4ea425127 replace insecure fopen with secure std::ifstream (#2557) 2023-05-16 09:37:16 +02:00
Sven Woop 752ee7f8a4 using ZE_RESULT_EXP_ERROR_RETRY_RTAS_BUILD error code to re-try rtas build operation 2023-05-15 09:06:12 +02:00
Sven Woop 30d16425db removed zeRTASInitExp/zeRTASExitExp functions 2023-05-15 09:06:12 +02:00
Sven Woop a625f5a3b2 checking that number of geometries is in range 2023-05-15 09:06:12 +02:00
Sven Woop 64247187d6 prepared L0 rtas builder to support multiple rtas formats 2023-05-15 09:06:12 +02:00
Sven Woop b4277f37ac limiting triangle pair primID delta to 5 bits 2023-05-15 09:06:12 +02:00
Sven Woop c49eff027c L0 ray tracing support tests can use rtcore SW simulation 2023-05-15 09:06:12 +02:00
Daniel 0fcb306c91 Do/release (#2554)
* fixed nightly windows STORAGE_PATH env variable
* fixed release.yml binary/antivirus scan artifact name
2023-05-11 09:26:18 +00:00
Daniel 67a6f40c6c rebase release branch into devel (#2553)
* changed mac release package compiler to clang
* fix mac release runs-on
* updated docs
2023-05-11 08:02:55 +00:00
Daniel aad183b993 Do/release (#2551)
* added dpcpp-sycl-release.env
* upgrade to icx2023.1.0 for windows
* updated compilation.md
* fix macos runner selection in release.yml
* fixed klocwork job
* fixed artifact names in release.yml
2023-05-10 11:17:49 +00:00
Tomasz Pyra 3759bb572d changed package filenames (#2550) 2023-05-09 21:17:34 +02:00
Sven Woop 28f5fa9d07 adding always_inline for Embree SYCL API functions 2023-05-09 11:18:47 +02:00
Florian Reibold dcb283e279 make EMBREE_NO_SPLASH a proper CMake option. 2023-05-03 16:39:17 +02:00
Sven Woop e087eefe5a making ze_rtas_builder_geometry_exp_flag_t opaque by default 2023-05-03 12:40:18 +02:00
Sven Woop 6ac6171b54 updated to latest L0 rtas build API spec 2023-05-03 12:40:18 +02:00
Sven Woop b37b536253 checking if rtas allocation is in 48 bit address range 2023-05-03 10:23:41 +02:00
Sven Woop 658f94ab6c using proper ZE_STRUCTURE_TYPE_RAYTRACING_MEM_ALLOC_EXT_DESC stype for rtas allocations 2023-05-03 10:23:41 +02:00
Sven Woop 8ddad2a3f5 - changed version to 4.1.0
- added support for Intel(R) Data Center GPU Max series to changelog
- removed limitation of support to specific Arc/Flex version, all products are supported now.
- updated DPC++, driver, and compute-runtime versions to use
2023-05-03 10:23:41 +02:00
Sven Woop 36d36e5b6e returning ZE_RESULT_ERROR_INVALID_ENUMERATION error when stype is not as expected 2023-04-28 18:31:10 +02:00
Sven Woop 02d0038a99 properly checking for stype of builder properties and descriptor 2023-04-28 10:11:48 +02:00
Sven Woop 113239e8aa adding Level Zero rtas header from spec 2023-04-28 10:11:48 +02:00
Sven Woop 53e8e0047d updates to compile Level Zero ray tracing builder API to match spec 2023-04-28 10:11:48 +02:00
Sven Woop 2080cc0543 using argument structure in bounds callback for Level Zero ray tracing build API 2023-04-28 10:11:48 +02:00
Sven Woop bdae2bdd04 using standard Level Zero results in Level Zero rtas build API 2023-04-28 10:11:48 +02:00
Sven Woop 8a72fb41fd removing ze_raytracing CI tests 2023-04-28 10:11:48 +02:00
Daniel 627ac7ba2c Do/remove macosx embree tag (#2543)
* fixed macosx embree label issue in CI
* updated base workflow files for macosx CI tests in release/nightly/continuous
2023-04-26 13:29:25 +00:00
Sven Woop 71a9563cd8 Merge pull request #2542 from intel-innersource/swoop/devel
Swoop/devel
2023-04-26 11:28:16 +02:00
Sven Woop f8bcaa2001 cleanups to cornell_box rtas build example 2023-04-26 10:32:28 +02:00
Sven Woop d439076261 only including rttrace.h 2023-04-26 10:24:03 +02:00
Sven Woop 5db1005e8d renamed rtbuild and rttrace API header files 2023-04-26 10:11:35 +02:00
Sven Woop 8c881fb01a returning proper error codes in rtas builder 2023-04-26 09:27:17 +02:00
Sven Woop eb5f9fc707 adding flags to rtas builder properties 2023-04-26 07:34:51 +02:00
Sven Woop 7c7e3eed8b adjusted Level Zero ray tracing Build API struct member names to match spec 2023-04-25 10:58:03 +02:00
Sven Woop 9e2ca6d4e4 adjusted Level Zero ray tracing Build API function names to match spec 2023-04-25 10:16:59 +02:00
Sven Woop d7eb0d2a44 implemented rtas device properties query for L0 ray tracing build API 2023-04-25 09:50:08 +02:00
Sven Woop 2f7f118105 adjusted property query for parallel operation object in L0 ray tracing build API 2023-04-25 07:35:35 +02:00
Sven Woop 90ae80b5fe removed not required update of build arguments 2023-04-25 07:04:26 +02:00
Sven Woop d8e955002f adopted build and size query functions of L0 ray tracing build API 2023-04-24 12:03:34 +02:00
Sven Woop d29232b282 introduced rtas builder concept to L0 ray tracing API 2023-04-24 10:57:45 +02:00
Sven Woop 272f5feb2a using L0 ray tracing API to build acceleration structure for cornell_box test 2023-04-24 09:18:17 +02:00
Werner, Stefan 7723b92932 * Added CMake options for sphere and curve backface culling
* Moved sphere backface culling documentation to the right place
2023-04-19 13:28:07 +02:00
Werner, Stefan 8251272aaf Added EMBREE_BACKFACE_CULLING_SPHERES option
This follows the same method that Cycles uses to ignore backfacing
sphere intersections.
2023-04-19 13:28:07 +02:00
Florian Reibold ee1c56c6bc do not use exception mechanism for BVH build retry due to TBB 2020.3 2023-04-18 13:37:41 +02:00
Florian Reibold c819f3bacd update dpcpp to 20230417 and fix deprecation warnings 2023-04-18 11:46:32 +02:00
Daniel 570d59289c fix config error in generated embree-addtest.cmake (#2536) 2023-04-14 10:37:11 +00:00
Daniel c9ee19a5d2 fix tarball package unpacks into single folder (#2535) 2023-04-05 15:48:31 +02:00
Sven Woop f59c6d3ef1 using proper RT allocation function to allocate RTDispatchGlobals 2023-03-31 09:35:02 +02:00
Sven Woop b2234567b7 fixed issue that caused allocation of RTDispatchGlobals by default 2023-03-30 17:43:46 +02:00
Daniel 619b0e5ea2 build a deliverable testing package (#2532)
- separate cpack test component
 - new ADD_EMBREE_TEST cmake macro
 - moved reference image directly beside test definition files
 - updated package scripts
2023-03-29 17:32:08 +02:00
Sven Woop 9ef2018879 fixed success job 2023-03-16 12:37:46 +01:00
Sven Woop 8de6a5fdf8 updates to compile ze_raytracing builder in isolation in separate repository 2023-03-16 12:37:46 +01:00
Sven Woop baa030dd36 properly destroying parallel build operations 2023-03-16 12:37:46 +01:00
Krzysztof Raszkowski 8b63714aca ci: update gfx-driver internal to ci-neo-025905 2023-03-15 11:24:52 +01:00
Sven Woop dac55b1974 all names of ze_raytracing build API implementation match spec 2023-03-15 10:20:17 +01:00
Sven Woop be3e00be56 fixed interface of some ze_raytracing API functions 2023-03-15 10:20:17 +01:00
Sven Woop 403818c7c0 implemented zeRaytracingAccelFormatCompatibilityExt in ze_raytracing build API 2023-03-15 10:20:17 +01:00
Sven Woop 1bc8b94bbd implemented build flag to skip duplicate any hit shader invokation 2023-03-15 10:20:17 +01:00
Sven Woop 8918ed32db added stype and pNext to ze_raytracing build API implementation descriptors 2023-03-15 10:20:17 +01:00
Sven Woop 6008fdf64e removed rthwifGetSupportedFeatures from ze_raytracing build API 2023-03-15 10:20:17 +01:00
Sven Woop cbf9a336f8 introduced triangle format, quad format, and vertex format in ze_raytracing build API 2023-03-15 10:20:17 +01:00
Daniel 0ee27e4af1 added arm support to changelog and doc (#2524) 2023-03-14 16:49:05 +01:00
Daniel 66e3f8af2b added EMBREE_ISA_NEON2X to embree-config.cmake (#2526) 2023-03-14 12:54:39 +01:00
Tomasz Pyra 957ae983df Minor fixes to performance CI (#2525)
* removed 'perf' tag from A770

* more precise wildcards
2023-03-13 18:27:03 +01:00
Tomasz Pyra df51d78be8 performance-CI update
- use Google Benchmark for testing
- find and use all models from embree-models repo
- use docker_gpu.yml for GPU testing
- schedule cron for daily performance testing
2023-03-10 17:19:02 +01:00
Tomasz Pyra e22d74ec07 Use all models from repo 2023-03-10 16:15:07 +01:00
Daniel b498e2b87e added arm emulation testing to nightly (#2520)
- Increase test timeout of bvh_builder test
- always disable SSE2 for imgui
2023-03-10 10:23:04 +01:00
Sven Woop 825c513d9c turning EMBREE_LEVEL_ZERO on in one CI test 2023-03-10 09:05:24 +01:00
Sven Woop f4a0f38636 fixed success CI task 2023-03-10 09:05:24 +01:00
Florian Reibold 02192dc3f9 update doc and fix intelstyle repo url 2023-03-09 16:17:59 +01:00
1104 changed files with 34905 additions and 14533 deletions
+326 -460
View File
@@ -3,665 +3,531 @@
name: continuous
permissions: read-all
on: [push, workflow_dispatch]
jobs:
####################################################################
# Setup dpcpp and gfx if not already on NAS
####################################################################
setup_dpcpp:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@devel
with:
image: embree/ubuntu:22.04
runs-on: '[ "Linux", "docker", "build" ]'
cmd: |
DPCPP_VERSION=$(cat .github/workflows/dpcpp-sycl-nightly.env | grep DPCPP_VERSION | sed 's/.*=//')
echo "Setup DPCPP ${DPCPP_VERSION}"
./scripts/download_dpcpp.sh ${DPCPP_VERSION} ${NAS_LINUX}/dpcpp-compiler-linux LINUX ${PUBLIC_GITHUB_TOKEN}
./scripts/download_dpcpp.sh ${DPCPP_VERSION} ${NAS_LINUX}/dpcpp-compiler-win WIN ${PUBLIC_GITHUB_TOKEN}
setup_gfx:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@devel
with:
image: embree/ubuntu:22.04
runs-on: '[ "Linux", "docker", "build" ]'
cmd: |
GFX_DRIVER_VERSION=$(cat .github/workflows/gfx-ubuntu22-embargo.env | grep GFX_DRIVER_VERSION | sed 's/.*=//')
echo "Setup embargo GFX driver ${GFX_DRIVER_VERSION} for Linux"
./scripts/download_gfx.sh ${GFX_DRIVER_VERSION} ${NAS_LINUX}/gfx-driver-linux/ ${ARTIFACTORY_TOKEN}
GFX_DRIVER_VERSION=$(cat .github/workflows/gfx-ubuntu22-internal.env | grep GFX_DRIVER_VERSION | sed 's/.*=//')
echo "Setup internal GFX driver ${GFX_DRIVER_VERSION} for Linux"
./scripts/download_gfx.sh ${GFX_DRIVER_VERSION} ${NAS_LINUX}/gfx-driver-linux/ ${ARTIFACTORY_TOKEN}
GFX_DRIVER_VERSION=$(cat .github/workflows/gfx-ubuntu22-public.env | grep GFX_DRIVER_VERSION | sed 's/.*=//')
echo "Setup public GFX driver ${GFX_DRIVER_VERSION} for Linux"
./scripts/download_gfx.sh ${GFX_DRIVER_VERSION} ${NAS_LINUX}/gfx-driver-linux/ ${ARTIFACTORY_TOKEN}
GFX_DRIVER_VERSION=$(cat .github/workflows/gfx-ubuntu22-release.env | grep GFX_DRIVER_VERSION | sed 's/.*=//')
echo "Setup release GFX driver ${GFX_DRIVER_VERSION} for Linux"
./scripts/download_gfx.sh ${GFX_DRIVER_VERSION} ${NAS_LINUX}/gfx-driver-linux/ ${ARTIFACTORY_TOKEN}
GFX_DRIVER_VERSION=$(cat .github/workflows/gfx-windows-internal.env | grep GFX_DRIVER_VERSION | sed 's/.*=//')
echo "Setup internal GFX driver ${GFX_DRIVER_VERSION} for Windows"
./scripts/download_gfx.sh ${GFX_DRIVER_VERSION} ${NAS_LINUX}/gfx-driver-win/ ${ARTIFACTORY_TOKEN}
GFX_DRIVER_VERSION=$(cat .github/workflows/gfx-windows-public.env | grep GFX_DRIVER_VERSION | sed 's/.*=//')
echo "Setup public GFX driver ${GFX_DRIVER_VERSION} for Windows"
./scripts/download_gfx.sh ${GFX_DRIVER_VERSION} ${NAS_LINUX}/gfx-driver-win/ ${ARTIFACTORY_TOKEN}
GFX_DRIVER_VERSION=$(cat .github/workflows/gfx-windows-release.env | grep GFX_DRIVER_VERSION | sed 's/.*=//')
echo "Setup release GFX driver ${GFX_DRIVER_VERSION} for Windows"
./scripts/download_gfx.sh ${GFX_DRIVER_VERSION} ${NAS_LINUX}/gfx-driver-win/ ${ARTIFACTORY_TOKEN}
################################################################################
################################################################################
# GPU tests
################################################################################
###############################################################################
########################################
# ze_raytracing
########################################
linux-ze_raytracing:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
needs: [setup_gfx, setup_dpcpp]
with:
image: embree/ubuntu:22.04
runs-on: '[ "Linux", "docker", "build" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-internal.env
artifact-out: linux-ze_raytracing
artifact-path: ./build
cmd: |
source $DPCPP_ROOT/startup.sh
mkdir build
cd build
cmake -G Ninja -D CMAKE_CXX_COMPILER=clang++ -D CMAKE_C_COMPILER=clang ../kernels/rthwif
cmake --build . --target package
linux-ze_raytracing-test-DG2:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
needs: ["linux-ze_raytracing"]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "dg2" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-internal.env
artifact-in: linux-ze_raytracing
cmd: |
cd build
ctest
windows-ze_raytracing:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@devel
needs: [setup_gfx, setup_dpcpp]
with:
runs-on: '[ "Windows", "NAS", "dg2" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-windows-internal.env
artifact-path: ./build
artifact-out: windows-ze_raytracing
shell: cmd
cmd: |
call %DPCPP_ROOT%\\startup.bat
mkdir build
cd build
cmake -G Ninja -D CMAKE_BUILD_TYPE=Release -D CMAKE_CXX_COMPILER=clang++ -D CMAKE_C_COMPILER=clang ../kernels/rthwif
cmake --build . --target package
ctest
########################################
# Linux DG2
########################################
linux-DG2-JIT-INTERNAL:
linux-DG2-JIT-INTERNAL-build:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
needs: [setup_gfx, setup_dpcpp]
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
with:
image: embree/ubuntu:22.04
runs-on: '[ "Linux", "docker", "build" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-internal.env
artifact-out: linux-DG2-JIT-INTERNAL
artifact-path: ./build .ctest_conf
dpcpp-version: intel-llvm/sycl-rel_5_2_0-rk
artifact-out: linux-DG2-JIT-INTERNAL-build
artifact-path: ./build/*.tar.gz
cmd: |
scripts/test.py configure platform:x64 compiler:dpcpp ispc:ispc1.18.1 isa:SSE2 build:RelWithAssert EMBREE_SYCL_SUPPORT:ON sycl:none tasking:TBB2021.7.0 intensity:4
scripts/test.py build --debug
scripts/test.py build
module load cmake/3.25.3
cmake --preset linux-DG2-JIT-INTERNAL -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target build
linux-DG2-JIT-INTERNAL-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
needs: ["linux-DG2-JIT-INTERNAL"]
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: ["linux-DG2-JIT-INTERNAL-build"]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "dg2" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-internal.env
artifact-in: linux-DG2-JIT-INTERNAL
env-from-files: ./.github/workflows/gfx-ubuntu22-internal.env
dpcpp-version: intel-llvm/sycl-rel_5_2_0-rk
artifact-in: linux-DG2-JIT-INTERNAL-build
cmd: |
scripts/test.py test --debug
scripts/test.py test
module load cmake/3.25.3
cmake --preset linux-DG2-JIT-INTERNAL -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target test_package
linux-DG2-JIT-PUBLIC:
linux-DG2-JIT-PUBLIC-build:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
needs: [setup_gfx, setup_dpcpp]
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
with:
image: embree/ubuntu:22.04
runs-on: '[ "Linux", "docker", "build" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-public.env
artifact-out: linux-DG2-JIT-PUBLIC
artifact-path: ./build .ctest_conf
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env
artifact-out: linux-DG2-JIT-PUBLIC-build
artifact-path: ./build/*.tar.gz
cmd: |
scripts/test.py configure platform:x64 compiler:dpcpp ispc:ispc1.18.1 isa:SSE2 build:RelWithAssert EMBREE_SYCL_SUPPORT:ON sycl:none tasking:TBB2021.7.0 intensity:4
scripts/test.py build --debug
scripts/test.py build
module load cmake/3.25.3
cmake --preset linux-DG2-JIT-PUBLIC -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target build
linux-DG2-JIT-PUBLIC-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
needs: ["linux-DG2-JIT-PUBLIC"]
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: ["linux-DG2-JIT-PUBLIC-build"]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "dg2" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-public.env
artifact-in: linux-DG2-JIT-PUBLIC
artifact-in: linux-DG2-JIT-PUBLIC-build
cmd: |
scripts/test.py test --debug
scripts/test.py test
module load cmake/3.25.3
cmake --preset linux-DG2-JIT-PUBLIC -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target test_package
linux-DG2-JIT-EMBARGO:
linux-DG2-JIT-PUBLIC-ICX-build:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
needs: [setup_gfx, setup_dpcpp]
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
with:
image: embree/ubuntu:22.04
runs-on: '[ "Linux", "docker", "build" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-embargo.env
artifact-out: linux-DG2-JIT-EMBARGO
artifact-path: ./build .ctest_conf
env-from-files: ./.github/workflows/dpcpp-none.env
dpcpp-version: intel/2024.1.0
artifact-out: linux-DG2-JIT-PUBLIC-ICX-build
artifact-path: ./build/*.tar.gz
cmd: |
scripts/test.py configure platform:x64 compiler:dpcpp ispc:ispc1.18.1 isa:SSE2 build:RelWithAssert EMBREE_SYCL_SUPPORT:ON sycl:none tasking:TBB2021.7.0 intensity:4
scripts/test.py build --debug
scripts/test.py build
linux-DG2-JIT-GPU-BVH-BUILDER:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
needs: [setup_gfx, setup_dpcpp]
with:
image: embree/ubuntu:22.04
runs-on: '[ "Linux", "docker", "build" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-embargo.env
artifact-out: linux-DG2-JIT-GPU-BVH-BUILDER
artifact-path: ./build .ctest_conf
cmd: |
scripts/test.py configure platform:x64 compiler:dpcpp ispc:ispc1.18.1 isa:SSE2 build:RelWithAssert EMBREE_SYCL_SUPPORT:ON EMBREE_SYCL_GPU_BVH_BUILDER:ON USERGEOM:CONTEXT FILTER_FUNCTION:CONTEXT gfx:EMBARGO sycl:none tasking:TBB2021.7.0 intensity:4
scripts/test.py build --debug
scripts/test.py build
linux-DG2-JIT-PUBLIC-GPU-BVH-BUILDER:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
needs: [setup_gfx, setup_dpcpp]
with:
image: embree/ubuntu:22.04
runs-on: '[ "Linux", "docker", "build" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-public.env
install-gfx-driver: false
artifact-out: linux-DG2-JIT-PUBLIC-GPU-BVH-BUILDER
artifact-path: ./build .ctest_conf
cmd: |
scripts/test.py configure platform:x64 compiler:dpcpp ispc:ispc1.18.1 isa:AVX512 build:RelWithAssert EMBREE_SYCL_SUPPORT:ON EMBREE_SYCL_GPU_BVH_BUILDER:ON USERGEOM:CONTEXT FILTER_FUNCTION:CONTEXT gfx:PUBLIC sycl:none tasking:TBB2021.7.0 intensity:4
scripts/test.py build --debug
scripts/test.py build
# linux-DG2-AOT-INTERNAL-test:
# secrets: inherit
# uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
# needs: ["linux-DG2-AOT-INTERNAL"]
# with:
# image: embree/ubuntu:22.04
# options: --device=/dev/dri:/dev/dri
# runs-on: '[ "Linux", "docker", "dg2" ]'
# project: embree
# env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-internal.env
# artifact-in: linux-DG2-AOT-INTERNAL
# cmd: |
# scripts/test.py test --debug
# scripts/test.py test
linux-DG2-JIT-PUBLIC-ICX:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
needs: [setup_gfx, setup_dpcpp]
with:
image: embree/ubuntu:22.04
runs-on: '[ "Linux", "docker", "build" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-none.env ./.github/workflows/gfx-ubuntu22-public.env
artifact-out: linux-DG2-JIT-PUBLIC-ICX
artifact-path: ./build .ctest_conf
cmd: |
scripts/test.py configure platform:x64 compiler:ICX2023.0.0 ispc:ispc1.18.1 isa:AVX512 build:RelWithAssert EMBREE_SYCL_SUPPORT:ON sycl:none tasking:TBB2021.7.0 intensity:4
scripts/test.py build --debug
scripts/test.py build
module load cmake/3.25.3
cmake --preset linux-DG2-JIT-PUBLIC-ICX -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target build
linux-DG2-JIT-PUBLIC-ICX-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
needs: ["linux-DG2-JIT-PUBLIC-ICX"]
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: ["linux-DG2-JIT-PUBLIC-ICX-build"]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "dg2" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-none.env ./.github/workflows/gfx-ubuntu22-public.env
artifact-in: linux-DG2-JIT-PUBLIC-ICX
env-from-files: ./.github/workflows/gfx-ubuntu22-public.env
dpcpp-version: intel/2024.1.0
artifact-in: linux-DG2-JIT-PUBLIC-ICX-build
cmd: |
scripts/test.py test --debug
scripts/test.py test
module load cmake/3.25.3
cmake --preset linux-DG2-JIT-PUBLIC-ICX -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target test_package
########################################
# Linux ATS-M
########################################
# ########################################
# # Linux ATS-M
# ########################################
linux-ATSM-JIT-PUBLIC-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
needs: ["linux-DG2-JIT-PUBLIC"]
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: ["linux-DG2-JIT-PUBLIC-build"]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "atsm" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-public.env
artifact-in: linux-DG2-JIT-PUBLIC
artifact-in: linux-DG2-JIT-PUBLIC-build
cmd: |
scripts/test.py test --debug
scripts/test.py test
module load cmake/3.25.3
cmake --preset linux-DG2-JIT-PUBLIC -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target test_package
########################################
# Linux PVC
########################################
linux-PVC-JIT-INTERNAL:
linux-PVC-JIT-INTERNAL-build:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
needs: [setup_gfx, setup_dpcpp]
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
with:
image: embree/ubuntu:22.04
runs-on: '[ "Linux", "docker", "build" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-embargo.env
artifact-out: linux-PVC-JIT-INTERNAL
artifact-path: ./build .ctest_conf
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env
artifact-out: linux-PVC-JIT-INTERNAL-build
artifact-path: ./build/*.tar.gz
cmd: |
scripts/test.py configure platform:x64 compiler:dpcpp ispc:ispc1.16.1 isa:SSE2 build:RelWithAssert EMBREE_SYCL_SUPPORT:ON sycl:none tasking:TBB intensity:4
scripts/test.py build --debug
scripts/test.py build
module load cmake/3.25.3
cmake --preset linux-PVC-JIT-INTERNAL-SYCL-RC -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target build
linux-PVC-1T-JIT-INTERNAL-test:
# TODO: move to nightly
linux-PVC-JIT-INTERNAL-test-1T:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
needs: ["linux-PVC-JIT-INTERNAL"]
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: ["linux-PVC-JIT-INTERNAL-build"]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "pvc" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-embargo.env
artifact-in: linux-PVC-JIT-INTERNAL
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-internal.env
artifact-in: linux-PVC-JIT-INTERNAL-build
cmd: |
export NEOReadDebugKeys=1
export UseKmdMigration=0
export EnableImplicitScaling=0
scripts/test.py test --debug
scripts/test.py test
export ZE_FLAT_DEVICE_HIERARCHY=COMPOSITE
module load cmake/3.25.3
cmake --preset linux-PVC-JIT-INTERNAL-SYCL-RC -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target test_package
linux-PVC-2T-JIT-INTERNAL-test:
linux-PVC-JIT-INTERNAL-test-2T:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
needs: ["linux-PVC-JIT-INTERNAL"]
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: ["linux-PVC-JIT-INTERNAL-build"]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "pvc" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-embargo.env
artifact-in: linux-PVC-JIT-INTERNAL
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-internal.env
artifact-in: linux-PVC-JIT-INTERNAL-build
cmd: |
export EnableImplicitScaling=1
scripts/test.py test --debug
scripts/test.py test
export NEOReadDebugKeys=1
export UseKmdMigration=0
export ZE_FLAT_DEVICE_HIERARCHY=COMPOSITE
module load cmake/3.25.3
cmake --preset linux-PVC-JIT-INTERNAL-SYCL-RC -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target test_package
# linux-PVC-JIT-PUBLIC:
# secrets: inherit
# uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@devel
# needs: [setup_gfx, setup_dpcpp]
# with:
# image: embree/ubuntu:22.04
# runs-on: '[ "Linux", "docker", "build" ]'
# artifact-out: linux-PVC-JIT-PUBLIC
# artifact-path: ./build .ctest_conf
# cmd: |
# scripts/test.py configure platform:x64 compiler:dpcpp ispc:ispc1.16.1 isa:SSE2 build:RelWithAssert EMBREE_SYCL_SUPPORT:ON sycl:none tasking:TBB intensity:4
# scripts/test.py build --debug
# scripts/test.py build
#
# linux-PVC-JIT-PUBLIC-test:
# secrets: inherit
# uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@devel
# needs: ["linux-PVC-JIT-PUBLIC"]
# with:
# image: embree/ubuntu:22.04
# options: --device=/dev/dri:/dev/dri
# runs-on: '[ "Linux", "docker", "pvc" ]'
# artifact-in: linux-PVC-JIT-PUBLIC
# cmd: |
# scripts/test.py test --debug
# scripts/test.py test
linux-PVC-JIT-INTERNAL-test-flat:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: ["linux-PVC-JIT-INTERNAL-build"]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "pvc" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-ubuntu22-internal.env
artifact-in: linux-PVC-JIT-INTERNAL-build
cmd: |
module load cmake/3.25.3
cmake --preset linux-PVC-JIT-INTERNAL-SYCL-RC -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target test_package
# linux-PVC-JIT-PUBLIC:
# secrets: inherit
# uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
# with:
# image: embree/ubuntu:22.04
# runs-on: '[ "Linux", "docker", "build" ]'
# artifact-out: linux-PVC-JIT-PUBLIC
# artifact-path: ./build .ctest_conf
# cmd: |
# scripts/test.py configure platform:x64 compiler:dpcpp ispc:ispc1.16.1 isa:SSE2 build:RelWithAssert EMBREE_SYCL_SUPPORT:ON sycl:none tasking:TBB intensity:4
# scripts/test.py build --debug
# scripts/test.py build
#
# linux-PVC-JIT-PUBLIC-test:
# secrets: inherit
# uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
# needs: ["linux-PVC-JIT-PUBLIC"]
# with:
# image: embree/ubuntu:22.04
# options: --device=/dev/dri:/dev/dri
# runs-on: '[ "Linux", "docker", "pvc" ]'
# artifact-in: linux-PVC-JIT-PUBLIC
# cmd: |
# scripts/test.py test --debug
# scripts/test.py test
########################################
# Windows DG2
########################################
windows-DG2-JIT-INTERNAL:
windows-DG2-JIT-build:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@devel
needs: [setup_gfx, setup_dpcpp]
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@main
with:
force-delete: true
runs-on: '[ "Windows", "NAS", "build" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env
artifact-out: windows-DG2-JIT-build
artifact-path: ./build/*.zip
cmd: |
cmake --preset windows-DG2-JIT-INTERNAL-L0RTAS -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target build
windows-DG2-JIT-INTERNAL-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@main
needs: ["windows-DG2-JIT-build"]
with:
runs-on: '[ "Windows", "NAS", "dg2" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-windows-internal.env
artifact-in: windows-DG2-JIT-build
cmd: |
python scripts/test.py configure platform:x64 compiler:dpcpp isa:SSE2 build:Release EMBREE_SYCL_SUPPORT:ON sycl:none intensity:3
python scripts/test.py build
python scripts/test.py test
cmake --preset windows-DG2-JIT-INTERNAL-L0RTAS -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target test_package
windows-DG2-JIT-PUBLIC:
windows-DG2-JIT-PUBLIC-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@devel
needs: [setup_gfx, setup_dpcpp]
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@main
needs: ["windows-DG2-JIT-build"]
with:
runs-on: '[ "Windows", "NAS", "dg2" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-windows-public.env
artifact-in: windows-DG2-JIT-build
cmd: |
python scripts/test.py configure platform:x64 compiler:dpcpp isa:SSE2 build:Release EMBREE_SYCL_SUPPORT:ON sycl:none intensity:3
python scripts/test.py build
python scripts/test.py test
cmake --preset windows-DG2-JIT-INTERNAL-L0RTAS -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target test_package
windows-DG2-JIT-PUBLIC-ICX:
windows-DG2-JIT-ICX-build:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@devel
needs: [setup_gfx, setup_dpcpp]
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@main
with:
runs-on: '[ "Windows", "NAS", "dg2" ]'
project: embree
dpcpp-version: oneAPI/compiler/2024.1
env-from-files: ./.github/workflows/dpcpp-none.env ./.github/workflows/gfx-windows-public.env
artifact-out: windows-DG2-JIT-ICX-build
artifact-path: ./build/*.zip
cmd: |
python scripts/test.py configure platform:x64 compiler:ICX2023.0.0 ispc:ispc1.18.1 isa:AVX512 tasking:TBB2021.7.0 build:Release EMBREE_SYCL_SUPPORT:ON sycl:none intensity:2
python scripts/test.py build
python scripts/test.py test
cmake --preset nightly-windows-DG2-JIT-ICX -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target build
windows-DG2-JIT-INTERNAL-TBB2020_3:
windows-DG2-JIT-ICX-INTERNAL-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@devel
needs: [setup_gfx, setup_dpcpp]
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@main
needs: ["windows-DG2-JIT-ICX-build"]
with:
runs-on: '[ "Windows", "NAS", "dg2" ]'
project: embree
dpcpp-version: oneAPI/compiler/2024.1
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-windows-internal.env
artifact-in: windows-DG2-JIT-ICX-build
cmd: |
python scripts/test.py configure platform:x64 compiler:dpcpp isa:SSE2 build:Release EMBREE_SYCL_SUPPORT:ON sycl:none intensity:3 tasking:TBB2020.3
python scripts/test.py build
python scripts/test.py test
cmake --preset nightly-windows-DG2-JIT-ICX -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target test_package
################################################################################
################################################################################
# CPU tests
################################################################################
################################################################################
########################################
# Linux
########################################
linux-fedora29_ICX:
windows-DG2-JIT-ICX-PUBLIC-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@devel
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@main
needs: ["windows-DG2-JIT-ICX-build"]
with:
runs-on: '[ "Windows", "NAS", "dg2" ]'
project: embree
dpcpp-version: oneAPI/compiler/2024.1
env-from-files: ./.github/workflows/dpcpp-sycl-nightly.env ./.github/workflows/gfx-windows-public.env
artifact-in: windows-DG2-JIT-ICX-build
cmd: |
cmake --preset nightly-windows-DG2-JIT-ICX -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTENSITY=3
cmake --build build --config Release --target test_package
# ################################################################################
# ################################################################################
# # CPU tests
# ################################################################################
# ################################################################################
# ########################################
# # Linux
# ########################################
linux-fedora29-CLANG4:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
with:
image: embree/fedora:29
runs-on: '[ "Linux", "docker", "avx512" ]'
cmd: |
python scripts/test.py configure platform:x64 build:Debug compiler:ICX2023.0.0 ispc:ispc1.12.0 isa:AVX512 frequency_level:simd256 tasking:TBB2021.2.0 intensity:2 maxinstancelevelcount:4
python scripts/test.py build
python scripts/test.py test
# python scripts/test.py test sde:hsw
module load cmake/3.25.3
cmake --preset linux-fedora29-CLANG4 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DEMBREE_TESTING_INTENSITY=2
cmake --build build --config RelWithDebInfo --target build
cmake --build build --config RelWithDebInfo --target test_package
linux-fedora32-GCC:
linux-fedora29-CLANG5-INT-ADDRSANITIZER:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@devel
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
with:
image: embree/fedora:32
runs-on: '[ "Linux", "docker", "avx512" ]'
cmd: |
python scripts/test.py configure platform:x64 build:Debug compiler:GCC ispc:ispc isa:AVX512 tasking:TBB COMPACT_POLYS:ON MIN_WIDTH:ON intensity:2
python scripts/test.py build
python scripts/test.py test
linux-fedora32_ICX:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@devel
with:
image: embree/fedora:32
runs-on: '[ "Linux", "docker", "avx512" ]'
cmd: |
python scripts/test.py configure platform:x64 build:Debug compiler:ICX2023.0.0 ispc:ispc1.12.0 isa:AVX512 frequency_level:simd256 tasking:TBB2021.7.0 intensity:2 maxinstancelevelcount:4
python scripts/test.py build
python scripts/test.py test
linux-fedora26_CLANG4:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@devel
with:
image: embree/fedora:26
runs-on: '[ "Linux", "docker", "avx512" ]'
cmd: |
python scripts/test.py configure platform:x64 build:Debug compiler:CLANG4.0.0 ispc:ispc1.17.0 isa:AVX512 frequency_level:simd128 tasking:TBB2021.2.0 GLFW:OFF intensity:2
python scripts/test.py build
python scripts/test.py test
linux-fedora26_CLANG5-INT-ADDRSANITIZER:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@devel
with:
image: embree/fedora:26
image: embree/fedora:29
runs-on: '[ "Linux", "docker", "build" ]'
cmd: |
python scripts/test.py configure platform:x64 build:Debug compiler:CLANG5.0.0 ispc:ispc1.17.0 isa:AVX tasking:INT intensity:1 addrsanitizer:ON
python scripts/test.py build
python scripts/test.py test
module load cmake/3.25.3
cmake --preset linux-fedora29-CLANG5-INT-ADDRSANITIZER -DCMAKE_BUILD_TYPE=RelWithDebInfo -DEMBREE_TESTING_INTENSITY=1
cmake --build build --config RelWithDebInfo --target build
cmake --build build --config RelWithDebInfo --target test_package
linux-fedora29-ICX:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
with:
image: embree/fedora:29
runs-on: '[ "Linux", "docker", "avx512" ]'
dpcpp-version: intel/2024.1.0
cmd: |
module load cmake/3.25.3
cmake --preset linux-fedora29-ICX -DCMAKE_BUILD_TYPE=RelWithDebInfo -DEMBREE_TESTING_INTENSITY=2
cmake --build build --config RelWithDebInfo --target build
cmake --build build --config RelWithDebInfo --target test_package
linux-fedora32-ICX:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
with:
image: embree/fedora:32
runs-on: '[ "Linux", "docker", "avx512" ]'
dpcpp-version: intel/2024.1.0
cmd: |
module load cmake/3.25.3
cmake --preset linux-fedora32-ICX -DCMAKE_BUILD_TYPE=RelWithDebInfo -DEMBREE_TESTING_INTENSITY=2
cmake --build build --config RelWithDebInfo --target build
cmake --build build --config RelWithDebInfo --target test_package
linux-ubuntu20_04-GCC-NAMESPACE:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@devel
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
with:
image: embree/ubuntu:20.04
runs-on: '[ "Linux", "docker", "build" ]'
cmd: |
python scripts/test.py configure platform:x64 build:Debug compiler:GCC ispc:ispc1.12.0 isa:AVX2 frequency_level:simd256 tasking:TBB intensity:1 api_namespace:myembree
python scripts/test.py build
python scripts/test.py test
module load cmake/3.25.3
cmake --preset linux-ubuntu20_04-GCC-NAMESPACE -DCMAKE_BUILD_TYPE=RelWithDebInfo -DEMBREE_TESTING_INTENSITY=1
cmake --build build --config RelWithDebInfo --target build
cmake --build build --config RelWithDebInfo --target test_package
linux-ubuntu20_04-ICX:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@devel
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
with:
image: embree/ubuntu:20.04
runs-on: '[ "Linux", "docker", "avx512" ]'
dpcpp-version: intel/2024.1.0
cmd: |
python scripts/test.py configure platform:x64 build:Release threads:4 compiler:ICX2023.0.0 ispc:ispc1.17.0 isa:AVX512 frequency_level:simd256 tasking:TBB2021.5.0 intensity:2
python scripts/test.py build
python scripts/test.py test
linux-centos7_4-GCC:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@devel
with:
image: embree/centos:7.4
runs-on: '[ "Linux", "docker", "build" ]'
cmd: |
python scripts/test.py configure platform:x64 build:Debug compiler:GCC ispc:ispc1.17.0 isa:AVX2 frequency_level:simd128 tasking:TBB intensity:1
python scripts/test.py build
python scripts/test.py test
module load cmake/3.25.3
cmake --preset linux-ubuntu20_04-ICX -DCMAKE_BUILD_TYPE=RelWithDebInfo -DEMBREE_TESTING_INTENSITY=2
cmake --build build --config RelWithDebInfo --target build
cmake --build build --config RelWithDebInfo --target test_package
########################################
# Windows
########################################
windows-V140:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_windows.yml@devel
with:
runs-on: '[ "Windows", "NAS", "build" ]'
cmd: |
python scripts/test.py configure platform:x64 threads:4 build:RelWithDebInfo compiler:V140 ispc:ispc1.16.1 isa:SSE2 tasking:TBB2020.2 intensity:2
python scripts/test.py build
python scripts/test.py test
windows-V141:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_windows.yml@devel
with:
runs-on: '[ "Windows", "NAS", "build" ]'
cmd: |
python scripts/test.py configure platform:x64 build:RelWithDebInfo compiler:V141 ispc:ispc1.17.0 isa:SSE2 tasking:TBB2020.2 intensity:2 maxinstancelevelcount:8
python scripts/test.py build
python scripts/test.py test
windows-V142:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_windows.yml@devel
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@main
with:
force-delete: true
runs-on: '[ "Windows", "NAS", "build" ]'
dpcpp-version: none
cmd: |
python scripts/test.py configure platform:x64 build:RelWithDebInfo compiler:V142 ispc:ispc1.18.1 isa:SSE2 tasking:TBB2021.7.0 intensity:2 maxinstancelevelcount:8
python scripts/test.py build
python scripts/test.py test
cmake --preset windows-V142 -D CMAKE_BUILD_TYPE=RelWithDebInfo -D EMBREE_TESTING_INTENSITY=2
cmake --build build --config RelWithDebInfo --target build
cmake --build build --target test_package
windows-ICX:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_windows.yml@devel
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@main
with:
force-delete: true
runs-on: '[ "Windows", "NAS", "build", "avx512" ]'
dpcpp-version: oneAPI/compiler/2024.1
cmd: |
python scripts/test.py configure platform:x64 build:RelWithDebInfo compiler:ICX2023.0.0 ispc:ispc1.17.0 isa:AVX512 tasking:TBB2021.5.0 threads:16 intensity:2
python scripts/test.py build
python scripts/test.py test
################################################################################
################################################################################
# CPU tests
################################################################################
################################################################################
cmake --preset windows-ICX -DCMAKE_BUILD_TYPE=RelWithDebInfo -DEMBREE_TESTING_INTENSITY=2
cmake --build build --config RelWithDebInfo --target build
cmake --build build --config RelWithDebInfo --target test_package
########################################
# MacOS
########################################
macosx-ARM-NEON-AVX2:
macosx-ARM-CLANG-NEON-AVX2:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_macos.yml@devel
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/macos.yml@main
with:
runs-on: '[ "macOS", "arm", "build" ]'
runs-on: '[ "macOS", "build", "arm" ]'
cmd: |
scripts/test.py configure platform:arm64 build:Debug compiler:CLANG ispc:ispc1.17.0 isa:NEON2X tasking:TBB_HOMEBREW intensity:2
scripts/test.py build
scripts/test.py test
cmake --preset macos-ARM-CLANG-NEON-AVX2 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DEMBREE_TESTING_INTENSITY=2
cmake --build build --config RelWithDebInfo --target build
cmake --build build --config RelWithDebInfo --target test_package
macosx-ARM-CLANG-NEON:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/macos.yml@main
with:
runs-on: '[ "macOS", "build", "arm" ]'
cmd: |
cmake --preset macos-ARM-CLANG-NEON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DEMBREE_TESTING_INTENSITY=2
cmake --build build --config RelWithDebInfo --target build
cmake --build build --config RelWithDebInfo --target test_package
macosx-x64-CLANG:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_macos.yml@devel
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/macos.yml@main
with:
runs-on: '[ "macOS", "embree", "build" ]'
runs-on: '[ "macOS", "build", "x86_64" ]'
cmd: |
scripts/test.py configure platform:x64 build:Debug compiler:CLANG ispc:ispc1.18.1 isa:SSE2 tasking:TBB2021.1.1 intensity:2
scripts/test.py build
scripts/test.py test
########################################
# Klockwork
########################################
linux-GCC-KLOCWORK:
cmake --preset macos-x64-CLANG -DCMAKE_BUILD_TYPE=RelWithDebInfo -DEMBREE_TESTING_INTENSITY=2
cmake --build build --config RelWithDebInfo --target build
cmake --build build --config RelWithDebInfo --target test_package
macosx-ARM-CLANG-NEON-AVX2-universal-binaries:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_static_analysis.yml@devel
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/macos.yml@main
with:
image: embree/centos:7.4
runs-on: '[ "Linux", "docker", "build" ]'
runs-on: '[ "macOS", "build", "arm" ]'
cmd: |
export CI_PROJECT_DIR=$GITHUB_WORKSPACE
export CI_JOB_ID=$GITHUB_RUN_ID
python scripts/test.py configure platform:x64 build:Debug compiler:GCC ispc:ispc1.17.0 isa:SSE2 tasking:TBB klocwork:ON intensity:0
python scripts/test.py build
python scripts/test.py test
scripts/klocwork_gen_report.sh
scripts/store_files.sh $GITHUB_REPOSITORY $GITHUB_RUN_ID klocwork "klocwork/report.log"
cmake --preset macos-ARM-CLANG-NEON-AVX2-UB -DCMAKE_BUILD_TYPE=RelWithDebInfo -DEMBREE_TESTING_INTENSITY=2 -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" -DEMBREE_BUILD_GLFW_FROM_SOURCE=ON -DEMBREE_ISPC_SUPPORT=OFF
cmake --build build --config RelWithDebInfo --target build
cmake --build build --config RelWithDebInfo --target test_package
########################################
# Coverity
########################################
static-analysis:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/static_analysis.yml@main
with:
project: Embree
submodules: true
coverity: true
prebuild: >
module load cmake/3.25.3 &&
export NAS_LINUX=$STORAGE_PATH/packages/apps &&
cmake --preset linux-coverity
build: sh scripts/coverity.sh
success:
runs-on: ubuntu-latest
steps:
- name: Success
run: echo Success
needs:
- linux-ze_raytracing
- linux-ze_raytracing-test-DG2
- windows-ze_raytracing
- linux-DG2-JIT-INTERNAL-test
- linux-DG2-JIT-PUBLIC-test
- linux-ATSM-JIT-PUBLIC-test
- linux-DG2-JIT-EMBARGO
- linux-DG2-JIT-PUBLIC-ICX-test
- linux-PVC-1T-JIT-INTERNAL-test
- linux-PVC-2T-JIT-INTERNAL-test
- windows-DG2-JIT-INTERNAL
- windows-DG2-JIT-PUBLIC
- windows-DG2-JIT-PUBLIC-ICX
- windows-DG2-JIT-INTERNAL-TBB2020_3
- linux-fedora29_ICX
- linux-fedora32-GCC
- linux-fedora32_ICX
- linux-fedora26_CLANG4
- linux-fedora26_CLANG5-INT-ADDRSANITIZER
- linux-PVC-JIT-INTERNAL-test-1T
- linux-PVC-JIT-INTERNAL-test-2T
- linux-PVC-JIT-INTERNAL-test-flat
- windows-DG2-JIT-INTERNAL-test
- windows-DG2-JIT-PUBLIC-test
- windows-DG2-JIT-ICX-INTERNAL-test
- windows-DG2-JIT-ICX-PUBLIC-test
- linux-fedora29-CLANG4
- linux-fedora29-CLANG5-INT-ADDRSANITIZER
- linux-fedora29-ICX
- linux-fedora32-ICX
- linux-ubuntu20_04-GCC-NAMESPACE
- linux-ubuntu20_04-ICX
- linux-centos7_4-GCC
- windows-V140
- windows-V141
- windows-V142
- windows-ICX
- macosx-ARM-NEON-AVX2
- macosx-ARM-CLANG-NEON-AVX2
- macosx-ARM-CLANG-NEON
- macosx-x64-CLANG
- linux-GCC-KLOCWORK
- macosx-ARM-CLANG-NEON-AVX2-universal-binaries
- static-analysis
if: failure() || cancelled()
steps:
- name: Failure
run: |
echo "::notice title=Success::Workflow failed"
exit 1
+1 -1
View File
@@ -1 +1 @@
DPCPP_VERSION=sycl-nightly/20230304
DPCPP_VERSION=intel-llvm/nightly-2024-03-17
@@ -1 +0,0 @@
GFX_DRIVER_VERSION=gfx-driver-builds/ci/master/gfx-driver-ci-master-13324/artifacts/Linux/Ubuntu/22.04/Release
+1 -1
View File
@@ -1 +1 @@
GFX_DRIVER_VERSION=neo-builds/ci/master/ci-neo-master-025813/artifacts/linux/ubuntu/22.04
GFX_DRIVER_VERSION=neo-builds/ci/master/ci-neo-master-029525/artifacts/linux/ubuntu/22.04
+1 -1
View File
@@ -1 +1 @@
GFX_DRIVER_VERSION=neo-builds/releases/releases_23.05/neo-releases-23.05.25593.11/artifacts/linux/ubuntu/22.04
GFX_DRIVER_VERSION=linux-latest
@@ -1 +0,0 @@
GFX_DRIVER_VERSION=neo-builds/releases/releases_23.05/neo-releases-23.05.25593.11/artifacts/linux/ubuntu/20.04
+1 -1
View File
@@ -1 +1 @@
GFX_DRIVER_VERSION=gfx-driver-builds/ci/master/gfx-driver-ci-master-13324/artifacts/Windows
GFX_DRIVER_VERSION=gfx-driver-builds/ci/master/gfx-driver-ci-master-16477/artifacts/Windows
+1 -1
View File
@@ -1 +1 @@
GFX_DRIVER_VERSION=gfx-driver-builds/prod/releases_23ww08-ci-master-13370/prod-hini-releases_23ww08-ci-master-13370-revenue-pr-1014250/artifacts/Windows/
GFX_DRIVER_VERSION=windows-101.5445
@@ -1 +0,0 @@
GFX_DRIVER_VERSION=gfx-driver-builds/prod/releases_23ww08-ci-master-13370/prod-hini-releases_23ww08-ci-master-13370-revenue-pr-1014250/artifacts/Windows/
+688
View File
@@ -0,0 +1,688 @@
## Copyright 2022 Intel Corporation
## SPDX-License-Identifier: Apache-2.0
name: integrate
permissions: read-all
# same as nightly...
on:
schedule:
- cron: '00 00 * * *'
workflow_dispatch:
jobs:
#####################################################################
# Integration Tests
####################################################################
# TODO: investigate windows integration tests not working
#####################################################################
## Windows
#####################################################################
# integrate-windows-ICX:
# secrets: inherit
# uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@main
# with:
# runs-on: '[ "Windows", "NAS", "build", "avx512" ]'
# artifact-out: integrate-windows-ICX
# artifact-path: ./build/embree-*.zip
# dpcpp-version: oneAPI/compiler/2024.1
# cmd: |
# cmake --preset integrate-windows-icx
# cmake --build build --config Release --target package -j8
# cmake --build build --config Release --target post_package
#
# integrate-windows-ICX-test:
# secrets: inherit
# uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@main
# needs: ["integrate-windows-ICX"]
# with:
# runs-on: '[ "Windows", "NAS", "build", "avx512" ]'
# artifact-in: integrate-windows-ICX
# dpcpp-version: oneAPI/compiler/2024.1
# cmd: |
# cd build
# . ..\tests\integration\test_embree_release\unpack-windows.ps1
# cd ..\tests\integration\test_embree_release
# cmake --preset test-windows-icx
# cmake --build build --config Release
# .\build\test.exe
#
#
#
#
#
# integrate-windows-v142:
# secrets: inherit
# uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows.yml@main
# with:
# runs-on: '[ "Windows", "NAS", "build", "avx512" ]'
# artifact-out: integrate-windows-v142
# artifact-path: ./build/embree-*.zip
# cmd: |
# cmake --preset integrate-windows-v142
# cmake --build build --config Release --target package -j8
# cmake --build build --config Release --target post_package
#
# integrate-windows-v142-test-v142:
# secrets: inherit
# uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows.yml@main
# needs: ["integrate-windows-v142"]
# with:
# runs-on: '[ "Windows", "NAS", "build", "avx512" ]'
# artifact-in: integrate-windows-v142
# cmd: |
# cd build
# . ..\tests\integration\test_embree_release\unpack-windows.ps1
# cd ..\tests\integration\test_embree_release
# cmake --preset test-windows-v142
# cmake --build build --config Release
# .\build\Release\test.exe
#
# integrate-windows-v142-test-ICX:
# secrets: inherit
# uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@main
# needs: ["integrate-windows-v142"]
# with:
# runs-on: '[ "Windows", "NAS", "build", "avx512" ]'
# artifact-in: integrate-windows-v142
# dpcpp-version: oneAPI/compiler/2024.1
# cmd: |
# cd build
# . ..\tests\integration\test_embree_release\unpack-windows.ps1
# cd ..\tests\integration\test_embree_release
# cmake --preset test-windows-icx
# cmake --build build --config Release
# .\build\test.exe
#
#
#
#
#
#####################################################################
## Windows STATIC
#####################################################################
# integrate-static-windows-ICX:
# secrets: inherit
# uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@main
# with:
# runs-on: '[ "Windows", "NAS", "build", "avx512" ]'
# artifact-out: integrate-static-windows-ICX
# artifact-path: ./build/embree-*.zip
# dpcpp-version: oneAPI/compiler/2024.1
# cmd: |
# cmake --preset integrate-static-windows-icx
# cmake --build build --config Release --target package -j8
# cmake --build build --config Release --target post_package
#
# integrate-static-windows-ICX-test:
# secrets: inherit
# uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@main
# needs: ["integrate-static-windows-ICX"]
# with:
# runs-on: '[ "Windows", "NAS", "build", "avx512" ]'
# artifact-in: integrate-static-windows-ICX
# dpcpp-version: oneAPI/compiler/2024.1
# cmd: |
# cd build
# . ..\tests\integration\test_embree_release\unpack-windows.ps1
# cd ..\tests\integration\test_embree_release
# cmake --preset test-windows-icx
# cmake --build build --config Release
# .\build\test.exe
#
#
#
#
#
# integrate-static-windows-v142:
# secrets: inherit
# uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows.yml@main
# with:
# runs-on: '[ "Windows", "NAS", "build", "avx512" ]'
# artifact-out: integrate-static-windows-v142
# artifact-path: ./build/embree-*.zip
# cmd: |
# cmake --preset integrate-windows-v142
# cmake --build build --config Release --target package -j8
# cmake --build build --config Release --target post_package
#
# integrate-static-windows-v142-test-v142:
# secrets: inherit
# uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows.yml@main
# needs: ["integrate-static-windows-v142"]
# with:
# runs-on: '[ "Windows", "NAS", "build", "avx512" ]'
# artifact-in: integrate-static-windows-v142
# cmd: |
# cd build
# . ..\tests\integration\test_embree_release\unpack-windows.ps1
# cd ..\tests\integration\test_embree_release
# cmake --preset test-windows-v142
# cmake --build build --config Release
# .\build\Release\test.exe
#
# integrate-static-windows-v142-test-ICX:
# secrets: inherit
# uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@main
# needs: ["integrate-static-windows-v142"]
# with:
# runs-on: '[ "Windows", "NAS", "build", "avx512" ]'
# artifact-in: integrate-static-windows-v142
# dpcpp-version: oneAPI/compiler/2024.1
# cmd: |
# cd build
# . ..\tests\integration\test_embree_release\unpack-windows.ps1
# cd ..\tests\integration\test_embree_release
# cmake --preset test-windows-icx
# cmake --build build --config Release
# .\build\test.exe
####################################################################
# Linux
####################################################################
integrate-linux-GCC:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
artifact-out: integrate-linux-GCC
artifact-path: ./build/*.tar.gz
cmd: |
module load cmake/3.25.3
cmake --preset integrate-linux-gcc -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
integrate-linux-GCC-test-GCC:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
needs: [ "integrate-linux-GCC" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
artifact-in: integrate-linux-GCC
cmd: |
module load cmake/3.25.3
cmake --preset integrate-linux-gcc -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-gcc
cmake --build build --config Release --target test_integration
integrate-linux-GCC-test-CLANG:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
needs: [ "integrate-linux-GCC" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
artifact-in: integrate-linux-GCC
cmd: |
module load cmake/3.25.3
cmake --preset integrate-linux-gcc -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-clang
cmake --build build --config Release --target test_integration
integrate-linux-GCC-test-ICX:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: [ "integrate-linux-GCC" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
dpcpp-version: intel/2024.1.0
artifact-in: integrate-linux-GCC
cmd: |
module load cmake/3.25.3
cmake --preset integrate-linux-gcc -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-icx
cmake --build build --config Release --target test_integration
integrate-linux-ICX:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
dpcpp-version: intel/2024.1.0
artifact-out: integrate-linux-ICX
artifact-path: ./build/*.tar.gz
cmd: |
module load cmake/3.25.3
cmake --preset integrate-linux-icx -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
integrate-linux-ICX-test-GCC:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
needs: [ "integrate-linux-ICX" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
artifact-in: integrate-linux-ICX
cmd: |
module load cmake/3.25.3
cmake --preset integrate-linux-gcc -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-gcc
cmake --build build --config Release --target test_integration
integrate-linux-ICX-test-CLANG:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: [ "integrate-linux-ICX" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
dpcpp-version: intel/2024.1.0
artifact-in: integrate-linux-ICX
cmd: |
module load cmake/3.25.3
cmake --preset integrate-linux-icx -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-clang
cmake --build build --config Release --target test_integration
integrate-linux-ICX-test-ICX:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: [ "integrate-linux-ICX" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
dpcpp-version: intel/2024.1.0
artifact-in: integrate-linux-ICX
cmd: |
module load cmake/3.25.3
cmake --preset integrate-linux-icx -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-icx
cmake --build build --config Release --target test_integration
integrate-static-linux-CLANG:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
artifact-out: integrate-static-linux-CLANG
artifact-path: ./build/*.tar.gz
cmd: |
module load cmake/3.25.3
cmake --preset integrate-static-linux-clang -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
integrate-static-linux-CLANG-test-GCC:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
needs: [ "integrate-static-linux-CLANG" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
artifact-in: integrate-static-linux-CLANG
cmd: |
module load cmake/3.25.3
cmake --preset integrate-static-linux-clang -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-gcc
cmake --build build --config Release --target test_integration
integrate-static-linux-CLANG-test-CLANG:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
needs: [ "integrate-static-linux-CLANG" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
artifact-in: integrate-static-linux-CLANG
cmd: |
module load cmake/3.25.3
cmake --preset integrate-static-linux-clang -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-clang
cmake --build build --config Release --target test_integration
integrate-static-linux-CLANG-test-ICX:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: [ "integrate-static-linux-CLANG" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
dpcpp-version: intel/2024.1.0
artifact-in: integrate-static-linux-CLANG
cmd: |
module load cmake/3.25.3
cmake --preset integrate-static-linux-clang -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-icx
cmake --build build --config Release --target test_integration
####################################################################
# Linux STATIC
####################################################################
integrate-static-linux-GCC:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
artifact-out: integrate-static-linux-GCC
artifact-path: ./build/*.tar.gz
cmd: |
module load cmake/3.25.3
cmake --preset integrate-static-linux-gcc -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
integrate-static-linux-GCC-test-GCC:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
needs: [ "integrate-static-linux-GCC" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
artifact-in: integrate-static-linux-GCC
cmd: |
module load cmake/3.25.3
cmake --preset integrate-static-linux-gcc -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-gcc
cmake --build build --config Release --target test_integration
integrate-static-linux-GCC-test-CLANG:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
needs: [ "integrate-static-linux-GCC" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
artifact-in: integrate-static-linux-GCC
cmd: |
module load cmake/3.25.3
cmake --preset integrate-static-linux-gcc -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-clang
cmake --build build --config Release --target test_integration
integrate-static-linux-GCC-test-ICX:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: [ "integrate-static-linux-GCC" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
dpcpp-version: intel/2024.1.0
artifact-in: integrate-static-linux-GCC
cmd: |
module load cmake/3.25.3
cmake --preset integrate-static-linux-gcc -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-icx
cmake --build build --config Release --target test_integration
integrate-static-linux-ICX:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
dpcpp-version: intel/2024.1.0
artifact-out: integrate-static-linux-ICX
artifact-path: ./build/*.tar.gz
cmd: |
module load cmake/3.25.3
cmake --preset integrate-static-linux-icx -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
integrate-static-linux-ICX-test-GCC:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: [ "integrate-static-linux-ICX" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
dpcpp-version: intel/2024.1.0
artifact-in: integrate-static-linux-ICX
cmd: |
module load cmake/3.25.3
cmake --preset integrate-static-linux-icx -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-gcc
cmake --build build --config Release --target test_integration
integrate-static-linux-ICX-test-CLANG:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: [ "integrate-static-linux-ICX" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
dpcpp-version: intel/2024.1.0
artifact-in: integrate-static-linux-ICX
cmd: |
module load cmake/3.25.3
cmake --preset integrate-static-linux-icx -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-clang
cmake --build build --config Release --target test_integration
integrate-static-linux-ICX-test-ICX:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: [ "integrate-static-linux-ICX" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
dpcpp-version: intel/2024.1.0
artifact-in: integrate-static-linux-ICX
cmd: |
module load cmake/3.25.3
cmake --preset integrate-static-linux-icx -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-icx
cmake --build build --config Release --target test_integration
integrate-linux-CLANG:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
artifact-out: integrate-linux-CLANG
artifact-path: ./build/*.tar.gz
cmd: |
module load cmake/3.25.3
cmake --preset integrate-linux-clang -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
integrate-linux-CLANG-test-GCC:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
needs: [ "integrate-linux-CLANG" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
artifact-in: integrate-linux-CLANG
cmd: |
module load cmake/3.25.3
cmake --preset integrate-linux-clang -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-gcc
cmake --build build --config Release --target test_integration
integrate-linux-CLANG-test-CLANG:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker.yml@main
needs: [ "integrate-linux-CLANG" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
artifact-in: integrate-linux-CLANG
cmd: |
module load cmake/3.25.3
cmake --preset integrate-linux-clang -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-clang
cmake --build build --config Release --target test_integration
integrate-linux-CLANG-test-ICX:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: [ "integrate-linux-CLANG" ]
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
dpcpp-version: intel/2024.1.0
artifact-in: integrate-linux-CLANG
cmd: |
module load cmake/3.25.3
cmake --preset integrate-linux-clang -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-icx
cmake --build build --config Release --target test_integration
####################################################################
# Linux SYCL
####################################################################
integrate-sycl-linux-ICX:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
with:
image: embree/ubuntu:22.04
project: embree
env-from-files: ./.github/workflows/dpcpp-none.env ./.github/workflows/gfx-ubuntu22-public.env
dpcpp-version: icx/compiler_ppkg-rel/20240110
artifact-out: integrate-sycl-linux-ICX
artifact-path: ./build/*.tar.gz
cmd: |
module load cmake/3.25.3
cmake --preset integrate-sycl-linux-icx -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
integrate-sycl-linux-ICX-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: [ "integrate-sycl-linux-ICX" ]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "dg2" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-none.env ./.github/workflows/gfx-ubuntu22-public.env
dpcpp-version: icx/compiler_ppkg-rel/20240110
artifact-in: integrate-sycl-linux-ICX
cmd: |
module load cmake/3.25.3
cmake --preset integrate-sycl-linux-icx -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-icx
cmake --build build --config Release --target test_integration
integrate-sycl-linux-DPCPP:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
with:
image: embree/ubuntu:22.04
project: embree
env-from-files: ./.github/workflows/dpcpp-none.env ./.github/workflows/gfx-ubuntu22-public.env
dpcpp-version: intel-llvm/nightly-2023-09-22-rk
artifact-out: integrate-sycl-linux-DPCPP
artifact-path: ./build/*.tar.gz
cmd: |
module load cmake/3.25.3
cmake --preset integrate-sycl-linux-dpcpp -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
istegrate-sycl-linux-DPCPP-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: [ "integrate-sycl-linux-DPCPP" ]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "dg2" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-none.env ./.github/workflows/gfx-ubuntu22-public.env
dpcpp-version: icx/compiler_ppkg-rel/20240110
artifact-in: integrate-sycl-linux-DPCPP
cmd: |
module load cmake/3.25.3
cmake --preset integrate-sycl-linux-dpcpp -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-icx
cmake --build build --config Release --target test_integration
####################################################################
# MacOS
####################################################################
integrate-macos-GCC:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/macos.yml@main
with:
runs-on: '[ "macOS", "build", "x86_64" ]'
artifact-out: integrate-macos-GCC
artifact-path: ./build/*.zip
cmd: |
cmake --preset integrate-macos-gcc -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
# cmake --build build --config Release --target post_package_notarize TODO: reactivate this when notarization problems are solved
integrate-macos-GCC-test-GCC:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/macos.yml@main
needs: [ "integrate-macos-GCC" ]
with:
runs-on: '[ "macOS", "build", "x86_64" ]'
artifact-in: integrate-macos-GCC
cmd: |
cmake --preset integrate-macos-gcc -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-macos-gcc
cmake --build build --config Release --target test_integration
integrate-macos-GCC-test-CLANG:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/macos.yml@main
needs: [ "integrate-macos-GCC" ]
with:
runs-on: '[ "macOS", "build", "x86_64" ]'
artifact-in: integrate-macos-GCC
cmd: |
cmake --preset integrate-macos-gcc -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-macos-clang
cmake --build build --config Release --target test_integration
# TODO: cant find tbb/tbb.h ???
integrate-macos-CLANG:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/macos.yml@main
with:
runs-on: '[ "macOS", "build", "x86_64" ]'
artifact-out: integrate-macos-CLANG
artifact-path: ./build/*.zip
cmd: |
cmake --preset integrate-macos-clang -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
# cmake --build build --config Release --target post_package_notarize TODO: reactivate this when notarization problems are solved
integrate-macos-CLANG-test-GCC:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/macos.yml@main
needs: [ "integrate-macos-CLANG" ]
with:
runs-on: '[ "macOS", "build", "x86_64" ]'
artifact-in: integrate-macos-CLANG
cmd: |
cmake --preset integrate-macos-clang -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-macos-gcc
cmake --build build --config Release --target test_integration
integrate-macos-CLANG-test-CLANG:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/macos.yml@main
needs: [ "integrate-macos-CLANG" ]
with:
runs-on: '[ "macOS", "build", "x86_64" ]'
artifact-in: integrate-macos-CLANG
cmd: |
cmake --preset integrate-macos-clang -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-macos-clang
cmake --build build --config Release --target test_integration
File diff suppressed because it is too large Load Diff
+124 -84
View File
@@ -3,137 +3,177 @@
name: performance
on: [workflow_dispatch]
permissions: read-all
on:
schedule:
- cron: '00 01 * * *'
workflow_dispatch:
jobs:
########################################
# Linux build
########################################
linux-build-DG2-DPCPP:
perf-linux-SYCL-DPCPP-build:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@main
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
with:
image: embree/ubuntu:20.04
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "dg2" ]'
artifact-out: linux-DG2-DPCPP
artifact-path: ./build/*.tar.gz .ctest_conf
project: embree
env-from-files: ./.github/workflows/dpcpp-none.env ./.github/workflows/gfx-ubuntu22-public.env
dpcpp-version: intel/2023.0
artifact-out: perf-linux-SYCL-DPCPP
artifact-path: ./build/*.tar.gz
cmd: |
scripts/test.py configure platform:x64 build:Release compiler:ICX2023.0.0 EMBREE_SYCL_SUPPORT:ON sycl:none gfx:RELEASE ispc:ispc1.18.1 isas:SSE2-SSE42-AVX-AVX2-AVX512 tasking:TBB2021.7.0 intensity:4 package:ZIP
scripts/test.py build
scripts/test.py test
module load cmake/3.25.3
cmake --preset perf-linux-icx-sycl -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
linux-build-x86-ICX-ISPC:
perf-linux-DG2-A770-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@main
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: ["perf-linux-SYCL-DPCPP-build"]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "dg2", "perf", "A770" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-none.env ./.github/workflows/gfx-ubuntu22-public.env
artifact-in: perf-linux-SYCL-DPCPP
setup-benny: true
cmd: |
cd build
ls *.tar.gz
tar -xzf embree-?.?.?.sycl.x86_64.linux.tar.gz
cd bin
source ../embree-vars.sh
$GITHUB_WORKSPACE/scripts/run-perf.sh gpu
perf-linux-PVC-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: ["perf-linux-SYCL-DPCPP-build"]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "pvc", "perf" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-none.env ./.github/workflows/gfx-ubuntu22-public.env
artifact-in: perf-linux-SYCL-DPCPP
setup-benny: true
cmd: |
# Run it on single tile (disable implicit scaling)
export EnableImplicitScaling=0
export NEOReadDebugKeys=1
export ZE_FLAT_DEVICE_HIERARCHY=COMPOSITE
cd build
ls *.tar.gz
tar -xzf embree-?.?.?.sycl.x86_64.linux.tar.gz
cd bin
source ../embree-vars.sh
$GITHUB_WORKSPACE/scripts/run-perf.sh gpu
perf-linux-x86-ICX-ISPC-build:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
with:
image: embree/rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
artifact-out: linux-build-x86-ICX-ISPC
artifact-path: ./build/*.tar.gz .ctest_conf
dpcpp-version: intel/2024.1.0
artifact-out: perf-linux-x86-ICX-ISPC-build
artifact-path: ./build/*.tar.gz
cmd: |
scripts/test.py configure platform:x64 build:Release compiler:ICX2023.0.0 ispc:ispc1.18.1 isas:SSE2-SSE42-AVX-AVX2-AVX512 tasking:TBB2021.7.0 intensity:4 package:ZIP
scripts/test.py build
scripts/test.py test
module load cmake/3.25.3
cmake --preset perf-linux-icx -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
linux-test-DG2-A750-not_perf:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@main
needs: ["linux-build-DG2-DPCPP"]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "dg2" ]'
artifact-in: linux-DG2-DPCPP
cmd: |
source <(scripts/test.py env --debug)
cd build
tar -xf embree-4.0.0.sycl.x86_64.linux.tar.gz
cd embree-4.0.0.sycl.x86_64.linux
chmod +x embree-vars.sh
./embree-vars.sh
cd bin
$GITHUB_WORKSPACE/scripts/run-perf.sh gpu
linux-test-DG2-A770:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@main
needs: ["linux-build-DG2-DPCPP"]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "A770", "perf" ]'
artifact-in: linux-DG2-DPCPP
cmd: |
source <(scripts/test.py env --debug)
cd build
tar -xf embree-4.0.0.sycl.x86_64.linux.tar.gz
cd embree-4.0.0.sycl.x86_64.linux
chmod +x embree-vars.sh
./embree-vars.sh
cd bin
$GITHUB_WORKSPACE/scripts/run-perf.sh gpu
linux-test-i9-12900k:
perf-linux-i9-12900k-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/perf.yml@main
needs: ["linux-build-x86-ICX-ISPC"]
needs: ["perf-linux-x86-ICX-ISPC-build"]
with:
runs-on: '[ "Linux", "perf", "vis-perf-i9-12900k-1" ]'
artifact-in: linux-build-x86-ICX-ISPC
artifact-in: perf-linux-x86-ICX-ISPC-build
setup-benny: true
cmd: |
cd build
tar -xf embree-4.0.0.x86_64.linux.tar.gz
cd embree-4.0.0.x86_64.linux
tar -xzf embree-?.?.?.x86_64.linux.tar.gz
cd bin
$GITHUB_WORKSPACE/scripts/run-perf.sh cpu
linux-test-x8380-1:
perf-linux-x8380-1-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/perf.yml@main
needs: ["linux-build-x86-ICX-ISPC"]
needs: ["perf-linux-x86-ICX-ISPC-build"]
with:
runs-on: '[ "Linux", "perf", "vis-perf-x8380-1" ]'
artifact-in: linux-build-x86-ICX-ISPC
artifact-in: perf-linux-x86-ICX-ISPC-build
setup-benny: true
cmd: |
cd build
tar -xf embree-4.0.0.x86_64.linux.tar.gz
cd embree-4.0.0.x86_64.linux
tar -xzf embree-?.?.?.x86_64.linux.tar.gz
cd bin
$GITHUB_WORKSPACE/scripts/run-perf.sh cpu
linux-test-x8280-1:
perf-linux-x8280-1-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/perf.yml@main
needs: ["linux-build-x86-ICX-ISPC"]
needs: ["perf-linux-x86-ICX-ISPC-build"]
with:
runs-on: '[ "Linux", "perf", "vis-perf-x8280-1" ]'
artifact-in: linux-build-x86-ICX-ISPC
artifact-in: perf-linux-x86-ICX-ISPC-build
setup-benny: true
cmd: |
cd build
tar -xf embree-4.0.0.x86_64.linux.tar.gz
cd embree-4.0.0.x86_64.linux
tar -xzf embree-?.?.?.x86_64.linux.tar.gz
cd bin
$GITHUB_WORKSPACE/scripts/run-perf.sh cpu
linux-test-a3970x-1:
perf-linux-a3970x-1-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/perf.yml@main
needs: ["linux-build-x86-ICX-ISPC"]
needs: ["perf-linux-x86-ICX-ISPC-build"]
with:
runs-on: '[ "Linux", "perf", "vis-perf-a3970x-1" ]'
artifact-in: linux-build-x86-ICX-ISPC
artifact-in: perf-linux-x86-ICX-ISPC-build
setup-benny: true
cmd: |
cd build
tar -xf embree-4.0.0.x86_64.linux.tar.gz
cd embree-4.0.0.x86_64.linux
tar -xzf embree-?.?.?.x86_64.linux.tar.gz
cd bin
$GITHUB_WORKSPACE/scripts/run-perf.sh cpu
linux-DG2-A770-buildbench:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: ["perf-linux-SYCL-DPCPP-build"]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "dg2", "perf", "A770" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-none.env ./.github/workflows/gfx-ubuntu22-public.env
artifact-in: perf-linux-SYCL-DPCPP
setup-benny: true
cmd: |
cd build
ls *.tar.gz
tar -xzf embree-?.?.?.sycl.x86_64.linux.tar.gz
git clone https://github.com/intel-innersource/libraries.graphics.renderkit.embree.models.git embree-models
ls -al
source embree-vars.sh
echo "bin/embree_buildbench --legacy"
bin/embree_buildbench --legacy
echo "bin/embree_buildbench_sycl --legacy"
bin/embree_buildbench_sycl --legacy
echo "bin/embree_buildbench --legacy -c embree-models/crown/crown.ecs"
bin/embree_buildbench --legacy -c embree-models/crown/crown.ecs
echo "bin/embree_buildbench_sycl --legacy -c embree-models/crown/crown.ecs"
bin/embree_buildbench_sycl --legacy -c embree-models/crown/crown.ecs
+198 -73
View File
@@ -3,6 +3,8 @@
name: release
permissions: read-all
on:
schedule:
- cron: '00 00 * * *'
@@ -13,146 +15,269 @@ jobs:
#####################################################################
# Release Builds
####################################################################
release-windows-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP:
release-windows:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_windows.yml@main
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@main
with:
runs-on: '[ "Windows", "NAS", "build", "avx512" ]'
artifact-out: release-windows-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
artifact-path: ./build/*.zip
artifact-out: release-windows
artifact-path: ./build/embree-*.zip
dpcpp-version: intel-llvm/nightly-2023-10-26-rk
shell: cmd
cmd: |
python scripts/test.py configure platform:x64 build:Release compiler:ICX2023.0.0 ispc:ispc1.18.1 isas:SSE2-SSE42-AVX-AVX2-AVX512 tasking:TBB2021.7.0 intensity:4 package:ZIP
python scripts/test.py build
python scripts/test.py test
cmake --preset release-windows -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
cmake --build build --target test_package
release-macosx-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP:
release-macosx:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_macos.yml@main
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/macos.yml@main
with:
runs-on: '[ "macOS", "embree", "sign", "avx2" ]'
artifact-out: release-macosx-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
artifact-path: ./build/*.zip
project: embree
runs-on: '[ "macOS", "build", "x86_64" ]'
cmd: |
scripts/test.py configure platform:x64 build:Release compiler:ICX2023.0.0 ispc:ispc1.18.1 isas:SSE2-SSE42-AVX-AVX2 tasking:TBB2021.7.0 intensity:4 package:ZIP
scripts/test.py build
scripts/test.py test
source scripts/cmake-presets/macos-env.sh
cmake --preset release-macos -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
cmake --build build --target test_package
rm build/embree-*-testing.zip
notarize-package: build/embree-*.zip
artifact-out: release-macosx
artifact-path: ./build/*.zip
release-linux-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP:
verify-package-macosx:
needs: release-macosx
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_docker.yml@main
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/macos.yml@main
with:
image: embree/rockylinux:8.7
project: embree
runs-on: '[ "macOS", "build", "x86_64" ]'
artifact-in: release-macosx
cmd: |
mkdir package
tar -xzvf build/embree-* -C ./package
sign-path-verify: ./package
release-macosx-arm:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/macos.yml@main
with:
project: embree
runs-on: '[ "macOS13", "test", "arm" ]'
cmd: |
source scripts/cmake-presets/macos-env.sh
cmake --preset release-macos-arm -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
cmake --build build --target test_package
rm build/embree-*-testing.zip
notarize-package: build/embree-*.zip
artifact-out: release-macosx-arm
artifact-path: ./build/*.zip
verify-package-macosx-arm:
needs: release-macosx-arm
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/macos.yml@main
with:
project: embree
runs-on: '[ "macOS13", "test", "arm" ]'
artifact-in: release-macosx-arm
cmd: |
mkdir package
tar -xzvf build/embree-* -C ./package
sign-path-verify: ./package
release-linux:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
with:
image: rockylinux:8.7
runs-on: '[ "Linux", "docker", "avx512" ]'
artifact-out: release-linux-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
artifact-out: release-linux
artifact-path: ./build/*.tar.gz
dpcpp-version: intel-llvm/nightly-2023-10-26-rk
pre-cmd: |
yum -y install epel-release
dnf makecache --refresh
dnf config-manager --set-enabled powertools
dnf -y update
dnf -y install ninja-build
cmd: |
scripts/test.py configure platform:x64 build:Release compiler:ICX2023.0.0 ispc:ispc1.18.1 isas:SSE2-SSE42-AVX-AVX2-AVX512 tasking:TBB2021.7.0 intensity:4 package:ZIP
scripts/test.py build
scripts/test.py test
module load cmake/3.25.3
cmake --preset release-linux -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
cmake --build build --target test_package
#####################################################################
# DPC++ Release Builds
####################################################################
release-windows-x64-Release-SYCL-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP:
release-windows-sycl:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@devel
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/windows_gpu.yml@main
with:
runs-on: '[ "Windows", "NAS", "dg2" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-none.env ./.github/workflows/gfx-windows-internal.env
artifact-out: release-windows-x64-Release-SYCL-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
env-from-files: ./.github/workflows/gfx-windows-internal.env
dpcpp-version: intel-llvm/nightly-2023-10-26-rk
artifact-out: release-windows-sycl
artifact-path: ./build/*.zip
shell: cmd
cmd: |
python scripts/test.py configure platform:x64 build:Release compiler:ICX2023.0.0 EMBREE_SYCL_SUPPORT:ON sycl:none gfx:RELEASE ispc:ispc1.18.1 isas:SSE2-SSE42-AVX-AVX2-AVX512 tasking:TBB2021.7.0 intensity:4 package:ZIP
python scripts/test.py build
python scripts/test.py test
cmake --preset release-windows-sycl -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
cmake --build build --target test_package
# FIXME: remove this AOT release once JIT properly tested in CI
#release-windows-x64-Release-SYCL-ICX2023_0_0-AOT-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP:
# secrets: inherit
# uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/embree_windows.yml@main
# with:
# runs-on: '[ "Windows", "NAS", "dg2" ]'
# artifact-out: release-windows-x64-Release-SYCL-ICX2023_0_0-AOT-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
# artifact-path: ./build/*.zip
# cmd: |
# python scripts/test.py configure platform:x64 build:Release compiler:dpcpp EMBREE_SYCL_SUPPORT:ON sycl:dg2 gfx:RELEASE ispc:ispc1.18.1 isas:SSE2-SSE42-AVX-AVX2-AVX512 intensity:4 package:ZIP
# python scripts/test.py build
# python scripts/test.py test
release-linux-x64-Release-SYCL-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP:
release-linux-sycl:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@devel
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
with:
image: embree/ubuntu:20.04
image: rockylinux:8.7
runs-on: '[ "Linux", "docker", "build" ]'
project: embree
dpcpp-version: intel-llvm/nightly-2023-10-26-rk
artifact-out: release-linux-sycl
artifact-path: ./build/*.tar.gz
pre-cmd: |
yum -y install epel-release
dnf makecache --refresh
dnf config-manager --set-enabled powertools
dnf -y update
dnf -y install ninja-build
cmd: |
module load cmake/3.25.3
cmake --preset release-linux-sycl -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --target build
release-linux-sycl-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: ["release-linux-sycl"]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "dg2" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-none.env ./.github/workflows/gfx-ubuntu22-release.env
artifact-out: release-linux-x64-Release-SYCL-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
artifact-path: ./build/*.tar.gz
env-from-files: ./.github/workflows/dpcpp-none.env ./.github/workflows/gfx-ubuntu22-public.env
dpcpp-version: intel-llvm/nightly-2023-10-26-rk
artifact-in: release-linux-sycl
cmd: |
scripts/test.py configure platform:x64 build:Release compiler:ICX2023.0.0 EMBREE_SYCL_SUPPORT:ON sycl:none gfx:RELEASE ispc:ispc1.18.1 isas:SSE2-SSE42-AVX-AVX2-AVX512 tasking:TBB2021.7.0 intensity:4 package:ZIP
scripts/test.py build
scripts/test.py test
module load cmake/3.25.3
cmake --preset integrate-sycl-linux-dpcpp -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-icx
cmake --build build --target test_package
release-linux-sycl-pvc-test:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: ["release-linux-sycl"]
with:
image: embree/ubuntu:22.04
options: --device=/dev/dri:/dev/dri
runs-on: '[ "Linux", "docker", "pvc" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-none.env ./.github/workflows/gfx-ubuntu22-public.env
dpcpp-version: intel-llvm/nightly-2023-10-26-rk
artifact-in: release-linux-sycl
cmd: |
module load cmake/3.25.3
export ZE_FLAT_DEVICE_HIERARCHY=COMPOSITE
cmake --preset integrate-sycl-linux-dpcpp -DCMAKE_BUILD_TYPE=Release -DEMBREE_TESTING_INTEGRATION_PRESET=test-linux-icx
cmake --build build --target test_package
#####################################################################
# Release binaries scans
#####################################################################
binary-analysis:
needs:
- release-windows-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
- release-macosx-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
- release-linux-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
- release-windows
- release-macosx
- release-linux
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/binary_analysis.yml@main
with:
project: embree
artifact-in-windows: release-windows-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
artifact-in-macos: release-macosx-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
artifact-in-linux: release-linux-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
artifact-in-windows: release-windows
artifact-in-macos: release-macosx
artifact-in-linux: release-linux
path: "build/*.zip build/*.gz"
antivirus-scan:
needs:
- release-windows-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
- release-macosx-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
- release-linux-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
- release-windows
- release-macosx
- release-linux
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/antivirus_scan.yml@main
with:
project: embree
artifact-in-windows: release-windows-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
artifact-in-macos: release-macosx-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
artifact-in-linux: release-linux-x64-Release-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
artifact-in-windows: release-windows
artifact-in-macos: release-macosx
artifact-in-linux: release-linux
path: "build/*.zip build/*.gz"
binary-analysis-dpcpp:
needs:
- release-windows-x64-Release-SYCL-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
- release-linux-x64-Release-SYCL-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
- release-windows-sycl
- release-linux-sycl-test
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/binary_analysis.yml@main
with:
project: embree
artifact-in-windows: release-windows-x64-Release-SYCL-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
artifact-in-linux: release-linux-x64-Release-SYCL-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
artifact-in-windows: release-windows-sycl
artifact-in-linux: release-linux-sycl
path: "build/*.zip build/*.gz"
artifact-out-name: "binary-analysis-dpcpp"
antivirus-scan-dpcpp:
needs:
- release-windows-x64-Release-SYCL-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
- release-linux-x64-Release-SYCL-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
- release-windows-sycl
- release-linux-sycl-test
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/antivirus_scan.yml@main
with:
project: embree
artifact-in-windows: release-windows-x64-Release-SYCL-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
artifact-in-linux: release-linux-x64-Release-SYCL-ICX2023_0_0-ISPC1_18_1-TBB2021_7_0-PACKAGE-ZIP
artifact-in-windows: release-windows-sycl
artifact-in-linux: release-linux-sycl
path: "build/*.zip build/*.gz"
artifact-out-name: "antivirus-scan-dpcpp"
binary-analysis-arm:
needs:
- release-macosx-arm
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/binary_analysis.yml@main
with:
project: embree
artifact-in-macos: release-macosx-arm
path: "build/*.zip"
artifact-out-name: "binary-analysis-arm"
antivirus-scan-arm:
needs:
- release-macosx-arm
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/antivirus_scan.yml@main
with:
project: embree
artifact-in-macos: release-macosx-arm
path: "build/*.zip"
artifact-out-name: "antivirus-scan-arm"
#####################################################################
# Testing package
#####################################################################
test-package:
secrets: inherit
uses: intel-innersource/libraries.devops.renderkit.workflows/.github/workflows/docker_gpu.yml@main
needs: [release-linux]
with:
image: embree/ubuntu:22.04
runs-on: '[ "Linux", "docker", "dg2" ]'
project: embree
env-from-files: ./.github/workflows/dpcpp-none.env ./.github/workflows/gfx-ubuntu22-public.env
artifact-in: release-linux
artifact-out: release-testing-PACKAGE-ZIP
artifact-path: ./build/*.tar.gz
cmd: |
rm build/embree-4.3.2.x86_64.linux.tar.gz
mv build/embree-4.3.2.x86_64.linux-testing.tar.gz build/embree-4.3.2-testing.tar.gz
+1
View File
@@ -9,3 +9,4 @@ kernels/config.h
kernels/hash.h
include/embree4/rtcore_config.h
build
out
+43
View File
@@ -1,6 +1,49 @@
Version History
---------------
### Embree 4.3.2
- MacOS universal binary compilation now works.
- Some bugfixes for AVX512 on MacOS x86 machines.
- Embree now uses level zero raytracing extension to build BVH which enables forward-compatibility.
### Embree 4.3.1
- Add missing EMBREE_GEOMETRY types to embree-config.cmake
- User defined thread count now takes precedence for internal task scheduler
- Fixed static linking issue with ze_wrapper library
- Better error reporting for SYCL platform and driver problems in embree_info and tutorial apps.
- Patch to glfw source is not applied by default anymore.
- Known issue: Running Embree on Intel® Data Center GPU Max Series with 2 tiles (e.g. Intel® Data Center GPU Max 1550) requires setting the environment variable ZE_FLAT_DEVICE_HIERARCHY=COMPOSITE.
- Known issue: Embree build using Apple Clang 15 and ARM support (via the SEE2NEON library) may cause "EXEC_BAD_INSTRUCTION" runtime exceptions. Please use Apple Clang <= 14 on macOS.
### Embree 4.3.0
- Added instance array primitive for reducing memony requirements in scenes
with large amounts of similar instances.
- Properly checks driver if L0 RTAS extension can get loaded.
- Added varying version of rtcGetGeometryTransform for ISPC.
- Fixed signature of RTCMemoryMonitorFunction for ISPC.
- Add support for ARM64 Windows platform in CMake.
### Embree 4.2.0
- SYCL version of Embree with GPU support is no longer in beta phase.
- Improved BVH build performance on many core machines for applications that oversubscribe threads.
- Added rtcGetGeometryTransformFromScene API function that can get used inside SYCL kernels.
- No longer linking to ze_loader in SYCL mode to avoid Intel(R) oneAPI Level Zero dependency
for CPU rendering.
- Releasing test package to test Embree.
### Embree 4.1.0
- Added support for Intel® Data Center GPU Max Series.
- Added ARM64 Linux support.
- Added EMBREE_BACKFACE_CULLING_SPHERES cmake option. The new cmake option defaults to OFF.
### Embree 4.0.1
- Improved performance for Tiger Lake, Comet Lake, Cannon Lake, Kaby Lake,
and Skylake client CPUs by using 256 bit SIMD instructions by default.
- Fixed broken motion blur of RTC_GEOMETRY_TYPE_ROUND_LINEAR_CURVE geometry type.
- Fixed bvh build retry issue for TBB 2020.3
- Added support for Intel® Data Center GPU Flex Series
- Fixed issue on systems without a SYCL platform.
### Embree 4.0.0
- This Embree release adds support for Intel® Arc™ GPUs through SYCL.
- The SYCL support of Embree is in beta phase. Current functionality, quality,
+32 -35
View File
@@ -1,16 +1,12 @@
## Copyright 2009-2021 Intel Corporation
## SPDX-License-Identifier: Apache-2.0
CMAKE_MINIMUM_REQUIRED(VERSION 3.1.0)
CMAKE_MINIMUM_REQUIRED(VERSION 3.5)
SET(EMBREE_VERSION_MAJOR 4)
SET(EMBREE_VERSION_MINOR 0)
SET(EMBREE_VERSION_PATCH 1)
IF (EMBREE_SYCL_SUPPORT)
SET(EMBREE_VERSION_NOTE "-beta") # Embree SYCL version is in beta phase
ELSE()
SET(EMBREE_VERSION_NOTE "")
ENDIF()
SET(EMBREE_VERSION_MINOR 3)
SET(EMBREE_VERSION_PATCH 2)
SET(EMBREE_VERSION_NOTE "")
SET(EMBREE_VERSION ${EMBREE_VERSION_MAJOR}.${EMBREE_VERSION_MINOR}.${EMBREE_VERSION_PATCH})
MATH(EXPR EMBREE_VERSION_NUMBER "10000*${EMBREE_VERSION_MAJOR} + 100*${EMBREE_VERSION_MINOR} + ${EMBREE_VERSION_PATCH}")
@@ -76,7 +72,13 @@ IF(COMMAND cmake_policy)
if(POLICY CMP0074)
cmake_policy(SET CMP0074 NEW)
endif()
ENDIF(COMMAND cmake_policy)
if(POLICY CMP0135)
cmake_policy(SET CMP0135 NEW)
endif()
if(POLICY CMP0057)
cmake_policy(SET CMP0057 NEW)
endif()
ENDIF()
MARK_AS_ADVANCED(CMAKE_BACKWARDS_COMPATIBILITY)
MARK_AS_ADVANCED(EXECUTABLE_OUTPUT_PATH)
@@ -89,9 +91,7 @@ MARK_AS_ADVANCED(CLEAR CMAKE_CXX_COMPILER)
SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/common/cmake" ${CMAKE_MODULE_PATH})
IF (BUILD_TESTING)
INCLUDE(test)
ENDIF()
INCLUDE(test)
set(BUILD_DOC OFF CACHE INTERNAL "build documentation (internal only)")
IF (BUILD_DOC)
@@ -145,14 +145,6 @@ OPTION(EMBREE_STACK_PROTECTOR "When enabled Embree compiles with stack protectio
IF (NOT APPLE)
OPTION(EMBREE_SYCL_SUPPORT "Enables SYCL GPU support." OFF)
IF (EMBREE_SYCL_SUPPORT)
MESSAGE(WARNING
"==================================================================================\n"
" The SYCL support of Embree is in beta phase. Current functionality, quality, \n"
" and GPU performance may not reflect that of the final product. Please read the \n"
" documentation section \"Embree SYCL Known Issues\" for known limitations. \n"
"==================================================================================\n")
ENDIF()
ENDIF()
CMAKE_DEPENDENT_OPTION(EMBREE_SYCL_LARGEGRF "Enables SYCL large GRF support." OFF "EMBREE_SYCL_SUPPORT" OFF)
CMAKE_DEPENDENT_OPTION(EMBREE_SYCL_DBG "Enables DPC++ debug info." OFF "EMBREE_SYCL_SUPPORT" OFF)
@@ -170,12 +162,6 @@ IF (EMBREE_SYCL_SUPPORT)
ADD_DEFINITIONS("-DEMBREE_SYCL_SUPPORT") # FIXME: only use define from rtcore_config.h
ENDIF()
OPTION(EMBREE_SYCL_GPU_BVH_BUILDER "Using fast GPU-based BVH builder" OFF)
IF (EMBREE_SYCL_GPU_BVH_BUILDER)
SET(EMBREE_STATIC_LIB ON)
ADD_DEFINITIONS("-DEMBREE_SYCL_GPU_BVH_BUILDER")
ENDIF()
CMAKE_DEPENDENT_OPTION(EMBREE_SYCL_RT_SIMULATION "Using hardware simulation" OFF "EMBREE_SYCL_SUPPORT" OFF)
MARK_AS_ADVANCED(EMBREE_SYCL_RT_SIMULATION)
IF (EMBREE_SYCL_RT_SIMULATION AND NOT EMBREE_SYCL_RT_VALIDATION_API AND EMBREE_SYCL_IMPLICIT_DISPATCH_GLOBALS)
@@ -186,13 +172,12 @@ IF (EMBREE_SYCL_RT_SIMULATION)
ENDIF()
CMAKE_DEPENDENT_OPTION(EMBREE_SYCL_RT_VALIDATION_API "Use rt_validation API instead of IGC provided rt_production API" OFF "EMBREE_SYCL_SUPPORT" OFF)
IF (EMBREE_SYCL_RT_VALIDATION_API)
ADD_DEFINITIONS("-DEMBREE_SYCL_RT_VALIDATION_API")
ENDIF()
CMAKE_DEPENDENT_OPTION(EMBREE_SYCL_IMPLICIT_DISPATCH_GLOBALS "Using L0 allocated Dispatch Globals" ON "EMBREE_SYCL_RT_VALIDATION_API" OFF)
IF (NOT EMBREE_SYCL_IMPLICIT_DISPATCH_GLOBALS)
IF (EMBREE_SYCL_RT_VALIDATION_API AND NOT EMBREE_SYCL_IMPLICIT_DISPATCH_GLOBALS)
ADD_DEFINITIONS("-DEMBREE_SYCL_ALLOC_DISPATCH_GLOBALS")
ENDIF()
@@ -209,8 +194,15 @@ IF (EMBREE_SYCL_SUPPORT)
ENDIF()
ENDIF()
CMAKE_DEPENDENT_OPTION(EMBREE_SYCL_L0_RTAS_BUILDER "Enable Level Zero RTAS builder" ON "EMBREE_SYCL_SUPPORT" OFF)
IF (EMBREE_SYCL_L0_RTAS_BUILDER)
ADD_DEFINITIONS("-DEMBREE_SYCL_L0_RTAS_BUILDER")
ENDIF()
OPTION(EMBREE_RAY_MASK "Enables ray mask support." ON)
OPTION(EMBREE_BACKFACE_CULLING "Enables backface culling.")
OPTION(EMBREE_BACKFACE_CULLING_CURVES "Enables backface culling for curve primitives." OFF)
OPTION(EMBREE_BACKFACE_CULLING_SPHERES "Enables backface culling for sphere primitives." OFF)
OPTION(EMBREE_FILTER_FUNCTION "Enables filter functions." ON)
OPTION(EMBREE_IGNORE_INVALID_RAYS "Ignores invalid rays." OFF) # FIXME: enable by default?
@@ -221,10 +213,11 @@ OPTION(EMBREE_GEOMETRY_CURVE "Enables support for curve geometries." ON)
OPTION(EMBREE_GEOMETRY_SUBDIVISION "Enables support for subdiv geometries." ON)
OPTION(EMBREE_GEOMETRY_USER "Enables support for user geometries." ON)
OPTION(EMBREE_GEOMETRY_INSTANCE "Enables support for instances." ON)
OPTION(EMBREE_GEOMETRY_INSTANCE_ARRAY "Enables support for instance arrays." ON)
SET(EMBREE_MAX_INSTANCE_LEVEL_COUNT 1 CACHE STRING "Maximum number of instance levels.")
IF (NOT EMBREE_GEOMETRY_INSTANCE AND NOT EMBREE_MAX_INSTANCE_LEVEL_COUNT EQUAL 1)
message(FATAL_ERROR "EMBREE_MAX_INSTANCE_LEVEL_COUNT must be 1 when EMBREE_GEOMETRY_INSTANCE is disabled")
IF (NOT EMBREE_GEOMETRY_INSTANCE AND NOT EMBREE_GEOMETRY_INSTANCE_ARRAY AND NOT EMBREE_MAX_INSTANCE_LEVEL_COUNT EQUAL 1)
message(FATAL_ERROR "EMBREE_MAX_INSTANCE_LEVEL_COUNT must be 1 when EMBREE_GEOMETRY_INSTANCE and EMBREE_GEOMETRY_INSTANCE_ARRAY are disabled")
ENDIF()
OPTION(EMBREE_GEOMETRY_GRID "Enables support for grid geometries." ON)
@@ -242,10 +235,10 @@ OPTION(EMBREE_MIN_WIDTH "Enables min-width feature to enlarge curve and point th
##############################################################
# detect ARM compilation
IF (APPLE AND CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND (CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" OR CMAKE_OSX_ARCHITECTURES MATCHES "arm64"))
IF (APPLE AND CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND (CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" AND CMAKE_OSX_ARCHITECTURES STREQUAL "") OR ("arm64" IN_LIST CMAKE_OSX_ARCHITECTURES))
MESSAGE(STATUS "Building for Apple silicon")
SET(EMBREE_ARM ON)
ELSEIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
ELSEIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64")
MESSAGE(STATUS "Building for AArch64")
SET(EMBREE_ARM ON)
ENDIF()
@@ -301,6 +294,9 @@ message(DEBUG "CMAKE_GENERATOR_TOOLSET: ${CMAKE_GENERATOR_TOOLSET}")
message(DEBUG "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}")
message(DEBUG "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag(-fsycl COMPILER_HAS_SYCL_SUPPORT)
IF (WIN32)
IF (NOT DEFAULT_CMAKE_CONFIGURATION_TYPES_SET)
SET(CMAKE_CONFIGURATION_TYPES "${CONFIGURATION_TYPES}" CACHE STRING "List of generated configurations." FORCE)
@@ -309,8 +305,7 @@ IF (WIN32)
SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)
IF ((${CMAKE_CXX_COMPILER_ID} MATCHES "IntelLLVM") OR
(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND ${CMAKE_CXX_COMPILER} MATCHES "icx") OR
(${CMAKE_CXX_COMPILER} MATCHES "dpcpp"))
(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND COMPILER_HAS_SYCL_SUPPORT))
MESSAGE("-- DPCPP compiler detected")
INCLUDE(dpcpp)
ELSEIF(${CMAKE_GENERATOR_TOOLSET} MATCHES "^LLVM")
@@ -418,6 +413,9 @@ IF (EMBREE_MAX_ISA STREQUAL "NONE")
ELSE()
OPTION(EMBREE_ISA_AVX512 "Enables AVX512 ISA." ${COMPILER_SUPPORTS_AVX512})
ENDIF()
# Don't use OPTION, but still set them to OFF, so that embree-config.cmake is consisten with its definitions
SET(EMBREE_ISA_NEON OFF)
SET(EMBREE_ISA_NEON2X OFF)
ENDIF()
ELSEIF (EMBREE_MAX_ISA STREQUAL "DEFAULT")
@@ -715,4 +713,3 @@ ENDIF()
##############################################################
INCLUDE(CPack)
+103
View File
@@ -0,0 +1,103 @@
{
"version": 4,
"cmakeMinimumRequired": {
"major": 3,
"minor": 11,
"patch": 0
},
"include": [
"scripts/cmake-presets/os.json",
"scripts/cmake-presets/package.json",
"scripts/cmake-presets/compiler.json",
"scripts/cmake-presets/tbb.json",
"scripts/cmake-presets/continuous.json",
"scripts/cmake-presets/nightly.json",
"scripts/cmake-presets/release.json",
"scripts/cmake-presets/integrate.json",
"scripts/cmake-presets/performance.json"
],
"configurePresets": [
{
"name": "package-linux-icx-ispc1_19_0-tbb2021_9_0-perf",
"inherits": ["package-linux", "env", "icx", "ispc1_19_0", "tbb2021_9_0"],
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"EMBREE_MAX_ISA": "AVX512",
"EMBREE_USE_GOOGLE_BENCHMARK": "ON",
"EMBREE_BUILD_GOOGLE_BENCHMARK_FROM_SOURCE": "ON"
}
},
{
"name": "package-linux-icx-sycl-ispc1_19_0-tbb2021_9_0-perf",
"inherits": ["package-linux", "env", "icx", "ispc1_19_0", "tbb2021_9_0"],
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"EMBREE_SYCL_SUPPORT": "ON",
"EMBREE_SYCL_L0_RTAS_BUILDER" : "OFF",
"EMBREE_SYCL_AOT_DEVICES": "none",
"EMBREE_MAX_ISA": "AVX512",
"EMBREE_USE_GOOGLE_BENCHMARK": "ON",
"EMBREE_BUILD_GOOGLE_BENCHMARK_FROM_SOURCE": "ON"
}
},
{
"name": "package-windows-v141-ispc1_19_0-tbb2021_9_0",
"inherits": ["package-windows", "env", "v141", "ispc1_19_0", "tbb2021_9_0"],
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"EMBREE_MAX_ISA": "SSE2"
}
},
{
"name": "package-windows-v140-ispc1_19_0-tbb2021_9_0",
"inherits": ["package-windows", "env", "v140", "ispc1_19_0", "tbb2021_9_0"],
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"EMBREE_MAX_ISA": "SSE2"
}
},
{
"name": "package-windows-icx-sycl-ispc1_19_0-tbb2021_9_0",
"inherits": ["package-windows", "env", "icx-windows", "ispc1_19_0", "tbb2021_9_0"],
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"EMBREE_SYCL_SUPPORT": "ON",
"EMBREE_SYCL_L0_RTAS_BUILDER" : "OFF",
"EMBREE_SYCL_AOT_DEVICES": "none",
"EMBREE_MAX_ISA": "AVX512"
}
},
{
"name": "linux-coverity",
"inherits": ["package-linux", "env", "gcc", "tasking_internal"],
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"EMBREE_MAX_ISA": "SSE2"
}
}
]
}
+781 -278
View File
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -12,7 +12,8 @@ namespace embree
template<typename Index, class UnaryPredicate>
__forceinline bool parallel_any_of (Index first, Index last, UnaryPredicate pred)
{
bool ret = false;
std::atomic_bool ret;
ret = false;
#if defined(TASKING_TBB)
#if TBB_INTERFACE_VERSION >= 12002
+1 -1
View File
@@ -37,7 +37,7 @@
#===============================================================================
# We use INTERFACE libraries, which are only supported in 3.x
cmake_minimum_required(VERSION 3.1)
cmake_minimum_required(VERSION 3.5)
# These two are used to automatically find the root and include directories.
set(_TBB_INCLUDE_SUBDIR "include")
+14 -5
View File
@@ -8,10 +8,19 @@ MACRO(_SET_IF_EMPTY VAR VALUE)
ENDMACRO()
IF (EMBREE_ARM)
SET(FLAGS_SSE2 "-D__SSE__ -D__SSE2__")
SET(FLAGS_SSE42 "-D__SSE4_2__ -D__SSE4_1__")
SET(FLAGS_AVX "-D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__")
SET(FLAGS_AVX2 "-D__AVX2__ -D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__")
IF ("x86_64" IN_LIST CMAKE_OSX_ARCHITECTURES)
# set ARM an x86 flags for macOS universal binary build
SET(FLAGS_SSE2 "-D__SSE__ -D__SSE2__ -msse -msse2 -mno-sse4.2")
SET(FLAGS_SSE42 "-D__SSE4_2__ -D__SSE4_1__ -msse4.2")
SET(FLAGS_AVX "-D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__ -mavx")
SET(FLAGS_AVX2 "-D__AVX2__ -D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__ -mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2")
_SET_IF_EMPTY(FLAGS_AVX512 "-march=skx")
ELSE ()
SET(FLAGS_SSE2 "-D__SSE__ -D__SSE2__")
SET(FLAGS_SSE42 "-D__SSE4_2__ -D__SSE4_1__")
SET(FLAGS_AVX "-D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__")
SET(FLAGS_AVX2 "-D__AVX2__ -D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__")
ENDIF ()
ELSE ()
# for `thread` keyword
_SET_IF_EMPTY(FLAGS_SSE2 "-msse -msse2 -mno-sse4.2")
@@ -109,7 +118,7 @@ ELSE()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions") # enable exceptions
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") # enable threads
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msimd128") # enable SIMD intrinsics
ENDIF()
ENDIF()
SET(CMAKE_CXX_FLAGS_DEBUG "")
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g") # generate debug information
View File
+9 -2
View File
@@ -20,8 +20,6 @@ IF (NOT WIN32)
ENDIF()
ENDIF()
OPTION(EMBREE_LEVEL_ZERO "Use level zero API" OFF)
GET_FILENAME_COMPONENT(SYCL_COMPILER_DIR ${CMAKE_CXX_COMPILER} PATH)
GET_FILENAME_COMPONENT(SYCL_COMPILER_NAME ${CMAKE_CXX_COMPILER} NAME_WE)
IF (NOT SYCL_COMPILER_NAME STREQUAL "clang++")
@@ -74,6 +72,7 @@ IF (EMBREE_SYCL_SUPPORT)
${SYCL_COMPILER_LIB_DIR}/sycl[0-9].lib
${SYCL_COMPILER_LIB_DIR}/sycl[0-9][0-9].lib)
ENDIF()
LIST(GET SYCL_LIB 0 SYCL_LIB)
GET_FILENAME_COMPONENT(SYCL_LIB_NAME ${SYCL_LIB} NAME_WE)
ELSE()
SET(SYCL_LIB_NAME "sycl")
@@ -145,10 +144,16 @@ IF (EMBREE_SYCL_SUPPORT)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-pessimizing-move") # disabled: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]
IF (SYCL_ONEAPI_ICX AND WIN32)
IF (${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER_EQUAL 2024.0)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I\"${SYCL_COMPILER_DIR}/../opt/compiler/include/sycl\" -I\"${SYCL_COMPILER_DIR}/../opt/compiler/include/sycl/sycl\"") # disable warning from SYCL header
ENDIF()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I\"${SYCL_COMPILER_DIR}/../include/sycl\" -I\"${SYCL_COMPILER_DIR}/../include/\"") # disable warning from SYCL header
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qstd=c++17")
ELSE()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
IF (SYCL_ONEAPI_ICX AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER_EQUAL 2024.0)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem \"${SYCL_COMPILER_DIR}/../opt/compiler/include/sycl\" -isystem \"${SYCL_COMPILER_DIR}/../opt/compiler/include/sycl/sycl\"") # disable warning from SYCL header
ENDIF()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem \"${SYCL_COMPILER_DIR}/../include/sycl\" -isystem \"${SYCL_COMPILER_DIR}/../include/\"") # disable warning from SYCL header
ENDIF()
@@ -168,6 +173,8 @@ IF(SYCL_ONEAPI_ICX)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Qimf-use-svml:false")
SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} /Qno-intel-lib")
SET(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} /Qno-intel-lib")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /Qoption,link,/DEPENDENTLOADFLAG:0x2000")
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /Qoption,link,/DEPENDENTLOADFLAG:0x2000")
ELSE()
SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -static-intel")
SET(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -static-intel")
+11 -2
View File
@@ -22,6 +22,7 @@ SET(EMBREE_ISA_AVX2 @EMBREE_ISA_AVX2@)
SET(EMBREE_ISA_AVX512 @EMBREE_ISA_AVX512@)
SET(EMBREE_ISA_AVX512SKX @EMBREE_ISA_AVX512@) # just for compatibility
SET(EMBREE_ISA_NEON @EMBREE_ISA_NEON@)
SET(EMBREE_ISA_NEON2X @EMBREE_ISA_NEON2X@)
SET(EMBREE_BUILD_TYPE @CMAKE_BUILD_TYPE@)
SET(EMBREE_ISPC_SUPPORT @EMBREE_ISPC_SUPPORT@)
@@ -44,6 +45,9 @@ SET(EMBREE_GEOMETRY_QUAD @EMBREE_GEOMETRY_QUAD@)
SET(EMBREE_GEOMETRY_CURVE @EMBREE_GEOMETRY_CURVE@)
SET(EMBREE_GEOMETRY_SUBDIVISION @EMBREE_GEOMETRY_SUBDIVISION@)
SET(EMBREE_GEOMETRY_USER @EMBREE_GEOMETRY_USER@)
SET(EMBREE_GEOMETRY_INSTANCE @EMBREE_GEOMETRY_INSTANCE@)
SET(EMBREE_GEOMETRY_INSTANCE_ARRAY @EMBREE_GEOMETRY_INSTANCE_ARRAY@)
SET(EMBREE_GEOMETRY_GRID @EMBREE_GEOMETRY_GRID@)
SET(EMBREE_GEOMETRY_POINT @EMBREE_GEOMETRY_POINT@)
SET(EMBREE_RAY_PACKETS @EMBREE_RAY_PACKETS@)
@@ -52,8 +56,6 @@ SET(EMBREE_CURVE_SELF_INTERSECTION_AVOIDANCE_FACTOR @EMBREE_CURVE_SELF_INTERSECT
SET(EMBREE_DISC_POINT_SELF_INTERSECTION_AVOIDANCE @EMBREE_DISC_POINT_SELF_INTERSECTION_AVOIDANCE@)
SET(EMBREE_MIN_WIDTH @EMBREE_MIN_WIDTH@)
SET(EMBREE_SYCL_GPU_BVH_BUILDER @EMBREE_SYCL_GPU_BVH_BUILDER@)
IF (EMBREE_STATIC_LIB AND (EMBREE_TASKING_SYSTEM STREQUAL "TBB"))
INCLUDE(CMakeFindDependencyMacro)
FIND_DEPENDENCY(TBB)
@@ -95,9 +97,16 @@ IF (EMBREE_SYCL_SUPPORT)
ENDIF()
IF (EMBREE_STATIC_LIB)
INCLUDE("${EMBREE_ROOT_DIR}/@EMBREE_CMAKEEXPORT_DIR@/embree_rthwif-targets.cmake")
INCLUDE("${EMBREE_ROOT_DIR}/@EMBREE_CMAKEEXPORT_DIR@/ze_wrapper-targets.cmake")
ENDIF()
INCLUDE("${EMBREE_ROOT_DIR}/@EMBREE_CMAKEEXPORT_DIR@/embree_sycl-targets.cmake")
ENDIF()
INCLUDE("${EMBREE_ROOT_DIR}/@EMBREE_CMAKEEXPORT_DIR@/embree-targets.cmake")
SET(EMBREE_TESTING_ONLY_SYCL_TESTS @EMBREE_TESTING_ONLY_SYCL_TESTS@)
SET(EMBREE_TESTING_INTENSITY @EMBREE_TESTING_INTENSITY@)
SET(EMBREE_TESTING_MEMCHECK @EMBREE_TESTING_MEMCHECK@)
SET(EMBREE_TESTING_BENCHMARK @EMBREE_TESTING_BENCHMARK@)
+2 -2
View File
@@ -39,8 +39,6 @@ IF (NOT EMBREE_ISPC_EXECUTABLE)
FIND_PROGRAM(EMBREE_ISPC_EXECUTABLE ispc PATHS ${ISPC_DIR_HINT} DOC "Path to the ISPC executable.")
IF (NOT EMBREE_ISPC_EXECUTABLE)
MESSAGE(FATAL_ERROR "Intel SPMD Compiler (ISPC) not found. Disable EMBREE_ISPC_SUPPORT or install ISPC.")
ELSE()
MESSAGE(STATUS "Found Intel SPMD Compiler (ISPC): ${EMBREE_ISPC_EXECUTABLE}")
ENDIF()
ENDIF()
@@ -51,6 +49,8 @@ EXECUTE_PROCESS(COMMAND ${EMBREE_ISPC_EXECUTABLE} --version
IF (NOT ${ISPC_RESULT} STREQUAL "0")
MESSAGE(FATAL_ERROR "Error executing ISPC executable '${EMBREE_ISPC_EXECUTABLE}': ${ISPC_RESULT}")
ELSE()
MESSAGE(STATUS "Found working Intel SPMD Compiler (ISPC): ${EMBREE_ISPC_EXECUTABLE}")
ENDIF()
STRING(REGEX MATCH "([0-9]+[.][0-9]+[.][0-9]+)" DUMMY "${ISPC_OUTPUT}")
+3
View File
@@ -22,6 +22,9 @@ MACRO(DISABLE_STACK_PROTECTOR_FOR_FILE file)
ENDIF()
ENDMACRO()
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEPENDENTLOADFLAG:0x2000")
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEPENDENTLOADFLAG:0x2000")
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${COMMON_CXX_FLAGS}")
STRING(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}) # disable native runtime checks
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /DDEBUG") # enables assertions
+68 -27
View File
@@ -39,7 +39,8 @@ IF (EMBREE_SYCL_SUPPORT AND EMBREE_INSTALL_DEPENDENCIES)
"${DPCPP_COMPILER_DIR}/../bin/sycl?.dll")
INSTALL(FILES ${LIB_SYCL_DLL_FILES} DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib)
INSTALL(FILES "${DPCPP_COMPILER_DIR}/../bin/pi_level_zero.dll" DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib)
INSTALL(FILES "${DPCPP_COMPILER_DIR}/pi_level_zero.dll" DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib)
INSTALL(FILES "${DPCPP_COMPILER_DIR}/win_proxy_loader.dll" DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib OPTIONAL)
IF (EXISTS "${DPCPP_COMPILER_DIR}/../redist/intel64_win/compiler/svml_dispmd.dll")
INSTALL(FILES "${DPCPP_COMPILER_DIR}/../redist/intel64_win/compiler/svml_dispmd.dll" DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib)
@@ -47,14 +48,21 @@ IF (EMBREE_SYCL_SUPPORT AND EMBREE_INSTALL_DEPENDENCIES)
IF (EXISTS "${DPCPP_COMPILER_DIR}/../redist/intel64_win/compiler/libmmd.dll")
INSTALL(FILES "${DPCPP_COMPILER_DIR}/../redist/intel64_win/compiler/libmmd.dll" DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib)
ENDIF()
IF (EXISTS "${DPCPP_COMPILER_DIR}/libmmd.dll")
INSTALL(FILES "${DPCPP_COMPILER_DIR}/libmmd.dll" DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib)
ENDIF()
IF (EXISTS "${DPCPP_COMPILER_DIR}/pi_win_proxy_loader.dll")
INSTALL(FILES "${DPCPP_COMPILER_DIR}/pi_win_proxy_loader.dll" DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib)
ENDIF()
ELSE()
FILE(GLOB LIB_SYCL_FILES LIST_DIRECTORIES FALSE
"${DPCPP_COMPILER_DIR}/../lib/libsycl.so"
"${DPCPP_COMPILER_DIR}/../lib/libsycl.so.?"
"${DPCPP_COMPILER_DIR}/../lib/libsycl.so.?.?"
"${DPCPP_COMPILER_DIR}/../lib/libsycl.so.?.?.?")
"${DPCPP_COMPILER_DIR}/../lib/libsycl.so.?.?.?"
"${DPCPP_COMPILER_DIR}/../lib/libsycl.so.?.?.?-?")
INSTALL(FILES ${LIB_SYCL_FILES} DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib)
INSTALL(FILES "${DPCPP_COMPILER_DIR}/../lib/libpi_level_zero.so" DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib)
@@ -88,6 +96,9 @@ IF (WIN32)
IF (EXISTS "${DPCPP_COMPILER_DIR}/../redist/intel64_win/compiler/libmmd.dll")
INSTALL(FILES "${DPCPP_COMPILER_DIR}/../redist/intel64_win/compiler/libmmd.dll" DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib)
ENDIF()
IF (EXISTS "${DPCPP_COMPILER_DIR}//libmmd.dll")
INSTALL(FILES "${DPCPP_COMPILER_DIR}/libmmd.dll" DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib)
ENDIF()
IF (EXISTS "${DPCPP_COMPILER_DIR}/../redist/intel64_win/compiler/svml_dispmd.dll")
INSTALL(FILES "${DPCPP_COMPILER_DIR}/../redist/intel64_win/compiler/svml_dispmd.dll" DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib)
ENDIF()
@@ -233,6 +244,7 @@ SET(CPACK_PACKAGE_NAME "Intel(R) Embree Ray Tracing Kernels")
SET(CPACK_PACKAGE_FILE_NAME "embree-${EMBREE_VERSION}${EMBREE_VERSION_NOTE}")
IF (EMBREE_SYCL_SUPPORT)
SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}.sycl")
SET(EMBREE_VERSION_SUFFIX)
ENDIF()
#SET(CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/embree-doc/images/icon.png")
#SET(CPACK_PACKAGE_RELOCATABLE TRUE)
@@ -245,14 +257,25 @@ SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Intel(R) Embree implements high performan
SET(CPACK_PACKAGE_VENDOR "Intel Corporation")
SET(CPACK_PACKAGE_CONTACT embree_support@intel.com)
SET(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
SET(CPACK_COMPONENTS_GROUPING ONE_PER_GROUP)
SET(CPACK_COMPONENT_LIB_DISPLAY_NAME "Library")
SET(CPACK_COMPONENT_LIB_DESCRIPTION "The Embree library including documentation.")
SET(CPACK_COMPONENT_LIB_GROUP "embree")
SET(CPACK_COMPONENT_DEVEL_DISPLAY_NAME "Development")
SET(CPACK_COMPONENT_DEVEL_DESCRIPTION "Header Files for C and ISPC required to develop applications with Embree.")
SET(CPACK_COMPONENT_DEVEL_GROUP "embree")
SET(CPACK_COMPONENT_EXAMPLES_DISPLAY_NAME "Examples")
SET(CPACK_COMPONENT_EXAMPLES_DESCRIPTION "Tutorials demonstrating how to use Embree.")
SET(CPACK_COMPONENT_EXAMPLES_GROUP "embree")
SET(CPACK_COMPONENT_TESTING_DISPLAY_NAME "Testing")
SET(CPACK_COMPONENT_TESTING_DESCRIPTION "Models and reference images for tests")
SET(CPACK_COMPONENT_TESTING_GROUP "embree-testing")
# dependencies between components
#SET(CPACK_COMPONENT_DEVEL_DEPENDS lib)
@@ -265,7 +288,6 @@ SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE.txt")
# Windows specific settings
IF(WIN32)
IF (CMAKE_SIZEOF_VOID_P EQUAL 8)
SET(ARCH x64)
SET(CPACK_PACKAGE_NAME "${CPACK_PACKAGE_NAME} x64")
@@ -276,11 +298,8 @@ IF(WIN32)
SET(CPACK_GENERATOR ZIP)
SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}.${ARCH}.windows")
SET(CPACK_MONOLITHIC_INSTALL 1)
IF (EMBREE_TESTING_PACKAGE)
SET(PACKAGE_SCRIPT "${PROJECT_SOURCE_DIR}/scripts/package_win.bat")
ADD_TEST(NAME "BuildPackage" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" COMMAND ${PACKAGE_SCRIPT} ${CMAKE_BUILD_TYPE} "${CPACK_PACKAGE_FILE_NAME}.zip")
ENDIF()
SET(PACKAGE_BASE_NAME "${CPACK_PACKAGE_FILE_NAME}")
SET(PACKAGE_EXT "zip")
# MacOSX specific settings
ELSEIF(APPLE)
@@ -289,30 +308,52 @@ ELSEIF(APPLE)
SET(CPACK_RESOURCE_FILE_README "${PROJECT_BINARY_DIR}/README.txt")
SET(CPACK_GENERATOR ZIP)
SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}.x86_64.macosx")
SET(CPACK_MONOLITHIC_INSTALL 1)
IF (EMBREE_TESTING_PACKAGE)
ADD_TEST(NAME "BuildPackage" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" COMMAND "${PROJECT_SOURCE_DIR}/scripts/package_macosx.sh" ${CMAKE_BUILD_TYPE} "${CPACK_PACKAGE_FILE_NAME}.zip" "${EMBREE_SIGN_FILE}")
IF (EMBREE_ARM)
SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}.arm64.macosx")
ELSE()
SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}.x86_64.macosx")
ENDIF()
SET(PACKAGE_BASE_NAME "${CPACK_PACKAGE_FILE_NAME}")
SET(PACKAGE_EXT "zip")
add_custom_target(
post_package_notarize "${PROJECT_SOURCE_DIR}/scripts/package_post_build_notarize_macosx.sh" ${PACKAGE_BASE_NAME} ${EMBREE_SIGN_FILE}
)
# Linux specific settings
ELSE()
SET(CPACK_GENERATOR TGZ)
SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}.x86_64.linux")
SET(CPACK_MONOLITHIC_INSTALL 1)
IF (EMBREE_TESTING_PACKAGE)
IF (EMBREE_SYCL_SUPPORT)
SET(PACKAGE_SCRIPT "${PROJECT_SOURCE_DIR}/scripts/package_linux_dpcpp.sh")
ELSE()
SET(PACKAGE_SCRIPT "${PROJECT_SOURCE_DIR}/scripts/package_linux.sh")
ENDIF()
ADD_TEST(NAME "BuildPackage" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" COMMAND ${PACKAGE_SCRIPT}
${EMBREE_ZIP_MODE} ${EMBREE_LIBRARY_NAME} ${EMBREE_VERSION} ${EMBREE_VERSION_MAJOR} "${EMBREE_SIGN_FILE}")
SET(PACKAGE_BASE_NAME "${CPACK_PACKAGE_FILE_NAME}")
SET(PACKAGE_EXT "tar.gz")
IF (EMBREE_SYCL_SUPPORT)
SET(EMBREE_VERSION_SYCL_SUFFIX ".sycl")
ENDIF()
ENDIF()
IF (EMBREE_TESTING_PACKAGE)
SET_TESTS_PROPERTIES(BuildPackage PROPERTIES TIMEOUT 1200)
ENDIF()
add_custom_target(
build ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE} --target package -j8
COMMAND ${CMAKE_COMMAND} -DPACKAGE_BASENAME=${PACKAGE_BASE_NAME} -DPACKAGE_EXT=${PACKAGE_EXT} -P ${PROJECT_SOURCE_DIR}/scripts/package_build.cmake
)
add_custom_target(
test_package ${CMAKE_COMMAND} -DWHAT="UNPACK" -DPACKAGE_BASENAME=${PACKAGE_BASE_NAME} -DPACKAGE_EXT=${PACKAGE_EXT} -P ${PROJECT_SOURCE_DIR}/scripts/package_test.cmake
COMMAND cd embree_install/testing && ${CMAKE_COMMAND} -B build -DEMBREE_TESTING_INTENSITY=${EMBREE_TESTING_INTENSITY}
COMMAND ctest --test-dir ${CMAKE_CURRENT_BINARY_DIR}/embree_install/testing/build -VV -C ${CMAKE_BUILD_TYPE} --output-log ctest.output
COMMAND ${CMAKE_COMMAND} -DWHAT="CHECK" -P ${PROJECT_SOURCE_DIR}/scripts/package_test.cmake
)
if(WIN32)
set(INTEGRATE_BINARY "./build/Release/test.exe")
else()
set(INTEGRATE_BINARY "./build/test")
endif()
add_custom_target(
test_integration ${CMAKE_COMMAND} -DWHAT="UNPACK" -DPACKAGE_BASENAME=${PACKAGE_BASE_NAME} -DPACKAGE_EXT=${PACKAGE_EXT} -P ${PROJECT_SOURCE_DIR}/scripts/package_test.cmake
COMMAND cd ${PROJECT_SOURCE_DIR}/tests/integration/test_embree_release && ${CMAKE_COMMAND} -B build --preset ${EMBREE_TESTING_INTEGRATION_PRESET} -Dembree_DIR="${CMAKE_CURRENT_BINARY_DIR}/embree_install/lib/cmake/embree-${EMBREE_VERSION}"
COMMAND cd ${PROJECT_SOURCE_DIR}/tests/integration/test_embree_release && ${CMAKE_COMMAND} --build build --config Release
COMMAND cd ${PROJECT_SOURCE_DIR}/tests/integration/test_embree_release && ${INTEGRATE_BINARY}
)
+543 -241
View File
@@ -1,267 +1,569 @@
## Copyright 2009-2021 Intel Corporation
## SPDX-License-Identifier: Apache-2.0
if (BUILD_TESTING OR EMBREE_TESTING_INSTALL_TESTS)
INCLUDE(CTest)
INCLUDE(CTest)
IF (WIN32)
IF("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC")
SET(MY_PROJECT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}")
if (EMBREE_TESTING_INSTALL_TESTS)
SET(EMBREE_INSTALL_CTESTTESTFILE "${CMAKE_CURRENT_BINARY_DIR}/embree-addtests.cmake")
file(WRITE "${EMBREE_INSTALL_CTESTTESTFILE}" "")
endif()
if (NOT EMBREE_TESTING_PACKAGE_TEST_PROJECT)
IF (WIN32)
IF("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC")
SET(MY_PROJECT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}")
ELSE()
SET(MY_PROJECT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
ENDIF()
ELSE()
SET(MY_PROJECT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
SET(MY_PROJECT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
ENDIF()
ELSE()
SET(MY_PROJECT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
ENDIF()
else()
SET(MY_PROJECT_BINARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../${EMBREE_INSTALL_BINDIR}")
endif()
FIND_PATH(EMBREE_TESTING_MODEL_DIR
NAMES test-models-intensity2.txt
PATHS "${PROJECT_SOURCE_DIR}/models"
DOC "Path to the folder containing the Embree models for regression testing."
NO_DEFAULT_PATHS)
if (NOT EMBREE_TESTING_PACKAGE_TEST_PROJECT)
SET(EMBREE_TESTING_INTENSITY 1 CACHE STRING "Intensity of testing (0 = no testing, 1 = verify and tutorials, 2 = light testing, 3 = intensive testing, 4 = very intensive testing.")
SET_PROPERTY(CACHE EMBREE_TESTING_INTENSITY PROPERTY STRINGS 0 1 2 3 4)
SET(EMBREE_TESTING_ONLY_SYCL_TESTS OFF CACHE BOOL "Run only tests with the sycl support.")
SET(EMBREE_TESTING_MEMCHECK OFF CACHE BOOL "Turns on memory checking for some tests.")
SET(EMBREE_TESTING_BENCHMARK OFF CACHE BOOL "Turns benchmarking on.")
SET(EMBREE_TESTING_BENCHMARK_DATABASE "${PROJECT_BINARY_DIR}" CACHE PATH "Path to database for benchmarking.")
SET(EMBREE_TESTING_PACKAGE OFF CACHE BOOL "Packages release as test.")
SET(EMBREE_TESTING_KLOCWORK OFF CACHE BOOL "Runs Kocwork as test.")
SET(EMBREE_TESTING_SDE OFF CACHE STRING "Uses SDE to run tests for specified CPU.")
SET_PROPERTY(CACHE EMBREE_TESTING_SDE PROPERTY STRINGS OFF pnr nhm wsm snb ivb hsw bdw knl skl skx cnl)
endif()
SET(EMBREE_TESTING_INTENSITY 1 CACHE STRING "Intensity of testing (0 = no testing, 1 = verify and tutorials, 2 = light testing, 3 = intensive testing, 4 = very intensive testing.")
SET_PROPERTY(CACHE EMBREE_TESTING_INTENSITY PROPERTY STRINGS 0 1 2 3 4)
SET(EMBREE_TESTING_ONLY_SYCL_TESTS OFF CACHE BOOL "Run only tests with the sycl support.")
SET(EMBREE_TESTING_MEMCHECK OFF CACHE BOOL "Turns on memory checking for some tests.")
SET(EMBREE_TESTING_BENCHMARK OFF CACHE BOOL "Turns benchmarking on.")
SET(EMBREE_TESTING_BENCHMARK_DATABASE "${PROJECT_BINARY_DIR}" CACHE PATH "Path to database for benchmarking.")
SET(EMBREE_TESTING_PACKAGE OFF CACHE BOOL "Packages release as test.")
SET(EMBREE_TESTING_KLOCWORK OFF CACHE BOOL "Runs Kocwork as test.")
SET(EMBREE_TESTING_SDE OFF CACHE STRING "Uses SDE to run tests for specified CPU.")
SET_PROPERTY(CACHE EMBREE_TESTING_SDE PROPERTY STRINGS OFF pnr nhm wsm snb ivb hsw bdw knl skl skx cnl)
FUNCTION (SET_EMBREE_TEST_PROPERTIES testname)
SET(variants "_cpp;_ispc;_sycl")
foreach(v ${variants})
if (v STREQUAL "_cpp")
SET(v "")
endif()
set(testnamedef "EMBREE_TEST_${testname}${v}_DEFINED")
if(${testnamedef})
SET_TESTS_PROPERTIES(${testname}${v} ${ARGN})
endif()
endforeach()
# checks if the current cmake configuration is compatible with the requirements declared in the optionsfile
MACRO (EMBREE_TEST_CHECK_OPTIONS optionsfile out)
if (EMBREE_TESTING_INSTALL_TESTS)
file(APPEND "${EMBREE_INSTALL_CTESTTESTFILE}" "SET_EMBREE_TEST_PROPERTIES(${testname} ${ARGN}) \n")
endif()
ENDFUNCTION()
# if no optionsfile is found return true (no requirements defined)
SET(${out} 1)
IF(EXISTS "${optionsfile}")
FILE(READ "${optionsfile}" lines)
STRING(REGEX REPLACE "\n" ";" lines "${lines}")
FOREACH (line ${lines})
# parse line into list
string(REGEX MATCHALL "([^\ ]+\ |[^\ ]+$)" tokens "${line}")
LIST(LENGTH tokens token_count)
IF (NOT ${token_count} EQUAL 3)
message(FATAL_ERROR "illegal .embree_opitons in ${optionsfile} at line ${line}")
ENDIF()
# we require every line to follow the scheme "option [==/!=] value"
LIST(GET tokens 0 option)
LIST(GET tokens 1 comp)
LIST(GET tokens 2 value)
STRING(STRIP ${option} option)
STRING(STRIP ${comp} comp)
STRING(STRIP ${value} value)
IF ("${comp}" STREQUAL "==")
IF (NOT "${${option}}" STREQUAL "${value}")
SET(${out} 0)
ENDIF()
ELSE()
IF ("${${option}}" STREQUAL "${value}")
SET(${out} 0)
ENDIF()
ENDIF()
IF (${out} EQUAL 0)
BREAK()
ENDIF()
ENDFOREACH()
ENDIF()
ENDMACRO()
MACRO (ADD_EMBREE_GENERIC_CPP_TEST testname executable args)
IF (BUILD_TESTING)
MACRO (ADD_EMBREE_GENERIC_TEST testname executable)
ADD_TEST(NAME ${testname}
WORKING_DIRECTORY "${MY_PROJECT_BINARY_DIR}"
COMMAND ${executable} ${args})
ENDIF()
ENDMACRO()
COMMAND ${executable} ${ARGN})
SET(testnamedef EMBREE_TEST_${testname}_DEFINED)
SET(${testnamedef} "1" CACHE INTERNAL "")
ENDMACRO()
MACRO (ADD_EMBREE_GENERIC_ISPC_TEST testname executable args)
IF (BUILD_TESTING AND EMBREE_ISPC_SUPPORT AND EMBREE_RAY_PACKETS)
ADD_TEST(NAME ${testname}_ispc
WORKING_DIRECTORY "${MY_PROJECT_BINARY_DIR}"
COMMAND ${executable}_ispc ${args})
ENDIF()
ENDMACRO()
MACRO (ADD_EMBREE_GENERIC_SYCL_TEST testname executable args)
IF (BUILD_TESTING AND EMBREE_SYCL_SUPPORT)
ADD_TEST(NAME ${testname}_sycl
WORKING_DIRECTORY ${MY_PROJECT_BINARY_DIR}
COMMAND ${executable}_sycl ${args})
SET_TESTS_PROPERTIES(${testname}_sycl PROPERTIES TIMEOUT 50)
ENDIF()
ENDMACRO()
MACRO (ADD_EMBREE_TEST testname executable args)
# Check if we should dump the output of this tests
LIST(FIND EMBREE_TESTING_DUMPTESTS ${testname} dumptest)
if (NOT(EMBREE_TESTING_DUMPFORMAT))
SET(EMBREE_TESTING_DUMPFORMAT "tga")
endif()
set(DUMP_ARG "")
IF(NOT(${dumptest} EQUAL -1))
file(MAKE_DIRECTORY "${PROJECT_SOURCE_DIR}/tests/dump")
set(argsx "${args} -o ${PROJECT_SOURCE_DIR}/tests/dump/${testname}.${EMBREE_TESTING_DUMPFORMAT}")
ELSE()
set(argsx ${args})
ENDIF()
# By default add tests for all executables
SET (extra_args ${ARGN})
LIST(APPEND extra_args cpp)
LIST(APPEND extra_args ispc)
LIST(APPEND extra_args sycl)
LIST(REMOVE_DUPLICATES extra_args)
# Exclude exe with '!'
LIST(FIND extra_args "!cpp" p)
if (NOT (${p} EQUAL -1))
LIST(REMOVE_ITEM extra_args "!cpp")
LIST(REMOVE_ITEM extra_args "cpp")
endif()
LIST(FIND extra_args "!ispc" p)
if (NOT (${p} EQUAL -1))
LIST(REMOVE_ITEM extra_args "!ispc")
LIST(REMOVE_ITEM extra_args "ispc")
endif()
LIST(FIND extra_args "!sycl" p)
if (NOT (${p} EQUAL -1))
LIST(REMOVE_ITEM extra_args "!sycl")
LIST(REMOVE_ITEM extra_args "sycl")
endif()
# Add the tests
FOREACH(loopvar ${extra_args})
MACRO (ADD_EMBREE_GENERIC_CPP_TEST testname executable)
if((NOT ${EMBREE_SYCL_SUPPORT}) OR (NOT ${EMBREE_TESTING_ONLY_SYCL_TESTS}))
if(${loopvar} STREQUAL "cpp")
ADD_EMBREE_GENERIC_CPP_TEST(${testname} ${executable} ${argsx})
ENDIF()
if(${loopvar} STREQUAL "ispc")
ADD_EMBREE_GENERIC_ISPC_TEST(${testname} ${executable} ${argsx})
ENDIF()
ADD_TEST(NAME ${testname}
WORKING_DIRECTORY "${MY_PROJECT_BINARY_DIR}"
COMMAND ${executable} ${ARGN})
SET(testnamedef EMBREE_TEST_${testname}_DEFINED)
SET(${testnamedef} "1" CACHE INTERNAL "")
endif()
if(${loopvar} STREQUAL "sycl")
ADD_EMBREE_GENERIC_SYCL_TEST(${testname} ${executable} ${argsx})
ENDMACRO()
MACRO (ADD_EMBREE_GENERIC_ISPC_TEST testname executable)
if((NOT ${EMBREE_SYCL_SUPPORT}) OR (NOT ${EMBREE_TESTING_ONLY_SYCL_TESTS}))
IF (EMBREE_ISPC_SUPPORT AND EMBREE_RAY_PACKETS)
ADD_TEST(NAME ${testname}_ispc
WORKING_DIRECTORY "${MY_PROJECT_BINARY_DIR}"
COMMAND ${executable}_ispc ${ARGN})
SET(testnamedef EMBREE_TEST_${testname}_ispc_DEFINED)
SET(${testnamedef} "1" CACHE INTERNAL "")
ENDIF()
endif()
ENDMACRO()
MACRO (ADD_EMBREE_GENERIC_SYCL_TEST testname executable)
IF (EMBREE_SYCL_SUPPORT)
ADD_TEST(NAME ${testname}_sycl
WORKING_DIRECTORY ${MY_PROJECT_BINARY_DIR}
COMMAND ${executable}_sycl ${ARGN})
SET(testnamedef EMBREE_TEST_${testname}_sycl_DEFINED)
SET(${testnamedef} 1 CACHE INTERNAL "")
SET_TESTS_PROPERTIES(${testname}_sycl PROPERTIES TIMEOUT 50)
ENDIF()
ENDFOREACH()
ENDMACRO()
ENDMACRO()
MACRO (ADD_EMBREE_TUTORIAL_TEST name args)
ADD_EMBREE_TEST(${name} embree_${name} "--compare ${PROJECT_SOURCE_DIR}/tests/models/reference/${name}.exr ${args}" ${ARGN})
ENDMACRO()
MACRO (ADD_EMBREE_PRIMITIVE_TEST xml shader)
EMBREE_TEST_CHECK_OPTIONS("${xml}.embree_options" out)
IF (${out} EQUAL 1)
GET_FILENAME_COMPONENT(FN ${xml} NAME_WE)
SET(testname "prim_${FN}_${shader}")
SET(compare_threshold "55")
# TODO: APPLE with AVX2 enabled have a sphere cap intersection problem with linear curves
IF ((testname MATCHES "prim_curves_linear_flat.*") AND ((testname MATCHES ".*uv") OR testname MATCHES ".*Ng"))
IF (APPLE AND (EMBREE_ISA_AVX2 OR EMBREE_ISA_AVX512))
SET(compare_threshold "200")
ENDIF()
# Checks if the current cmake configuration is compatible with <condition>
# condition may be a triple of CMAKE_VARIABLE_NAME op VALUE
# supported operators for op are: ==, !=, <, <=, >, >=
FUNCTION (EMBREE_TESTING_CHECK_OPTION out condition)
# parse condition into list
string(REGEX MATCHALL "([^\ ]+\ |[^\ ]+$)" tokens "${condition}")
LIST(LENGTH tokens token_count)
IF (NOT ${token_count} EQUAL 3)
message(FATAL_ERROR "illegal embree_opitons condition: ${condition}")
ENDIF()
SET(args "-i ${xml} --shader ${shader} --time 0.5 --compare ${PROJECT_SOURCE_DIR}/tests/primitives/reference/${testname}.exr --compare-threshold ${compare_threshold}")
ADD_EMBREE_TEST(${testname} embree_viewer ${args})
# we require every condition to follow the scheme "variable_name op value"
LIST(GET tokens 0 option)
LIST(GET tokens 1 comp)
LIST(GET tokens 2 value)
ENDIF()
ENDMACRO()
STRING(STRIP ${option} option)
STRING(STRIP ${comp} comp)
STRING(STRIP ${value} value)
MACRO (ADD_EMBREE_MODEL_TEST testname executable model reference args)
EMBREE_TEST_CHECK_OPTIONS("${PROJECT_SOURCE_DIR}/tests/models/${model}.embree_options" out)
IF (${out} EQUAL 1)
SET(${out} 0 PARENT_SCOPE)
if ("${comp}" STREQUAL "==")
if ("${${option}}" STREQUAL "${value}")
SET(${out} 1 PARENT_SCOPE)
endif()
elseif ("${comp}" STREQUAL "!=")
if (NOT ("${${option}}" STREQUAL "${value}"))
SET(${out} 1 PARENT_SCOPE)
endif()
elseif ("${comp}" STREQUAL ">")
if ("${${option}}" GREATER "${value}")
SET(${out} 1 PARENT_SCOPE)
endif()
elseif ("${comp}" STREQUAL ">=")
if ("${${option}}" GREATER_EQUAL "${value}")
SET(${out} 1 PARENT_SCOPE)
endif()
elseif ("${comp}" STREQUAL "<")
if ("${${option}}" LESS "${value}")
SET(${out} 1 PARENT_SCOPE)
endif()
elseif ("${comp}" STREQUAL "<=")
if ("${${option}}" LESS_EQUAL "${value}")
SET(${out} 1 PARENT_SCOPE)
endif()
else()
message(FATAL_ERROR "Could not parse embree_option condition: ${condition}")
endif()
SET(extra_args ${ARGN})
IF ("${testname}" MATCHES ".*subdiv.*") # skip subdiv models for SYCL mode
LIST(APPEND extra_args !sycl)
ENDIF()
SET(argsx "-c ${PROJECT_SOURCE_DIR}/tests/models/${model} --compare ${PROJECT_SOURCE_DIR}/tests/models/reference/${reference}.exr ${args}")
ADD_EMBREE_TEST(${testname} ${executable} ${argsx} ${extra_args})
ENDIF()
ENDMACRO()
MACRO (ADD_EMBREE_MODELS_TEST model_list_file testname executable reference args)
IF (BUILD_TESTING)
SET(full_model_list_file "${PROJECT_SOURCE_DIR}/tests/models/${model_list_file}")
IF(NOT EXISTS "${full_model_list_file}")
MESSAGE(FATAL_ERROR "File ${PROJECT_SOURCE_DIR}/tests/models/${model_list_file} does not exist!")
ENDIF()
FILE(READ "${full_model_list_file}" models)
STRING(REGEX REPLACE "\n" ";" models "${models}")
FOREACH (model ${models})
IF (model MATCHES "^#")
CONTINUE()
ENDIF()
IF (model MATCHES ".*mblur.*" OR model MATCHES ".*motion_blur.*") # skip mblur models if motion blur is not enabled
IF (NOT EMBREE_SYCL_MBLUR)
CONTINUE()
ENDIF()
ENDIF()
STRING(REGEX REPLACE " .*" "" modelname "${model}")
STRING(REGEX REPLACE "/" "_" modelname "${modelname}")
STRING(REGEX REPLACE ".ecs" "" modelname "${modelname}")
ADD_EMBREE_MODEL_TEST(${testname}_${modelname} ${executable} ${model} ${reference}_${modelname} "${args}")
ENDFOREACH()
ENDIF()
ENDMACRO()
# add klocwork test
IF (EMBREE_TESTING_KLOCWORK)
ADD_TEST(NAME Klocwork-Build WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" COMMAND "${PROJECT_SOURCE_DIR}/scripts/klocwork_build.sh")
ADD_TEST(NAME Klocwork-Check WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" COMMAND "${PROJECT_SOURCE_DIR}/scripts/klocwork_check.sh")
SET_TESTS_PROPERTIES(Klocwork-Build PROPERTIES TIMEOUT 2400)
SET_TESTS_PROPERTIES(Klocwork-Check PROPERTIES TIMEOUT 300)
ENDIF()
# add valgrind test
IF (EMBREE_TESTING_MEMCHECK)
find_program( EMBREE_MEMORYCHECK_COMMAND valgrind )
set( EMBREE_MEMORYCHECK_COMMAND_OPTIONS "--trace-children=yes --leak-check=full --show-leak-kinds=definite --errors-for-leak-kinds=definite --error-exitcode=1" )
IF (NOT EMBREE_MEMORYCHECK_COMMAND)
MESSAGE(FATAL_ERROR "valgrind not found")
ENDIF()
FUNCTION(ADD_MEMCHECK_TEST name binary)
set(memcheck_command "${EMBREE_MEMORYCHECK_COMMAND} ${EMBREE_MEMORYCHECK_COMMAND_OPTIONS}")
separate_arguments(memcheck_command)
add_test(NAME ${name} COMMAND ${memcheck_command} "${MY_PROJECT_BINARY_DIR}/${binary}" ${ARGN})
ENDFUNCTION()
ENDIF()
# Checks multiple options from a list with EMBREE_TESTING_CHECK_OPTION
FUNCTION (EMBREE_TESTING_CHECK_OPTIONS_LIST out conditions)
SET(${out} 1 PARENT_SCOPE)
FOREACH (c ${conditions})
EMBREE_TESTING_CHECK_OPTION(myout ${c})
IF (myout EQUAL 0)
SET(${out} 0 PARENT_SCOPE)
BREAK()
ENDIF()
ENDFOREACH()
ENDFUNCTION()
# looks for ifile in multiple possible locations and outputs a file with absolute path in ofile
FUNCTION (EMBREE_FIND_TEST_FILE ifile ofile errmsgflavor)
if (EXISTS "${ifile}") # abs path, use get_filename_component because it could also be relative to cwd
get_filename_component(absifile "${ifile}" ABSOLUTE)
SET(${ofile} ${absifile} PARENT_SCOPE)
elseif(EXISTS "${PROJECT_SOURCE_DIR}/tests/${ifile}") # testing dir
set(${ofile} "${PROJECT_SOURCE_DIR}/tests/${ifile}" PARENT_SCOPE)
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${ifile}") # relative to source folder
set(${ofile} "${CMAKE_CURRENT_SOURCE_DIR}/${ifile}" PARENT_SCOPE)
else()
set(${ofile} "" PARENT_SCOPE)
if (errmsgflavor)
message(FATAL_ERROR
"Could not find ${errmsgflavor} \"${ifile}\"\n"
"looked for:\n"
" ${inputfile}\n"
" ${PROJECT_SOURCE_DIR}/tests/${ifile}\n"
" ${CMAKE_CURRENT_SOURCE_DIR}/${ifile}\n"
)
endif()
endif()
ENDFUNCTION()
FUNCTION (EMBREE_ADD_TEST_PARSE_SUBLIST args keyword sublist)
SET(myargs ${args})
SET(mysublist "")
SET(keywords "ECS;XML;NO_REFERENCE;REFERENCE;REFERENCE_SUFFIX;INTENSITY;CONDITION_FILE;CONDITION;ARGS;NO_CPP;NO_ISPC;NO_SYCL;GEN_REFERENCE;")
list(FIND nargs ${keyword} istart)
if (NOT(istart EQUAL -1))
list(LENGTH myargs iend)
foreach(k ${keywords})
list(FIND myargs ${k} i)
if (NOT(i EQUAL -1) AND (i GREATER istart) AND (i LESS iend))
SET(iend ${i})
endif()
endforeach()
MATH(EXPR i "${istart}+1")
while (i LESS iend)
list(GET myargs ${i} elem)
list(APPEND mysublist ${elem})
MATH(EXPR i "${i}+1")
endwhile()
endif()
SET(${sublist} ${mysublist} PARENT_SCOPE)
ENDFUNCTION()
FUNCTION (EMBREE_ADD_TEST_PARSE_FLAG args keyword value)
SET(myargs ${args})
SET(${value} OFF PARENT_SCOPE)
list(FIND nargs ${keyword} i)
if (NOT(i EQUAL -1))
SET(${value} ON PARENT_SCOPE)
endif()
ENDFUNCTION()
# ADD_EMBREE_TEST_ECS(testname exename [ECS <file> | XML <file>] [NO_REFERENCE | REFERENCE <path> | REFERENCE_SUFFIX <suffix>] [INTENSITY <i>] [CONDITION <conds>] [ARGS <args>] [GEN_REFERENCE])
# [ECS <file> | XML <inputfile> | OPTIONS <inputfile>]
# - looks for file and calls the test command with either "-c <inputfile>.ecs" or "-i <inputfile>.xml"
#
# [NO_REFERENCE | REFERENCE <path> | REFERENCE_SUFFIX <suffix>]
# - if not found a reference is will be expected in the same folder as *.ecs with name *.ecs.exename.exr
# - NO_REFERENCE: don't look for a reference (no --compare in test command)
# - REFERENCE <path>: use the reference located in <path>. Same rules aplly as for finding ecs files: absolute or relative to CMAKE_CURRENT_SOURCE_DIR path, must not be located outside the embree root dir.
# - REFERENCE_SUFFIX <suffix>: use the default reference location and name with a suffix before the last file extension, e.g. *.ecs.exename<suffix>.exr
# - if this argument is not specified, looks for
# 1. <inputfile>.exename.exr, or
# 2. <testname>.exr, if no <inputfile> was given
#
# [INTENSITY <i>]
# - default i = 1
# - sets the intensity level for the test, test is only run if ${EMBREE_TESTING_INTENSITY} GREATER_EQUAL i
# - could be done with an *.embree_options file, but this is more flexible, e.g. you can easier share reference images without specifying an absolute path
# - DOES NOT overrite EMBREE_TESTING_INTENSITY, if specified in *.embree_options
#
# [CONDITION_FILE <file>]
# - file containing additional conditions
# - conditions are specified linewise in form of: EMBREE_OPTION op VALUE, where EMBREE_OPTION is a cmake variable used during embree configuration and op is one of ==, !=, <, <=, >, >=
# - if this argument is not specified, looks for
# 1. <inputfile>.embree_options, or
# 2. <testname>.embree_options, if no <inputfile> was given
#
# [CONDITION <conds>]
# - cmake list of additional conditions, specified the same way as in an embree_options file
#
# [ARGS <args>]
# - additional arguments for the test command
#
# [GEN_REFERENCE]
# - writes the reference to the expected location
# - could also be done with the ARGS parameter, but this way we don't have to deal with paths
#
# EXAMPLES
#
# all optional arguments default,
# - looks for points.ecs.embree_options to filter out test by configured options, if not found no restrictions
# - runs for EMBREE_TESTING_INTENSITY >= 1
# - reference will be expected in the same folder as points.ecs with name points.ecs.embree_viewer.exr
#ADD_EMBREE_TEST_ECS(viewer_points embree_viewer "models/xxx/points.ecs") # 1)
#ADD_EMBREE_TEST_ECS(viewer_points embree_viewer "${PROJECT_SOURCE_DIR}/models/xxx/points.ecs") # 2) same as 1) but with absolute path to ecs
#ADD_EMBREE_TEST_ECS(viewer_points embree_viewer "points.ecs") # 3) same as 1) but looks for points.ecs in the ${CMAKE_CURRENT_SOURCE_DIR} i.e. <embree_root>/tutorials/viewer/points.ecs
#ADD_EMBREE_TEST_ECS(viewer_points embree_viewer "models/xxx/points.ecs" ARGS --coherent INTENSITY 2) # 4) same as 1) but runs only at EMBREE_TESTING_INTENSITY >= 2
#ADD_EMBREE_TEST_ECS(viewer_points embree_viewer "models/xxx/points.ecs" REFERENCE_SUFFIX "_quads" ARGS
# --coherent
# --convert-triangles-to-quads INTENSITY 2) # 5) same as 4) but expects reference name points.ecr.embree_viewer_quads.ecs
#ADD_EMBREE_TEST_ECS(viewer_points embree_viewer "models/xxx/points.ecs" REFERENCE "special.exr" ARGS
# --coherent
# --convert-triangles-to-quads INTENSITY 2) # 5) same as 4) but expects reference <embree-root>/tutorials/viewer/special.exr
## 1) - 5) all share the same base input arguments defined in points.ecs as well as the points.ecs.embree_options
#ADD_EMBREE_TEST_ECS(point_geometry embree_point_geometry) # 6) no ecs file, uses point_geometry.embree_options if exists, expects reference ${CMAKE_CURRENT_SOURCE_DIR}/point_geometry.exr
#ADD_EMBREE_TEST_ECS(verify verify NO_REFERENCE) # 7) no ecs file, uses verify.embree_options if exists, no reference
#ADD_EMBREE_TEST_ECS(verify_memcheck verify NO_REFERENCE CONDITIONS "EMBREE_TESTING_MEMCHECK == ON") # 8) same as 7) but with extra condition
FUNCTION (ADD_EMBREE_TEST_ECS testname executable)
if (EMBREE_TESTING_FILTER_TESTNAMES)
list(FIND EMBREE_TESTING_FILTER_TESTNAMES "${testname}" i)
if (${i} EQUAL -1)
return()
endif()
endif()
SET(nargs ${ARGN})
# disable everything
SET(testnamedef EMBREE_TEST_${testname}_DEFINED)
SET(${testnamedef} "0" CACHE INTERNAL "")
SET(testnamedef EMBREE_TEST_${testname}_ispc_DEFINED)
SET(${testnamedef} "0" CACHE INTERNAL "")
SET(testnamedef EMBREE_TEST_${testname}_sycl_DEFINED)
SET(${testnamedef} "0" CACHE INTERNAL "")
# parsing input file
# ECS mode -> single parameter with filename after ECS keyword
list(FIND nargs "ECS" i)
if (NOT(i EQUAL -1))
SET(inputtype "-c")
MATH(EXPR i "${i}+1")
list(GET nargs ${i} out)
EMBREE_FIND_TEST_FILE("${out}" inputfile "test file")
endif()
# XML mode -> single parameter with filename after XML keyword
list(FIND nargs "XML" i)
if (NOT(i EQUAL -1))
SET(inputtype "-i")
MATH(EXPR i "${i}+1")
list(GET nargs ${i} out)
EMBREE_FIND_TEST_FILE("${out}" inputfile "test file")
endif()
# no filetype keyword -> look for <testname>.ecs/xml
# does not need to be specified
if (NOT inputtype)
EMBREE_FIND_TEST_FILE("${testname}.ecs" inputfile "")
if(inputfile)
SET(inputtype "-c")
endif()
EMBREE_FIND_TEST_FILE("${testname}.ecs" inputfile "")
if(inputfile)
SET(inputtype "-i")
endif()
endif()
# parsing refernce image
# no reference image mode -> no additional parameter to parse
list(FIND nargs "NO_REFERENCE" i)
if (NOT(i EQUAL -1))
SET(no_reference ON)
endif()
# reference suffix mode -> singe parameter with suffix to default reference file name
list(FIND nargs "REFERENCE_SUFFIX" i)
if (NOT(i EQUAL -1))
MATH(EXPR i "${i}+1")
list(GET nargs ${i} out)
EMBREE_FIND_TEST_FILE("${inputfile}.${executable}${out}.exr" referencefile "reference image")
endif()
# reference mode -> singe parameter with absolute path to reference image
list(FIND nargs "REFERENCE" i)
if (NOT(i EQUAL -1))
MATH(EXPR i "${i}+1")
list(GET nargs ${i} out)
EMBREE_FIND_TEST_FILE("${out}" referencefile "reference image")
endif()
# no reference keyword -> look for <testname>.exr and <inputfile>.<executable>.exr respectively
if ((NOT no_reference) AND (NOT referencefile))
if (NOT inputfile)
EMBREE_FIND_TEST_FILE("${testname}.exr" referencefile "reference image")
else()
EMBREE_FIND_TEST_FILE("${inputfile}.${executable}.exr" referencefile "reference image")
endif()
endif()
# parsing intensity
# single integer parameter
SET(intensity 1)
list(FIND nargs "INTENSITY" i)
if (NOT(i EQUAL -1))
MATH(EXPR i "${i}+1")
list(GET nargs ${i} intensity)
endif()
# parsing condition
SET(conditions "")
SET(conditionsfile)
list(FIND nargs "CONDITION_FILE" i)
# condition file -> single parameter to absolute path of conditions file
if (NOT(i EQUAL -1))
list(GET nargs ${i} conditionsfile)
EMBREE_FIND_TEST_FILE("${conditionsfile}" conditionsfile "")
# no <inputfile> specified -> look for <testname>.embree_options
elseif (NOT inputtype)
EMBREE_FIND_TEST_FILE("${testname}.embree_options" conditionsfile "")
# <inputfile> specified -> look for <inputfile>.embree_options
else()
EMBREE_FIND_TEST_FILE("${inputfile}.embree_options" conditionsfile "")
endif()
if (conditionsfile)
file(READ "${conditionsfile}" lines)
string(REGEX REPLACE "\n" ";" conditions "${lines}")
endif()
# parsing additional conditions
EMBREE_ADD_TEST_PARSE_SUBLIST("${nargs}" "CONDITION" extra_conditions)
list(APPEND conditions ${extra_conditions})
# parsing extra args
EMBREE_ADD_TEST_PARSE_SUBLIST("${nargs}" "ARGS" extraargs)
EMBREE_ADD_TEST_PARSE_FLAG("${nargs}" "MEMCHECK" memcheck)
EMBREE_ADD_TEST_PARSE_FLAG("${nargs}" "NO_CPP" no_cpp)
EMBREE_ADD_TEST_PARSE_FLAG("${nargs}" "NO_ISPC" no_ispc)
EMBREE_ADD_TEST_PARSE_FLAG("${nargs}" "NO_SYCL" no_sycl)
EMBREE_ADD_TEST_PARSE_FLAG("${nargs}" "NO_POSTFIX" no_postfix)
EMBREE_ADD_TEST_PARSE_FLAG("${nargs}" "GEN_REFERENCE" gen_reference)
# add the test, if the conditions are met
SET(matchconditions ON)
if (conditions)
EMBREE_TESTING_CHECK_OPTIONS_LIST(out "${conditions}")
if (out EQUAL 0)
SET(matchconditions OFF)
endif()
endif()
# LESS_EQUAL not supported on all CI runners
if (matchconditions AND ((intensity LESS EMBREE_TESTING_INTENSITY) OR (intensity EQUAL EMBREE_TESTING_INTENSITY)))
SET(args "")
if (inputfile)
list(APPEND args "${inputtype} ${inputfile}")
endif()
if (NOT no_reference)
list(APPEND args "--compare ${referencefile}")
endif()
if (gen_reference)
list(APPEND args "-o ${referencefile}")
endif()
foreach(a ${extraargs})
list(APPEND args "${a}")
endforeach()
if (memcheck)
list(PREPEND args "${MY_PROJECT_BINARY_DIR}/${executable}")
list(PREPEND args "${EMBREE_MEMORYCHECK_COMMAND_OPTIONS}")
if (no_postfix)
ADD_EMBREE_GENERIC_TEST(${testname} ${EMBREE_MEMORYCHECK_COMMAND} ${args})
else()
if((NOT ${EMBREE_SYCL_SUPPORT}) OR (NOT ${EMBREE_TESTING_ONLY_SYCL_TESTS}))
if (NOT(no_cpp))
ADD_EMBREE_GENERIC_CPP_TEST(${testname} ${EMBREE_MEMORYCHECK_COMMAND} ${args})
endif()
if (NOT(no_ispc))
ADD_EMBREE_GENERIC_ISPC_TEST(${testname} ${EMBREE_MEMORYCHECK_COMMAND} ${args})
endif()
endif()
if (NOT(no_sycl))
ADD_EMBREE_GENERIC_SYCL_TEST(${testname} ${EMBREE_MEMORYCHECK_COMMAND} ${args})
endif()
endif()
else()
if (no_postfix)
ADD_EMBREE_GENERIC_TEST(${testname} ${executable} ${args})
else()
if (NOT(no_cpp))
ADD_EMBREE_GENERIC_CPP_TEST(${testname} ${executable} ${args})
endif()
if (NOT(no_ispc))
ADD_EMBREE_GENERIC_ISPC_TEST(${testname} ${executable} ${args})
endif()
if (NOT(no_sycl))
ADD_EMBREE_GENERIC_SYCL_TEST(${testname} ${executable} ${args})
endif()
endif()
endif()
endif()
if (EMBREE_TESTING_INSTALL_TESTS)
if (inputfile)
get_filename_component(inputpath ${inputfile} DIRECTORY)
STRING(REPLACE "${PROJECT_SOURCE_DIR}/" "" inputpath "${inputpath}")
INSTALL(FILES "${inputfile}"
DESTINATION "${CMAKE_INSTALL_TESTDIR}/${inputpath}"
COMPONENT testing)
endif()
if (conditionsfile)
get_filename_component(conditionspath ${conditionsfile} DIRECTORY)
STRING(REPLACE "${PROJECT_SOURCE_DIR}/" "" conditionspath "${conditionspath}")
INSTALL(FILES "${conditionsfile}"
DESTINATION "${CMAKE_INSTALL_TESTDIR}/${conditionspath}"
COMPONENT testing)
endif()
if (referencefile)
get_filename_component(referencepath ${referencefile} DIRECTORY)
STRING(REPLACE "${PROJECT_SOURCE_DIR}/" "" referencepath "${referencepath}")
INSTALL(FILES "${referencefile}"
DESTINATION "${CMAKE_INSTALL_TESTDIR}/${referencepath}"
COMPONENT testing)
endif()
SET(testcall "ADD_EMBREE_TEST_ECS(${testname} ${executable}")
if (inputfile)
STRING(REPLACE "${PROJECT_SOURCE_DIR}/" "" inputfile "${inputfile}")
if (inputtype STREQUAL "-c")
SET(testcall "${testcall} \n ECS ${inputfile}")
elseif (inputtype STREQUAL "-i")
SET(testcall "${testcall} \n XML ${inputfile}")
endif()
endif()
if (no_reference)
SET(testcall "${testcall} \n NO_REFERENCE")
else()
STRING(REPLACE "${PROJECT_SOURCE_DIR}/" "" referencefile "${referencefile}")
SET(testcall "${testcall} \n REFERENCE ${referencefile}")
endif()
SET(testcall "${testcall} \n INTENSITY ${intensity}")
if (${memcheck})
SET(testcall "${testcall} \n MEMCHECK")
endif()
if (${no_cpp})
SET(testcall "${testcall} \n NO_CPP")
endif()
if (${no_ispc})
SET(testcall "${testcall} \n NO_ISPC")
endif()
if (${no_sycl})
SET(testcall "${testcall} \n NO_SYCL")
endif()
if (${no_postfix})
SET(testcall "${testcall} \n NO_POSTFIX")
endif()
STRING(REPLACE "${PROJECT_SOURCE_DIR}/" "" conditionsfile "${conditionsfile}")
SET(testcall "${testcall} \n CONDITION_FILE ${conditionsfile}")
SET(testcall "${testcall} \n CONDITION ")
foreach(c ${conditions})
SET(testcall "${testcall} \"${c}\"")
endforeach()
SET(testcall "${testcall} \n ARGS ")
foreach(a ${extraargs})
SET(testcall "${testcall} ${a}")
endforeach()
SET(testcall "${testcall})\n\n")
file(APPEND "${EMBREE_INSTALL_CTESTTESTFILE}" "${testcall}")
endif()
ENDFUNCTION()
else()
FUNCTION(ADD_EMBREE_TEST_ECS testname executable)
ENDFUNCTION()
FUNCTION(ADD_EMBREE_GENERIC_TEST testname executable)
ENDFUNCTION()
FUNCTION(ADD_EMBREE_GENERIC_CPP_TEST testname executable)
ENDFUNCTION()
FUNCTION(ADD_EMBREE_GENERIC_SYCL_TEST testname executable)
ENDFUNCTION()
FUNCTION(ADD_EMBREE_GENERIC_ISPC_TEST testname executable)
ENDFUNCTION()
FUNCTION(SET_EMBREE_TEST_PROPERTIES testname)
ENDFUNCTION()
endif()
+9 -13
View File
@@ -3,10 +3,6 @@
#pragma once
#if !defined(_CRT_SECURE_NO_WARNINGS)
#define _CRT_SECURE_NO_WARNINGS
#endif
#include "../sys/platform.h"
#include "../sys/ref.h"
#include "../sys/filename.h"
@@ -126,17 +122,16 @@ namespace embree
class FileStream : public Stream<int>
{
public:
FileStream (FILE* file, const std::string& name = "file")
: file(file), lineNumber(1), colNumber(0), charNumber(0), name(std::shared_ptr<std::string>(new std::string(name))) {}
FileStream (const FileName& fileName)
: lineNumber(1), colNumber(0), charNumber(0), name(std::shared_ptr<std::string>(new std::string(fileName.str())))
{
file = fopen(fileName.c_str(),"r");
if (file == nullptr) THROW_RUNTIME_ERROR("cannot open file " + fileName.str());
if (ifs) ifs.close();
ifs.open(fileName.str());
if (!ifs.is_open()) THROW_RUNTIME_ERROR("cannot open file " + fileName.str());
}
~FileStream() {
if (ifs) ifs.close();
}
~FileStream() { if (file) fclose(file); }
public:
ParseLocation location() {
@@ -144,14 +139,15 @@ namespace embree
}
int next() {
int c = fgetc(file);
int c = ifs.get();
if (c == '\n') { lineNumber++; colNumber = 0; } else if (c != '\r') colNumber++;
charNumber++;
return c;
}
private:
FILE* file;
std::ifstream ifs;
ssize_t lineNumber; /// the line number the token is from
ssize_t colNumber; /// the character number in the current line
ssize_t charNumber; /// the character in the file
+3
View File
@@ -48,6 +48,9 @@ namespace embree
__forceinline int toInt (const float& a) { return int(a); }
__forceinline float toFloat(const int& a) { return float(a); }
__forceinline int asInt (const float& a) { return *((int*)&a); }
__forceinline float asFloat(const int& a) { return *((float*)&a); }
#if defined(__WIN32__)
__forceinline bool finite ( const float x ) { return _finite(x) != 0; }
#endif
-2
View File
@@ -75,8 +75,6 @@ namespace embree
__forceinline float floor( const float x ) { return sycl::floor(x); }
__forceinline float ceil ( const float x ) { return sycl::ceil(x); }
__forceinline float frac ( const float x ) { return x-floor(x); }
__forceinline float sincos ( const float phi, float* sin, float* cos ) { return *sin = sycl::sincos(phi, cos); }
__forceinline float sincosf ( const float phi, float* sin, float* cos ) { return *sin = sycl::sincos(phi, cos); }
//__forceinline double abs ( const double x ) { return ::fabs(x); }
//__forceinline double sign ( const double x ) { return x<0?-1.0:1.0; }
+2 -2
View File
@@ -95,8 +95,8 @@ namespace embree
__forceinline Vec2fa abs ( const Vec2fa& a ) { return Vec2fa(sycl::fabs(a.x),sycl::fabs(a.y)); }
__forceinline Vec2fa sign ( const Vec2fa& a ) { return Vec2fa(sycl::sign(a.x),sycl::sign(a.y)); }
//__forceinline Vec2fa rcp ( const Vec2fa& a ) { return Vec2fa(sycl::recip(a.x),sycl::recip(a.y)); }
__forceinline Vec2fa rcp ( const Vec2fa& a ) { return Vec2fa(__sycl_std::__invoke_native_recip<float>(a.x),__sycl_std::__invoke_native_recip<float>(a.y)); }
//__forceinline Vec2fa rcp ( const Vec2fa& a ) { return Vec2fa(sycl::native::recip(a.x),sycl::native::recip(a.y)); }
__forceinline Vec2fa rcp ( const Vec2fa& a ) { return Vec2fa(sycl::native::recip(a.x),sycl::native::recip(a.y)); }
__forceinline Vec2fa sqrt ( const Vec2fa& a ) { return Vec2fa(sycl::sqrt(a.x),sycl::sqrt(a.y)); }
__forceinline Vec2fa sqr ( const Vec2fa& a ) { return Vec2fa(a.x*a.x,a.y*a.y); }
+2 -2
View File
@@ -92,7 +92,7 @@ namespace embree
__forceinline Vec3fa sign ( const Vec3fa& a ) { return Vec3fa(sycl::sign(a.x),sycl::sign(a.y),sycl::sign(a.z)); }
//__forceinline Vec3fa rcp ( const Vec3fa& a ) { return Vec3fa(sycl::recip(a.x),sycl::recip(a.y),sycl::recip(a.z)); }
__forceinline Vec3fa rcp ( const Vec3fa& a ) { return Vec3fa(__sycl_std::__invoke_native_recip<float>(a.x),__sycl_std::__invoke_native_recip<float>(a.y),__sycl_std::__invoke_native_recip<float>(a.z)); }
__forceinline Vec3fa rcp ( const Vec3fa& a ) { return Vec3fa(sycl::native::recip(a.x),sycl::native::recip(a.y),sycl::native::recip(a.z)); }
__forceinline Vec3fa sqrt ( const Vec3fa& a ) { return Vec3fa(sycl::sqrt(a.x),sycl::sqrt(a.y),sycl::sqrt(a.z)); }
__forceinline Vec3fa sqr ( const Vec3fa& a ) { return Vec3fa(a.x*a.x,a.y*a.y,a.z*a.z); }
@@ -393,7 +393,7 @@ namespace embree
__forceinline Vec3fx sign ( const Vec3fx& a ) { return Vec3fx(sycl::sign(a.x),sycl::sign(a.y),sycl::sign(a.z),sycl::sign(a.z)); }
//__forceinline Vec3fx rcp ( const Vec3fx& a ) { return Vec3fx(sycl::recip(a.x),sycl::recip(a.y),sycl::recip(a.z)); }
__forceinline Vec3fx rcp ( const Vec3fx& a ) { return Vec3fx(__sycl_std::__invoke_native_recip<float>(a.x),__sycl_std::__invoke_native_recip<float>(a.y),__sycl_std::__invoke_native_recip<float>(a.z),__sycl_std::__invoke_native_recip<float>(a.w)); }
__forceinline Vec3fx rcp ( const Vec3fx& a ) { return Vec3fx(sycl::native::recip(a.x),sycl::native::recip(a.y),sycl::native::recip(a.z),sycl::native::recip(a.w)); }
__forceinline Vec3fx sqrt ( const Vec3fx& a ) { return Vec3fx(sycl::sqrt(a.x),sycl::sqrt(a.y),sycl::sqrt(a.z),sycl::sqrt(a.w)); }
__forceinline Vec3fx sqr ( const Vec3fx& a ) { return Vec3fx(a.x*a.x,a.y*a.y,a.z*a.z,a.w*a.w); }
+2
View File
@@ -34,6 +34,7 @@ __forceinline __m128 _mm_broadcast_ss (float const * mem_addr)
#define _MM_SET_EXCEPTION_MASK(x)
// #define _MM_SET_FLUSH_ZERO_MODE(x)
/*
__forceinline int _mm_getcsr()
{
return 0;
@@ -43,6 +44,7 @@ __forceinline void _mm_mfence()
{
__sync_synchronize();
}
*/
__forceinline __m128i _mm_load4epu8_epi32(__m128i *ptr)
{
+2051 -687
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -119,7 +119,7 @@ namespace embree
#if defined(__aarch64__)
template<int i0, int i1, int i2, int i3>
__forceinline vboolf4 shuffle(const vboolf4& v) {
return vreinterpretq_f32_u8(vqtbl1q_u8( vreinterpretq_u8_s32(v), _MN_SHUFFLE(i0, i1, i2, i3)));
return vreinterpretq_f32_u8(vqtbl1q_u8( vreinterpretq_u8_s32((int32x4_t)v.v), _MN_SHUFFLE(i0, i1, i2, i3)));
}
template<int i0, int i1, int i2, int i3>
+11
View File
@@ -316,6 +316,17 @@ namespace embree
return madd(t,b-a,a);
}
__forceinline bool isvalid (const vfloat16& v) {
return all((v > vfloat16(-FLT_LARGE)) & (v < vfloat16(+FLT_LARGE)));
}
__forceinline void xchg(vboolf16 m, vfloat16& a, vfloat16& b)
{
vfloat16 c = a;
a = select(m,b,a);
b = select(m,c,b);
}
////////////////////////////////////////////////////////////////////////////////
/// Rounding Functions
////////////////////////////////////////////////////////////////////////////////
+2 -3
View File
@@ -48,9 +48,8 @@ namespace embree
void disableUSMAllocTutorial()
{
if (tls_context_tutorial == nullptr) throw std::runtime_error("USM allocation not enabled");
if (tls_device_tutorial == nullptr) throw std::runtime_error("USM allocation not enabled");
//if (tls_context_tutorial == nullptr) throw std::runtime_error("USM allocation not enabled");
//if (tls_device_tutorial == nullptr) throw std::runtime_error("USM allocation not enabled");
tls_context_tutorial = nullptr;
tls_device_tutorial = nullptr;
}
-12
View File
@@ -35,18 +35,6 @@ namespace embree
filename.resize(filename.size()-1);
}
/*! returns path to home folder */
FileName FileName::homeFolder()
{
#ifdef __WIN32__
const char* home = getenv("UserProfile");
#else
const char* home = getenv("HOME");
#endif
if (home) return home;
return "";
}
/*! returns path to executable */
FileName FileName::executableFolder() {
return FileName(getExecutableFileName()).path();
-3
View File
@@ -20,9 +20,6 @@ namespace embree
/*! create a valid filename from a string */
FileName (const std::string& filename);
/*! returns path to home folder */
static FileName homeFolder();
/*! returns path to executable */
static FileName executableFolder();
+2 -2
View File
@@ -223,7 +223,7 @@ namespace embree
#if defined(EMBREE_SYCL_SUPPORT) && defined(__SYCL_DEVICE_ONLY__)
__forceinline unsigned int bsf(unsigned v) {
return SYCL_CTZ::ctz(v);
return sycl::ctz(v);
}
#else
@@ -248,7 +248,7 @@ namespace embree
#if defined(EMBREE_SYCL_SUPPORT) && defined(__SYCL_DEVICE_ONLY__)
__forceinline size_t bsf(size_t v) {
return SYCL_CTZ::ctz(v);
return sycl::ctz(v);
}
#else
+20 -49
View File
@@ -20,6 +20,7 @@
#include <cstring>
#include <stdint.h>
#include <functional>
#include <mutex>
#if defined(EMBREE_SYCL_SUPPORT)
@@ -33,13 +34,6 @@
#pragma clang diagnostic pop
#define SYCL_ONEAPI sycl
#define SYCL_EXT_ONEAPI sycl::ext::oneapi
#define SYCL_SUBGROUP sycl
#define SYCL_EXPERIMENTAL sycl::ext::oneapi::experimental
#define SYCL_INTEL sycl::ext::intel
#define SYCL_CTZ sycl
#include "sycl.h"
#if defined(EMBREE_SYCL_SUPPORT) && defined(__SYCL_DEVICE_ONLY__)
@@ -212,15 +206,11 @@
#define PRINT2(x,y) embree_cout << STRING(x) << " = " << (x) << ", " << STRING(y) << " = " << (y) << embree_endl
#define PRINT3(x,y,z) embree_cout << STRING(x) << " = " << (x) << ", " << STRING(y) << " = " << (y) << ", " << STRING(z) << " = " << (z) << embree_endl
#define PRINT4(x,y,z,w) embree_cout << STRING(x) << " = " << (x) << ", " << STRING(y) << " = " << (y) << ", " << STRING(z) << " = " << (z) << ", " << STRING(w) << " = " << (w) << embree_endl
#define PRINT5(x,y,z,w,a) embree_cout << STRING(x) << " = " << (x) << ", " << STRING(y) << " = " << (y) << ", " << STRING(z) << " = " << (z) << ", " << STRING(w) << " = " << (w) << ", " << STRING(a) << " = " << (a) << embree_endl
#define PRINT6(x,y,z,w,a,b) embree_cout << STRING(x) << " = " << (x) << ", " << STRING(y) << " = " << (y) << ", " << STRING(z) << " = " << (z) << ", " << STRING(w) << " = " << (w) << ", " << STRING(a) << " = " << (a) << ", " << STRING(b) << " = " << (b) << embree_endl
#define UPRINT(x) embree_cout_uniform << STRING(x) << " = " << (x) << embree_endl
#define UPRINT2(x,y) embree_cout_uniform << STRING(x) << " = " << (x) << ", " << STRING(y) << " = " << (y) << embree_endl
#define UPRINT3(x,y,z) embree_cout_uniform << STRING(x) << " = " << (x) << ", " << STRING(y) << " = " << (y) << ", " << STRING(z) << " = " << (z) << embree_endl
#define UPRINT4(x,y,z,w) embree_cout_uniform << STRING(x) << " = " << (x) << ", " << STRING(y) << " = " << (y) << ", " << STRING(z) << " = " << (z) << ", " << STRING(w) << " = " << (w) << embree_endl
#define UPRINT5(x,y,z,w,a) embree_cout_uniform << STRING(x) << " = " << (x) << ", " << STRING(y) << " = " << (y) << ", " << STRING(z) << " = " << (z) << ", " << STRING(w) << " = " << (w) << ", " << STRING(a) << " = " << (a) << embree_endl
#define UPRINT6(x,y,z,w,a,b) embree_cout_uniform << STRING(x) << " = " << (x) << ", " << STRING(y) << " = " << (y) << ", " << STRING(z) << " = " << (z) << ", " << STRING(w) << " = " << (w) << ", " << STRING(a) << " = " << (a) << ", " << STRING(b) << " = " << (b) << embree_endl
#if defined(DEBUG) // only report file and line in debug mode
#define THROW_RUNTIME_ERROR(str) \
@@ -365,49 +355,43 @@ __forceinline std::string toString(long long value) {
/// SYCL specific
////////////////////////////////////////////////////////////////////////////////
#if defined(__SYCL_DEVICE_ONLY__)
# define EMBREE_SYCL_SIMD(N) [[intel::reqd_sub_group_size(N)]]
#else
# define EMBREE_SYCL_SIMD(N)
#endif
#if defined(EMBREE_SYCL_SUPPORT) && defined(__SYCL_DEVICE_ONLY__)
#define sycl_printf0(format, ...) { \
static const CONSTANT char fmt[] = format; \
if (get_sub_group_local_id() == SYCL_CTZ::ctz(intel_sub_group_ballot(true))) \
SYCL_EXT_ONEAPI::experimental::printf(fmt, __VA_ARGS__ ); \
if (get_sub_group_local_id() == sycl::ctz(intel_sub_group_ballot(true))) \
sycl::ext::oneapi::experimental::printf(fmt, __VA_ARGS__ ); \
}
#define sycl_printf0_(format) { \
static const CONSTANT char fmt[] = format; \
if (get_sub_group_local_id() == SYCL_CTZ::ctz(intel_sub_group_ballot(true))) \
SYCL_EXT_ONEAPI::experimental::printf(fmt); \
if (get_sub_group_local_id() == sycl::ctz(intel_sub_group_ballot(true))) \
sycl::ext::oneapi::experimental::printf(fmt); \
}
#else
#define sycl_printf0(format, ...) { \
static const CONSTANT char fmt[] = format; \
SYCL_EXT_ONEAPI::experimental::printf(fmt, __VA_ARGS__ ); \
sycl::ext::oneapi::experimental::printf(fmt, __VA_ARGS__ ); \
}
#define sycl_printf0_(format) { \
static const CONSTANT char fmt[] = format; \
SYCL_EXT_ONEAPI::experimental::printf(fmt); \
sycl::ext::oneapi::experimental::printf(fmt); \
}
#endif
#define sycl_printf(format, ...) { \
static const CONSTANT char fmt[] = format; \
SYCL_EXT_ONEAPI::experimental::printf(fmt, __VA_ARGS__ ); \
sycl::ext::oneapi::experimental::printf(fmt, __VA_ARGS__ ); \
}
#define sycl_printf_(format) { \
static const CONSTANT char fmt[] = format; \
SYCL_EXT_ONEAPI::experimental::printf(fmt); \
sycl::ext::oneapi::experimental::printf(fmt); \
}
#if defined(EMBREE_SYCL_SUPPORT) && defined(__SYCL_DEVICE_ONLY__)
@@ -428,7 +412,7 @@ namespace embree
inline sycl_ostream_ operator <<(sycl_ostream_ cout, int i)
{
if (cout.uniform) {
if (get_sub_group_local_id() == SYCL_CTZ::ctz(intel_sub_group_ballot(true)))
if (get_sub_group_local_id() == sycl::ctz(intel_sub_group_ballot(true)))
sycl_printf("%i",i);
}
else
@@ -440,31 +424,18 @@ namespace embree
inline sycl_ostream_ operator <<(sycl_ostream_ cout, unsigned int i)
{
if (cout.uniform) {
if (get_sub_group_local_id() == SYCL_CTZ::ctz(intel_sub_group_ballot(true)))
if (get_sub_group_local_id() == sycl::ctz(intel_sub_group_ballot(true)))
sycl_printf("%u",i);
} else
sycl_printf("%u ",i);
return cout;
}
#if defined(__WIN32__) and defined(__INTEL_LLVM_COMPILER)
inline sycl_ostream_ operator <<(sycl_ostream_ cout, size_t i)
{
if (cout.uniform) {
if (get_sub_group_local_id() == SYCL_CTZ::ctz(intel_sub_group_ballot(true)))
sycl_printf("%i",i);
} else {
sycl_printf("%i ",i);
}
return cout;
}
#endif
inline sycl_ostream_ operator <<(sycl_ostream_ cout, float f)
{
if (cout.uniform) {
if (get_sub_group_local_id() == SYCL_CTZ::ctz(intel_sub_group_ballot(true)))
if (get_sub_group_local_id() == sycl::ctz(intel_sub_group_ballot(true)))
sycl_printf("%f",f);
} else
sycl_printf("%f ",f);
@@ -475,7 +446,7 @@ namespace embree
inline sycl_ostream_ operator <<(sycl_ostream_ cout, double d)
{
if (cout.uniform) {
if (get_sub_group_local_id() == SYCL_CTZ::ctz(intel_sub_group_ballot(true)))
if (get_sub_group_local_id() == sycl::ctz(intel_sub_group_ballot(true)))
sycl_printf("%f",d);
} else
sycl_printf("%f ",d);
@@ -483,10 +454,10 @@ namespace embree
return cout;
}
inline sycl_ostream_ operator <<(sycl_ostream_ cout, ulong l)
inline sycl_ostream_ operator <<(sycl_ostream_ cout, uint64_t l)
{
if (cout.uniform) {
if (get_sub_group_local_id() == SYCL_CTZ::ctz(intel_sub_group_ballot(true)))
if (get_sub_group_local_id() == sycl::ctz(intel_sub_group_ballot(true)))
sycl_printf("%lu",l);
} else
sycl_printf("%lu ",l);
@@ -497,7 +468,7 @@ namespace embree
inline sycl_ostream_ operator <<(sycl_ostream_ cout, long l)
{
if (cout.uniform) {
if (get_sub_group_local_id() == SYCL_CTZ::ctz(intel_sub_group_ballot(true)))
if (get_sub_group_local_id() == sycl::ctz(intel_sub_group_ballot(true)))
sycl_printf("%l",l);
} else
sycl_printf("%l ",l);
@@ -509,7 +480,7 @@ namespace embree
inline sycl_ostream_ operator <<(sycl_ostream_ cout, void* p)
{
if (cout.uniform) {
if (get_sub_group_local_id() == SYCL_CTZ::ctz(intel_sub_group_ballot(true)))
if (get_sub_group_local_id() == sycl::ctz(intel_sub_group_ballot(true)))
sycl_printf("%p",p);
} else
sycl_printf("%p ",p);
@@ -519,14 +490,14 @@ namespace embree
inline sycl_ostream_ operator <<(sycl_ostream_ cout, const char* c)
{
if (get_sub_group_local_id() == SYCL_CTZ::ctz(intel_sub_group_ballot(true)))
if (get_sub_group_local_id() == sycl::ctz(intel_sub_group_ballot(true)))
sycl_printf("%s",c);
return cout;
}
inline sycl_ostream_ operator <<(sycl_ostream_ cout, sycl_endl_)
{
if (get_sub_group_local_id() == SYCL_CTZ::ctz(intel_sub_group_ballot(true)))
if (get_sub_group_local_id() == sycl::ctz(intel_sub_group_ballot(true)))
sycl_printf_("\n");
return cout;
}
+65 -65
View File
@@ -20,23 +20,16 @@ using sycl::uint8;
using sycl::uint4;
using sycl::uint3;
using sycl::uint2;
using sycl::uint;
using sycl::ulong;
using sycl::uchar16;
using sycl::uchar8;
using sycl::uchar4;
using sycl::uchar3;
using sycl::uchar2;
using sycl::uchar;
using sycl::ushort16;
using sycl::ushort8;
using sycl::ushort4;
using sycl::ushort3;
using sycl::ushort2;
using sycl::ushort;
using sycl::fmax;
using sycl::fmin;
#ifdef __SYCL_DEVICE_ONLY__
#define GLOBAL __attribute__((opencl_global))
@@ -51,7 +44,7 @@ SYCL_EXTERNAL extern float atomic_min(volatile LOCAL float *p, float val);
SYCL_EXTERNAL extern float atomic_max(volatile GLOBAL float *p, float val);
SYCL_EXTERNAL extern float atomic_max(volatile LOCAL float *p, float val);
SYCL_EXTERNAL extern "C" uint intel_sub_group_ballot(bool valid);
SYCL_EXTERNAL extern "C" unsigned int intel_sub_group_ballot(bool valid);
SYCL_EXTERNAL extern "C" void __builtin_IB_assume_uniform(void *p);
@@ -91,32 +84,32 @@ SYCL_EXTERNAL extern "C" void __builtin_IB_assume_uniform(void *p);
///////////////////////////////////////////////////////////////////////
SYCL_EXTERNAL /* extern "C" */ uint __builtin_IB_lsc_load_global_uchar_to_uint (const GLOBAL sycl::uchar *base, int elemOff, enum LSC_LDCC cacheOpt); //D8U32
SYCL_EXTERNAL /* extern "C" */ uint __builtin_IB_lsc_load_global_ushort_to_uint(const GLOBAL sycl::ushort *base, int elemOff, enum LSC_LDCC cacheOpt); //D16U32
SYCL_EXTERNAL /* extern "C" */ uint __builtin_IB_lsc_load_global_uint (const GLOBAL sycl::uint *base, int elemOff, enum LSC_LDCC cacheOpt); //D32V1
SYCL_EXTERNAL /* extern "C" */ sycl::uint2 __builtin_IB_lsc_load_global_uint2 (const GLOBAL sycl::uint2 *base, int elemOff, enum LSC_LDCC cacheOpt); //D32V2
SYCL_EXTERNAL /* extern "C" */ sycl::uint3 __builtin_IB_lsc_load_global_uint3 (const GLOBAL sycl::uint3 *base, int elemOff, enum LSC_LDCC cacheOpt); //D32V3
SYCL_EXTERNAL /* extern "C" */ sycl::uint4 __builtin_IB_lsc_load_global_uint4 (const GLOBAL sycl::uint4 *base, int elemOff, enum LSC_LDCC cacheOpt); //D32V4
SYCL_EXTERNAL /* extern "C" */ sycl::uint8 __builtin_IB_lsc_load_global_uint8 (const GLOBAL sycl::uint8 *base, int elemOff, enum LSC_LDCC cacheOpt); //D32V8
SYCL_EXTERNAL /* extern "C" */ sycl::ulong __builtin_IB_lsc_load_global_ulong (const GLOBAL sycl::ulong *base, int elemOff, enum LSC_LDCC cacheOpt); //D64V1
SYCL_EXTERNAL /* extern "C" */ sycl::ulong2 __builtin_IB_lsc_load_global_ulong2(const GLOBAL sycl::ulong2 *base, int elemOff, enum LSC_LDCC cacheOpt); //D64V2
SYCL_EXTERNAL /* extern "C" */ sycl::ulong3 __builtin_IB_lsc_load_global_ulong3(const GLOBAL sycl::ulong3 *base, int elemOff, enum LSC_LDCC cacheOpt); //D64V3
SYCL_EXTERNAL /* extern "C" */ sycl::ulong4 __builtin_IB_lsc_load_global_ulong4(const GLOBAL sycl::ulong4 *base, int elemOff, enum LSC_LDCC cacheOpt); //D64V4
SYCL_EXTERNAL /* extern "C" */ sycl::ulong8 __builtin_IB_lsc_load_global_ulong8(const GLOBAL sycl::ulong8 *base, int elemOff, enum LSC_LDCC cacheOpt); //D64V8
SYCL_EXTERNAL /* extern "C" */ uint32_t __builtin_IB_lsc_load_global_uchar_to_uint (const GLOBAL uint8_t *base, int elemOff, enum LSC_LDCC cacheOpt); //D8U32
SYCL_EXTERNAL /* extern "C" */ uint32_t __builtin_IB_lsc_load_global_ushort_to_uint(const GLOBAL uint16_t *base, int elemOff, enum LSC_LDCC cacheOpt); //D16U32
SYCL_EXTERNAL /* extern "C" */ uint32_t __builtin_IB_lsc_load_global_uint (const GLOBAL uint32_t *base, int elemOff, enum LSC_LDCC cacheOpt); //D32V1
SYCL_EXTERNAL /* extern "C" */ sycl::uint2 __builtin_IB_lsc_load_global_uint2 (const GLOBAL sycl::uint2 *base, int elemOff, enum LSC_LDCC cacheOpt); //D32V2
SYCL_EXTERNAL /* extern "C" */ sycl::uint3 __builtin_IB_lsc_load_global_uint3 (const GLOBAL sycl::uint3 *base, int elemOff, enum LSC_LDCC cacheOpt); //D32V3
SYCL_EXTERNAL /* extern "C" */ sycl::uint4 __builtin_IB_lsc_load_global_uint4 (const GLOBAL sycl::uint4 *base, int elemOff, enum LSC_LDCC cacheOpt); //D32V4
SYCL_EXTERNAL /* extern "C" */ sycl::uint8 __builtin_IB_lsc_load_global_uint8 (const GLOBAL sycl::uint8 *base, int elemOff, enum LSC_LDCC cacheOpt); //D32V8
SYCL_EXTERNAL /* extern "C" */ uint64_t __builtin_IB_lsc_load_global_ulong (const GLOBAL uint64_t *base, int elemOff, enum LSC_LDCC cacheOpt); //D64V1
SYCL_EXTERNAL /* extern "C" */ sycl::ulong2 __builtin_IB_lsc_load_global_ulong2 (const GLOBAL sycl::ulong2 *base, int elemOff, enum LSC_LDCC cacheOpt); //D64V2
SYCL_EXTERNAL /* extern "C" */ sycl::ulong3 __builtin_IB_lsc_load_global_ulong3 (const GLOBAL sycl::ulong3 *base, int elemOff, enum LSC_LDCC cacheOpt); //D64V3
SYCL_EXTERNAL /* extern "C" */ sycl::ulong4 __builtin_IB_lsc_load_global_ulong4 (const GLOBAL sycl::ulong4 *base, int elemOff, enum LSC_LDCC cacheOpt); //D64V4
SYCL_EXTERNAL /* extern "C" */ sycl::ulong8 __builtin_IB_lsc_load_global_ulong8 (const GLOBAL sycl::ulong8 *base, int elemOff, enum LSC_LDCC cacheOpt); //D64V8
// global address space
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_uchar_from_uint (GLOBAL sycl::uchar *base, int immElemOff, uint val, enum LSC_STCC cacheOpt); //D8U32
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_ushort_from_uint(GLOBAL sycl::ushort *base, int immElemOff, uint val, enum LSC_STCC cacheOpt); //D16U32
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_uint (GLOBAL sycl::uint *base, int immElemOff, uint val, enum LSC_STCC cacheOpt); //D32V1
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_uint2 (GLOBAL sycl::uint2 *base, int immElemOff, sycl::uint2 val, enum LSC_STCC cacheOpt); //D32V2
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_uint3 (GLOBAL sycl::uint3 *base, int immElemOff, sycl::uint3 val, enum LSC_STCC cacheOpt); //D32V3
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_uint4 (GLOBAL sycl::uint4 *base, int immElemOff, sycl::uint4 val, enum LSC_STCC cacheOpt); //D32V4
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_uint8 (GLOBAL sycl::uint8 *base, int immElemOff, sycl::uint8 val, enum LSC_STCC cacheOpt); //D32V8
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_ulong (GLOBAL sycl::ulong *base, int immElemOff, sycl::ulong val, enum LSC_STCC cacheOpt); //D64V1
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_ulong2(GLOBAL sycl::ulong2 *base, int immElemOff, sycl::ulong2 val, enum LSC_STCC cacheOpt); //D64V2
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_ulong3(GLOBAL sycl::ulong3 *base, int immElemOff, sycl::ulong3 val, enum LSC_STCC cacheOpt); //D64V3
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_ulong4(GLOBAL sycl::ulong4 *base, int immElemOff, sycl::ulong4 val, enum LSC_STCC cacheOpt); //D64V4
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_ulong8(GLOBAL sycl::ulong8 *base, int immElemOff, sycl::ulong8 val, enum LSC_STCC cacheOpt); //D64V8
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_uchar_from_uint (GLOBAL uint8_t *base, int immElemOff, uint32_t val, enum LSC_STCC cacheOpt); //D8U32
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_ushort_from_uint(GLOBAL uint16_t *base, int immElemOff, uint32_t val, enum LSC_STCC cacheOpt); //D16U32
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_uint (GLOBAL uint32_t *base, int immElemOff, uint32_t val, enum LSC_STCC cacheOpt); //D32V1
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_uint2 (GLOBAL sycl::uint2 *base, int immElemOff, sycl::uint2 val, enum LSC_STCC cacheOpt); //D32V2
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_uint3 (GLOBAL sycl::uint3 *base, int immElemOff, sycl::uint3 val, enum LSC_STCC cacheOpt); //D32V3
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_uint4 (GLOBAL sycl::uint4 *base, int immElemOff, sycl::uint4 val, enum LSC_STCC cacheOpt); //D32V4
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_uint8 (GLOBAL sycl::uint8 *base, int immElemOff, sycl::uint8 val, enum LSC_STCC cacheOpt); //D32V8
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_ulong (GLOBAL uint64_t *base, int immElemOff, uint64_t val, enum LSC_STCC cacheOpt); //D64V1
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_ulong2 (GLOBAL sycl::ulong2 *base, int immElemOff, sycl::ulong2 val, enum LSC_STCC cacheOpt); //D64V2
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_ulong3 (GLOBAL sycl::ulong3 *base, int immElemOff, sycl::ulong3 val, enum LSC_STCC cacheOpt); //D64V3
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_ulong4 (GLOBAL sycl::ulong4 *base, int immElemOff, sycl::ulong4 val, enum LSC_STCC cacheOpt); //D64V4
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_ulong8 (GLOBAL sycl::ulong8 *base, int immElemOff, sycl::ulong8 val, enum LSC_STCC cacheOpt); //D64V8
///////////////////////////////////////////////////////////////////////
// prefetching
@@ -124,14 +117,14 @@ SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_store_global_ulong8(GLOBAL sycl
//
// LSC Pre-Fetch Load functions with CacheControls
// global address space
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_uchar (const GLOBAL sycl::uchar *base, int immElemOff, enum LSC_LDCC cacheOpt); //D8U32
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_ushort(const GLOBAL sycl::ushort *base, int immElemOff, enum LSC_LDCC cacheOpt); //D16U32
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_uint (const GLOBAL sycl::uint *base, int immElemOff, enum LSC_LDCC cacheOpt); //D32V1
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_uint2 (const GLOBAL sycl::uint2 *base, int immElemOff, enum LSC_LDCC cacheOpt); //D32V2
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_uint3 (const GLOBAL sycl::uint3 *base, int immElemOff, enum LSC_LDCC cacheOpt); //D32V3
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_uint4 (const GLOBAL sycl::uint4 *base, int immElemOff, enum LSC_LDCC cacheOpt); //D32V4
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_uint8 (const GLOBAL sycl::uint8 *base, int immElemOff, enum LSC_LDCC cacheOpt); //D32V8
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_ulong (const GLOBAL sycl::ulong *base, int immElemOff, enum LSC_LDCC cacheOpt); //D64V1
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_uchar (const GLOBAL uint8_t *base, int immElemOff, enum LSC_LDCC cacheOpt); //D8U32
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_ushort(const GLOBAL uint16_t *base, int immElemOff, enum LSC_LDCC cacheOpt); //D16U32
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_uint (const GLOBAL uint32_t *base, int immElemOff, enum LSC_LDCC cacheOpt); //D32V1
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_uint2 (const GLOBAL sycl::uint2 *base, int immElemOff, enum LSC_LDCC cacheOpt); //D32V2
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_uint3 (const GLOBAL sycl::uint3 *base, int immElemOff, enum LSC_LDCC cacheOpt); //D32V3
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_uint4 (const GLOBAL sycl::uint4 *base, int immElemOff, enum LSC_LDCC cacheOpt); //D32V4
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_uint8 (const GLOBAL sycl::uint8 *base, int immElemOff, enum LSC_LDCC cacheOpt); //D32V8
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_ulong (const GLOBAL uint64_t *base, int immElemOff, enum LSC_LDCC cacheOpt); //D64V1
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_ulong2(const GLOBAL sycl::ulong2 *base, int immElemOff, enum LSC_LDCC cacheOpt); //D64V2
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_ulong3(const GLOBAL sycl::ulong3 *base, int immElemOff, enum LSC_LDCC cacheOpt); //D64V3
SYCL_EXTERNAL extern "C" void __builtin_IB_lsc_prefetch_global_ulong4(const GLOBAL sycl::ulong4 *base, int immElemOff, enum LSC_LDCC cacheOpt); //D64V4
@@ -150,14 +143,14 @@ inline float work_group_reduce_max(float x) { return x; }
inline float atomic_min(volatile float *p, float val) { return val; };
inline float atomic_max(volatile float *p, float val) { return val; };
inline uint intel_sub_group_ballot(bool valid) { return 0; }
inline uint32_t intel_sub_group_ballot(bool valid) { return 0; }
#endif
/* creates a temporary that is enforced to be uniform */
#define SYCL_UNIFORM_VAR(Ty,tmp,k) \
Ty tmp##_data; \
Ty* p##tmp##_data = (Ty*) sub_group_broadcast((ulong)&tmp##_data,k); \
Ty* p##tmp##_data = (Ty*) sub_group_broadcast((uint64_t)&tmp##_data,k); \
Ty& tmp = *p##tmp##_data;
#if !defined(__forceinline)
@@ -188,48 +181,55 @@ namespace embree
return sycl::select(b,a,mask);
}
__forceinline const SYCL_EXT_ONEAPI::sub_group this_sub_group() {
return SYCL_EXPERIMENTAL::this_sub_group();
#define XSTR(x) STR(x)
#define STR(x) #x
__forceinline const sycl::sub_group this_sub_group() {
#if __LIBSYCL_MAJOR_VERSION >= 8
return sycl::ext::oneapi::this_work_item::get_sub_group();
#else
return sycl::ext::oneapi::experimental::this_sub_group();
#endif
}
__forceinline const uint get_sub_group_local_id() {
__forceinline const uint32_t get_sub_group_local_id() {
return this_sub_group().get_local_id()[0];
}
__forceinline const uint get_sub_group_size() {
__forceinline const uint32_t get_sub_group_size() {
return this_sub_group().get_max_local_range().size();
}
__forceinline const uint get_sub_group_id() {
__forceinline const uint32_t get_sub_group_id() {
return this_sub_group().get_group_id()[0];
}
__forceinline const uint get_num_sub_groups() {
__forceinline const uint32_t get_num_sub_groups() {
return this_sub_group().get_group_range().size();
}
__forceinline uint sub_group_ballot(bool pred) {
__forceinline uint32_t sub_group_ballot(bool pred) {
return intel_sub_group_ballot(pred);
}
__forceinline bool sub_group_all_of(bool pred) {
return SYCL_ONEAPI::all_of_group(this_sub_group(),pred);
return sycl::all_of_group(this_sub_group(),pred);
}
__forceinline bool sub_group_any_of(bool pred) {
return SYCL_ONEAPI::any_of_group(this_sub_group(),pred);
return sycl::any_of_group(this_sub_group(),pred);
}
__forceinline bool sub_group_none_of(bool pred) {
return SYCL_ONEAPI::none_of_group(this_sub_group(),pred);
return sycl::none_of_group(this_sub_group(),pred);
}
template <typename T> __forceinline T sub_group_broadcast(T x, sycl::id<1> local_id) {
return SYCL_SUBGROUP::group_broadcast<SYCL_EXT_ONEAPI::sub_group>(this_sub_group(),x,local_id);
return sycl::group_broadcast<sycl::sub_group>(this_sub_group(),x,local_id);
}
template <typename T> __forceinline T sub_group_make_uniform(T x) {
return sub_group_broadcast(x,SYCL_CTZ::ctz(intel_sub_group_ballot(true)));
return sub_group_broadcast(x,sycl::ctz(intel_sub_group_ballot(true)));
}
__forceinline void assume_uniform_array(void* ptr) {
@@ -239,47 +239,47 @@ namespace embree
}
template <typename T, class BinaryOperation> __forceinline T sub_group_reduce(T x, BinaryOperation binary_op) {
return SYCL_SUBGROUP::reduce_over_group<SYCL_EXT_ONEAPI::sub_group>(this_sub_group(),x,binary_op);
return sycl::reduce_over_group<sycl::sub_group>(this_sub_group(),x,binary_op);
}
template <typename T, class BinaryOperation> __forceinline T sub_group_reduce(T x, T init, BinaryOperation binary_op) {
return SYCL_SUBGROUP::reduce_over_group<SYCL_EXT_ONEAPI::sub_group>(this_sub_group(),x,init,binary_op);
return sycl::reduce_over_group<sycl::sub_group>(this_sub_group(),x,init,binary_op);
}
template <typename T> __forceinline T sub_group_reduce_min(T x, T init) {
return sub_group_reduce(x, init, SYCL_EXT_ONEAPI::minimum<T>());
return sub_group_reduce(x, init, sycl::ext::oneapi::minimum<T>());
}
template <typename T> __forceinline T sub_group_reduce_min(T x) {
return sub_group_reduce(x, SYCL_EXT_ONEAPI::minimum<T>());
return sub_group_reduce(x, sycl::ext::oneapi::minimum<T>());
}
template <typename T> __forceinline T sub_group_reduce_max(T x) {
return sub_group_reduce(x, SYCL_EXT_ONEAPI::maximum<T>());
return sub_group_reduce(x, sycl::ext::oneapi::maximum<T>());
}
template <typename T> __forceinline T sub_group_reduce_add(T x) {
return sub_group_reduce(x, SYCL_EXT_ONEAPI::plus<T>());
return sub_group_reduce(x, sycl::ext::oneapi::plus<T>());
}
template <typename T, class BinaryOperation> __forceinline T sub_group_exclusive_scan(T x, BinaryOperation binary_op) {
return SYCL_SUBGROUP::exclusive_scan_over_group(this_sub_group(),x,binary_op);
return sycl::exclusive_scan_over_group(this_sub_group(),x,binary_op);
}
template <typename T, class BinaryOperation> __forceinline T sub_group_exclusive_scan_min(T x) {
return sub_group_exclusive_scan(x,SYCL_EXT_ONEAPI::minimum<T>());
return sub_group_exclusive_scan(x,sycl::ext::oneapi::minimum<T>());
}
template <typename T, class BinaryOperation> __forceinline T sub_group_exclusive_scan(T x, T init, BinaryOperation binary_op) {
return SYCL_SUBGROUP::exclusive_scan_over_group(this_sub_group(),x,init,binary_op);
return sycl::exclusive_scan_over_group(this_sub_group(),x,init,binary_op);
}
template <typename T, class BinaryOperation> __forceinline T sub_group_inclusive_scan(T x, BinaryOperation binary_op) {
return SYCL_SUBGROUP::inclusive_scan_over_group(this_sub_group(),x,binary_op);
return sycl::inclusive_scan_over_group(this_sub_group(),x,binary_op);
}
template <typename T, class BinaryOperation> __forceinline T sub_group_inclusive_scan(T x, BinaryOperation binary_op, T init) {
return SYCL_SUBGROUP::inclusive_scan_over_group(this_sub_group(),x,binary_op,init);
return sycl::inclusive_scan_over_group(this_sub_group(),x,binary_op,init);
}
template <typename T> __forceinline T sub_group_shuffle(T x, sycl::id<1> local_id) {
+13
View File
@@ -344,6 +344,19 @@ namespace embree
if (cpuid_leaf_7[EBX] & CPU_FEATURE_BIT_AVX512VL ) cpu_features |= CPU_FEATURE_AVX512VL;
if (cpuid_leaf_7[ECX] & CPU_FEATURE_BIT_AVX512VBMI) cpu_features |= CPU_FEATURE_AVX512VBMI;
#if defined(__MACOSX__)
if ( (cpu_features & CPU_FEATURE_AVX512F)
|| (cpu_features & CPU_FEATURE_AVX512DQ)
|| (cpu_features & CPU_FEATURE_AVX512CD)
|| (cpu_features & CPU_FEATURE_AVX512BW)
|| (cpu_features & CPU_FEATURE_AVX512VL) )
{
// on macOS AVX512 will be enabled automatically by the kernel when the first AVX512 instruction is called
// see https://github.com/apple/darwin-xnu/blob/0a798f6738bc1db01281fc08ae024145e84df927/osfmk/i386/fpu.c#L176
// therefore we ignore the state of XCR0
cpu_features |= CPU_FEATURE_ZMM_ENABLED;
}
#endif
return cpu_features;
#elif defined(__ARM_NEON) || defined(__EMSCRIPTEN__)
+4 -2
View File
@@ -150,7 +150,8 @@ namespace embree
{
Lock<MutexSys> lock(g_mutex);
assert(newNumThreads);
newNumThreads = min(newNumThreads, (size_t) getNumberOfLogicalThreads());
if (newNumThreads == std::numeric_limits<size_t>::max())
newNumThreads = (size_t) getNumberOfLogicalThreads();
numThreads = newNumThreads;
if (!startThreads && !running) return;
@@ -230,7 +231,8 @@ namespace embree
TaskScheduler::TaskScheduler()
: threadCounter(0), anyTasksRunning(0), hasRootTask(false)
{
threadLocal.resize(2*getNumberOfLogicalThreads()); // FIXME: this has to be 2x as in the compatibility join mode with rtcCommitScene the worker threads also join. When disallowing rtcCommitScene to join a build we can remove the 2x.
assert(threadPool);
threadLocal.resize(2 * TaskScheduler::threadCount()); // FIXME: this has to be 2x as in the compatibility join mode with rtcCommitScene the worker threads also join. When disallowing rtcCommitScene to join a build we can remove the 2x.
for (size_t i=0; i<threadLocal.size(); i++)
threadLocal[i].store(nullptr);
}
+1
View File
@@ -12,6 +12,7 @@ endif()
string(REGEX REPLACE "\n$" "" intelstyle_url "${intelstyle_url}")
string(REPLACE "embree" "intelstyle" intelstyle_url "${intelstyle_url}")
string(REPLACE "libraries" "documentation" intelstyle_url "${intelstyle_url}")
message(STATUS "Fetch intelstyle repository ${intelstyle_url}")
include(FetchContent)
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

+19
View File
@@ -184,6 +184,11 @@
```
\pagebreak
## RTC_GEOMETRY_TYPE_INSTANCE_ARRAY
``` {include=src/api/RTC_GEOMETRY_TYPE_INSTANCE_ARRAY.md}
```
\pagebreak
## RTCCurveFlags
``` {include=src/api/RTCCurveFlags.md}
```
@@ -355,6 +360,11 @@
```
\pagebreak
## rtcSetGeometryInstancedScenes
``` {include=src/api/rtcSetGeometryInstancedScenes.md}
```
\pagebreak
## rtcSetGeometryTransform
``` {include=src/api/rtcSetGeometryTransform.md}
```
@@ -370,6 +380,15 @@
```
\pagebreak
## rtcGetGeometryTransformEx
``` {include=src/api/rtcGetGeometryTransformEx.md}
```
\pagebreak
## rtcGetGeometryTransformFromScene
``` {include=src/api/rtcGetGeometryTransformFromScene.md}
```
\pagebreak
## rtcSetGeometryTessellationRate
``` {include=src/api/rtcSetGeometryTessellationRate.md}
+1 -16
View File
@@ -117,7 +117,7 @@ e.g. just triangles in this example.
Inside the SYCL `parallel_for` loop you can use rendering related functions,
such as the `rtcIntersect1` and `rtcOccluded1` functions to trace rays,
`rtcForwardIntersect1` and `rtcForwardOccluded1` to continue object
`rtcForwardIntersect1/Ex` and `rtcForwardOccluded1/Ex` to continue object
traversal from inside a user geometry callback,
and `rtcGetGeometryUserDataFromScene` to get the user data pointer of some
geometry.
@@ -224,21 +224,6 @@ Embree SYCL Known Issues
quality, and GPU performance may not reflect that of the final
product.
- Currently only the following Intel® Arc™ GPUs are support:
- Intel® Arc™ A770 Graphics
- Intel® Arc™ A750 Graphics
- Intel® Arc™ A770M Graphics
- Intel® Arc™ A730M Graphics
- Intel® Arc™ A550M Graphics
- Intel® Data Center GPU Max Series is currently not supported.
- Ahead of time compilation is currently not working properly and you
will get this error during compilation:
llvm-foreach: Floating point exception (core dumped)
- Compilation with build configuration "debug" is currently not working on
Windows.
+6
View File
@@ -26,6 +26,8 @@
RTC_BUFFER_TYPE_VERTEX_CREASE_INDEX = 20,
RTC_BUFFER_TYPE_VERTEX_CREASE_WEIGHT = 21,
RTC_BUFFER_TYPE_HOLE = 22,
RTC_BUFFER_TYPE_TRANSFORM = 23,
RTC_BUFFER_TYPE_FLAGS = 32
};
@@ -60,6 +62,10 @@ The `RTC_BUFFER_TYPE_FACE`, `RTC_BUFFER_TYPE_LEVEL`,
special buffers required to create subdivision meshes (see
[RTC_GEOMETRY_TYPE_SUBDIVISION]).
The `RTC_BUFFER_TYPE_TRANSFORM` buffer is used to provide instance
transformation information for instance array geometries (see
[RTC_GEOMETRY_TYPE_INSTANCE_ARRAY]).
The `RTC_BUFFER_TYPE_FLAGS` can get used to add additional flag per
primitive of a geometry, and is currently only used for linear curves.
+13 -8
View File
@@ -39,6 +39,8 @@
RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR,
RTC_FORMAT_GRID,
RTC_FORMAT_QUATERNION_DECOMPOSITION
};
#### DESCRIPTION
@@ -58,14 +60,16 @@ of (size 2,3,4, etc.). This format is typcally used to specify to
format of vertex buffers, e.g. the `RTC_FORMAT_FLOAT3` type for vertex
buffers of triangle meshes.
The `RTC_FORMAT_FLOAT3X4_ROW_MAJOR` and
`RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR` formats, specify a 3x4 floating
point matrix layed out either row major or column major. The
`RTC_FORMAT_FLOAT4X4_ROW_MAJOR` and `RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR`
formats, specify a 4x4 floating point matrix layed out either row
major or column major. These matrix formats are used in the
[rtcSetGeometryTransform] function in order to set a transformation
matrix for geometries.
The `RTC_FORMAT_FLOAT3X4_ROW_MAJOR` and `RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR`
formats, specify a 3x4 floating point matrix layed out either row major or
column major. The `RTC_FORMAT_FLOAT4X4_ROW_MAJOR` and
`RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR` formats, specify a 4x4 floating point matrix
layed out either row major or column major. The
`RTC_FORMAT_QUATERNION_DECOMPOSITION` format specifies a structure that
represents a quaternion decomposition (see [RTCQuaternionDecomposition]) of an affine
transformation. These formats are used in the [rtcSetGeometryTransform]
function or in geometry buffers with type `RTC_BUFFER_TYPE_TRANSFORM` in order
to set a transformation matrix for instance and instance array geometries.
The `RTC_FORMAT_GRID` is a special data format used to specify grid
primitives of layout RTCGrid when creating grid geometries
@@ -77,3 +81,4 @@ primitives of layout RTCGrid when creating grid geometries
[rtcSetGeometryBuffer], [rtcSetSharedGeometryBuffer],
[rtcSetNewGeometryBuffer], [rtcSetGeometryTransform]
[RTCQuaternionDecomposition]
@@ -0,0 +1,79 @@
% RTC_GEOMETRY_TYPE_INSTANCE_ARRAY(3) | Embree Ray Tracing Kernels 4
#### NAME
RTC_GEOMETRY_TYPE_INSTANCE_ARRAY - instance array geometry type
#### SYNOPSIS
#include <embree4/rtcore.h>
RTCGeometry geometry =
rtcNewGeometry(device, RTC_GEOMETRY_TYPE_INSTANCE_ARRAY);
#### DESCRIPTION
Embree supports instance arrays, which is a more memory efficient way to
represent large amounts of instances of the same or a small set of (sub)scenes.
The main difference to regular Embree instances is that Embree instance arrays
have a buffer of transformations (either affine transformations or quaternion
decompositions [RTCQuaternionDecomposition]) that can be allocated by
Embree or a shared buffer, similar to vertex buffers for triangle meshes.
Optionally, instead of instancing only one scene, an instance array can instance
multiple scenes by passing an array of scenes and a corresponding
index buffer that specifies which instance of the instance array instances
which of the scenes in the scenes array.
Instance arrays are created by passing `RTC_GEOMETRY_TYPE_INSTANCE_ARRAY` to
the `rtcNewGeometry` function call. The instanced scene can be either be set
using the `rtcSetGeometryInstancedScene` call, or if multiple scenes should be
instanced by passing an array of scenes using `rtcSetGeometryInstancedScenes`.
The latter also requires to specify an index buffer using
`rtcSetNewGeometryBuffer` or `rtcSetSharedGeometryBuffer` with
`RTC_BUFFER_TYPE_INDEX` as the buffer type.
Because the transformation information can become large for a large amount of
instances, the instance array allows to share the transformation buffer between
the user application and Embree. It can be either stored in a buffer created by
Embree with `rtcSetNewGeometryBuffer` or an already existing buffer can be
shared using `rtcSetSharedGeometryBuffer`. In either case, the buffer type has
to be `RTC_BUFFER_TYPE_TRANSFORM` and the allowed formats are
`RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR`, `RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR`,
`RTC_FORMAT_FLOAT3X4_ROW_MAJOR`, and `RTC_FORMAT_QUATERNION_DECOMPOSITION`.
Embree will not modify the data in the transformation buffer.
Embree instance arrays support both single-level instancing and multi-level instancing.
The maximum instance nesting depth is `RTC_MAX_INSTANCE_LEVEL_COUNT`; it
can be configured at compile-time using the constant `EMBREE_MAX_INSTANCE_LEVEL_COUNT`.
Users should adapt this constant to their needs: instances nested any deeper are silently
ignored in release mode, and cause assertions in debug mode.
Please note that `rtcCommitScene` on the instanced scene(s) should be
called first, followed by `rtcCommitGeometry` on the instance array,
followed by `rtcCommitScene` for the top-level scene containing the
instance array.
If a ray hits the instance, the `geomID` and `primID` members of the hit are
set to the geometry ID and primitive ID of the hit primitive in the instanced
scene. The `instID` member of the hit is set to the geometry ID of the instance
array in the top-level scene and the `instPrimID` member is set to the index of
the hit instance of the instance array.
For multi-segment motion blur, the number of time steps must be first specified
using the `rtcSetGeometryTimeStepCount` function. Then a transformation for
each time step can be specified using the `rtcSetNewGeometryBuffer` or
`rtcSetSharedGeometryBuffer` function and passing the time step as the `slot`
parameter of these calls.
See the [Instance Array Geometry] tutorial for an example of how to use instance arrays.
#### EXIT STATUS
On failure `NULL` is returned and an error code is set that can be
queried using `rtcGetDeviceError`.
#### SEE ALSO
[rtcNewGeometry], [rtcSetGeometryInstancedScene],
[rtcSetGeometryInstancedScenes], [rtcSetNewGeometryBuffer],
[rtcSetSharedGeometryBuffer], [rtcGetGeometryTransformEx]
+23 -11
View File
@@ -1,8 +1,8 @@
% rtcForwardIntersect1(3) | Embree Ray Tracing Kernels 4
% rtcForwardIntersect1/Ex(3) | Embree Ray Tracing Kernels 4
#### NAME
rtcForwardIntersect1 - forwards a single ray to new scene
rtcForwardIntersect1/Ex - forwards a single ray to new scene
from user geometry callback
#### SYNOPSIS
@@ -16,16 +16,23 @@
unsigned int instID
);
void rtcForwardIntersect1Ex(
const struct RTCIntersectFunctionNArguments* args,
RTCScene scene,
struct RTCRay* ray,
unsigned int instID,
unsigned int instPrimID,
);
#### DESCRIPTION
The `rtcForwardIntersect1` function forwards the traversal of a
transformed ray (`ray` argument) into a scene (`scene` argument) from
a user geometry callback. The function can only get invoked from a
user geometry callback for a ray traversal initiated with the
`rtcIntersect1` function. The callback arguments structure of the
callback invokation has to get passed to the ray forwarding (`args`
argument). The user geometry callback should instantly terminate after
invoking the `rtcForwardIntersect1` function.
The `rtcForwardIntersect1` and `rtcForwardIntersect1Ex` functions forward the
traversal of a transformed ray (`ray` argument) into a scene (`scene` argument)
from a user geometry callback. The function can only get invoked from a user
geometry callback for a ray traversal initiated with the `rtcIntersect1`
function. The callback arguments structure of the callback invokation has to
get passed to the ray forwarding (`args` argument). The user geometry callback
should instantly terminate after invoking the `rtcForwardIntersect1/Ex` function.
Only the ray origin and ray direction members of the ray
argument are used for forwarding, all additional ray properties are
@@ -42,10 +49,15 @@ This function can get used to implement user defined instancing using
user geometries, e.g. by transforming the ray in a special way, and/or
selecting between different scenes to instantiate.
For user defined instance arrays, the `rtcForwardIntersect1Ex` variant has an
additional `instPrimID` argument which is pushed to the instance primitive ID
stack. Instance primitive IDs identify which instance of an instance array was
hit.
When using Embree on the CPU it is possible to recursively invoke
`rtcIntersect1` directly from a user geometry callback. However, when
SYCL is used, recursively tracing rays is not directly supported, and
the `rtcForwardIntersect1` function must be used.
the `rtcForwardIntersect1/Ex` functions must be used.
The ray structure must be aligned to 16 bytes.
+46 -13
View File
@@ -1,8 +1,8 @@
% rtcForwardIntersect4/8/16(3) | Embree Ray Tracing Kernels 4
% rtcForwardIntersect4/8/16/Ex(3) | Embree Ray Tracing Kernels 4
#### NAME
rtcForwardIntersect4/8/16 - forwards a ray packet to new scene
rtcForwardIntersect4/8/16/Ex - forwards a ray packet to new scene
from user geometry callback
#### SYNOPSIS
@@ -17,11 +17,11 @@
unsigned int instID
);
void rtcForwardIntersect4(
void rtcForwardIntersect8(
void int* valid,
const struct RTCIntersectFunctionNArguments* args,
RTCScene scene,
struct RTCRay4* ray,
struct RTCRay8* ray,
unsigned int instID
);
@@ -30,19 +30,47 @@
const struct RTCIntersectFunctionNArguments* args,
RTCScene scene,
struct RTCRay16* ray,
unsigned int instID
unsigned int instID,
unsigned int instPrimID
);
void rtcForwardIntersect4Ex(
void int* valid,
const struct RTCIntersectFunctionNArguments* args,
RTCScene scene,
struct RTCRay4* ray,
unsigned int instID,
unsigned int instPrimID
);
void rtcForwardIntersect8Ex(
void int* valid,
const struct RTCIntersectFunctionNArguments* args,
RTCScene scene,
struct RTCRay8* ray,
unsigned int instID,
unsigned int instPrimID
);
void rtcForwardIntersect16Ex(
void int* valid,
const struct RTCIntersectFunctionNArguments* args,
RTCScene scene,
struct RTCRay16* ray,
unsigned int instID,
unsigned int instPrimID
);
#### DESCRIPTION
The `rtcForwardIntersect4/8/16` functions forward the traversal of a
transformed ray packet (`ray` argument) into a scene (`scene` argument) from
a user geometry callback. The function can only get invoked from a
user geometry callback for a ray traversal initiated with the
`rtcIntersect4/8/16` function. The callback arguments structure of the
callback invokation has to get passed to the ray forwarding (`args`
argument). The user geometry callback should instantly terminate after
invoking the `rtcForwardIntersect4/8/16` function.
The `rtcForwardIntersect4/8/16` and `rtcForwardIntersect4/8/16Ex` functions
forward the traversal of a transformed ray packet (`ray` argument) into a scene
(`scene` argument) from a user geometry callback. The function can only get
invoked from a user geometry callback for a ray traversal initiated with the
`rtcIntersect4/8/16` function. The callback arguments structure of the callback
invokation has to get passed to the ray forwarding (`args` argument). The user
geometry callback should instantly terminate after invoking the
`rtcForwardIntersect4/8/16/Ex` function.
Only the ray origin and ray direction members of the ray
argument are used for forwarding, all additional ray properties are
@@ -59,6 +87,11 @@ This function can get used to implement user defined instancing using
user geometries, e.g. by transforming the ray in a special way, and/or
selecting between different scenes to instantiate.
For user defined instance arrays, the `rtcForwardIntersect4/8/16Ex` variant has an
additional `instPrimID` argument which is pushed to the instance primitive ID
stack. Instance primitive IDs identify which instance of an instance array was
hit.
When using Embree on the CPU it is possible to recursively invoke
`rtcIntersect4/8/16` directly from a user geometry callback. However, when
SYCL is used, recursively tracing rays is not directly supported, and
+23 -11
View File
@@ -1,8 +1,8 @@
% rtcForwardOccluded1(3) | Embree Ray Tracing Kernels 4
% rtcForwardOccluded1/Ex(3) | Embree Ray Tracing Kernels 4
#### NAME
rtcForwardOccluded1 - forwards a single ray to new scene
rtcForwardOccluded1/Ex - forwards a single ray to new scene
from user geometry callback
#### SYNOPSIS
@@ -16,16 +16,23 @@
unsigned int instID
);
void rtcForwardOccluded1(
const struct RTCOccludedFunctionNArguments* args,
RTCScene scene,
struct RTCRay* ray,
unsigned int instID,
unsigned int instPrimID
);
#### DESCRIPTION
The `rtcForwardOccluded1` function forwards the traversal of a
transformed ray (`ray` argument) into a scene (`scene` argument) from
a user geometry callback. The function can only get invoked from a
user geometry callback for a ray traversal initiated with the
`rtcOccluded1` function. The callback arguments structure of the
callback invokation has to get passed to the ray forwarding (`args`
argument). The user geometry callback should instantly terminate after
invoking the `rtcForwardOccluded1` function.
The `rtcForwardOccluded1` and `rtcForwardOccluded1Ex` functions forward the
traversal of a transformed ray (`ray` argument) into a scene (`scene` argument)
from a user geometry callback. The function can only get invoked from a user
geometry callback for a ray traversal initiated with the `rtcOccluded1`
function. The callback arguments structure of the callback invokation has to
get passed to the ray forwarding (`args` argument). The user geometry callback
should instantly terminate after invoking the `rtcForwardOccluded1/Ex` function.
Only the ray origin and ray direction members of the ray
argument are used for forwarding, all additional ray properties are
@@ -42,10 +49,15 @@ This function can get used to implement user defined instancing using
user geometries, e.g. by transforming the ray in a special way, and/or
selecting between different scenes to instantiate.
For user defined instance arrays, the `rtcForwardIntersect1Ex` variant has an
additional `instPrimID` argument which is pushed to the instance primitive ID
stack. Instance primitive IDs identify which instance of an instance array was
hit.
When using Embree on the CPU it is possible to recursively invoke
`rtcOccluded1` directly from a user geometry callback. However, when
SYCL is used, recursively tracing rays is not directly supported, and
the `rtcForwardOccluded1` function must be used.
the `rtcForwardOccluded1/Ex` function must be used.
The ray structure must be aligned to 16 bytes.
+44 -12
View File
@@ -1,8 +1,8 @@
% rtcForwardOccluded4/8/16(3) | Embree Ray Tracing Kernels 4
% rtcForwardOccluded4/8/16/Ex(3) | Embree Ray Tracing Kernels 4
#### NAME
rtcForwardOccluded4/8/16 - forwards a ray packet to new scene
rtcForwardOccluded4/8/16/Ex - forwards a ray packet to new scene
from user geometry callback
#### SYNOPSIS
@@ -17,11 +17,11 @@
unsigned int instID
);
void rtcForwardOccluded4(
void rtcForwardOccluded8(
void int* valid,
const struct RTCOccludedFunctionNArguments* args,
RTCScene scene,
struct RTCRay4* ray,
struct RTCRay8* ray,
unsigned int instID
);
@@ -33,16 +33,43 @@
unsigned int instID
);
void rtcForwardOccluded4Ex(
void int* valid,
const struct RTCOccludedFunctionNArguments* args,
RTCScene scene,
struct RTCRay4* ray,
unsigned int instID,
unsigned int instPrimID
);
void rtcForwardOccluded8Ex(
void int* valid,
const struct RTCOccludedFunctionNArguments* args,
RTCScene scene,
struct RTCRay8* ray,
unsigned int instID,
unsigned int instPrimID
);
void rtcForwardOccluded16Ex(
void int* valid,
const struct RTCOccludedFunctionNArguments* args,
RTCScene scene,
struct RTCRay16* ray,
unsigned int instID,
unsigned int instPrimID
);
#### DESCRIPTION
The `rtcForwardOccluded4/8/16` functions forward the traversal of a
transformed ray packet (`ray` argument) into a scene (`scene` argument) from
a user geometry callback. The function can only get invoked from a
user geometry callback for a ray traversal initiated with the
`rtcOccluded4/8/16` function. The callback arguments structure of the
callback invokation has to get passed to the ray forwarding (`args`
argument). The user geometry callback should instantly terminate after
invoking the `rtcForwardOccluded4/8/16` function.
The `rtcForwardOccluded4/8/16` and `rtcForwardOccluded4/8/16Ex` functions
forward the traversal of a transformed ray packet (`ray` argument) into a scene
(`scene` argument) from a user geometry callback. The function can only get
invoked from a user geometry callback for a ray traversal initiated with the
`rtcOccluded4/8/16` function. The callback arguments structure of the callback
invokation has to get passed to the ray forwarding (`args` argument). The user
geometry callback should instantly terminate after invoking the
`rtcForwardOccluded4/8/16/Ex` function.
Only the ray origin and ray direction members of the ray
argument are used for forwarding, all additional ray properties are
@@ -59,6 +86,11 @@ This function can get used to implement user defined instancing using
user geometries, e.g. by transforming the ray in a special way, and/or
selecting between different scenes to instantiate.
For user defined instance arrays, the `rtcForwardIntersect4/8/16Ex` variant has
an additional `instPrimID` argument which is pushed to the instance primitive
ID stack. Instance primitive IDs identify which instance of an instance array
was hit.
When using Embree on the CPU it is possible to recursively invoke
`rtcOccluded4/8/16` directly from a user geometry callback. However, when
SYCL is used, recursively tracing rays is not directly supported, and
+8
View File
@@ -63,6 +63,14 @@ Possible properties to query are:
back face culling is enabled. This is only the case if Embree is
compiled with `EMBREE_BACKFACE_CULLING` enabled.
+ `RTC_DEVICE_PROPERTY_BACKFACE_CULLING_CURVES_ENABLED`: Queries whether
back face culling for curves is enabled. This is only the case if Embree is
compiled with `EMBREE_BACKFACE_CULLING_CURVES` enabled.
+ `RTC_DEVICE_PROPERTY_BACKFACE_CULLING_SPHERES_ENABLED`: Queries whether
back face culling for spheres is enabled. This is only the case if Embree is
compiled with `EMBREE_BACKFACE_CULLING_SPHERES` enabled.
+ `RTC_DEVICE_PROPERTY_COMPACT_POLYS_ENABLED`: Queries whether
compact polys is enabled. This is only the case if Embree is
compiled with `EMBREE_COMPACT_POLYS` enabled.
+6 -1
View File
@@ -35,6 +35,11 @@ Possible formats for the returned matrix are:
in column-major form as a 4×4 homogeneous matrix with last row equal
to (0, 0, 0, 1).
This function is supposed to be used during rendering, but only
supported on the CPU and not inside SYCL kernels on the GPU. Inside a
SYCL kernel the `rtcGetGeometryTransformFromScene` function has to get
used.
#### EXIT STATUS
On failure an error code is set that can be queried using
@@ -42,4 +47,4 @@ On failure an error code is set that can be queried using
#### SEE ALSO
[RTC_GEOMETRY_TYPE_INSTANCE], [rtcSetGeometryTransform]
[RTC_GEOMETRY_TYPE_INSTANCE], [rtcSetGeometryTransform], [rtcGetGeometryTransformFromScene]
+49
View File
@@ -0,0 +1,49 @@
% rtcGetGeometryTransformEx(3) | Embree Ray Tracing Kernels 4
#### NAME
rtcGetGeometryTransformEx - returns the interpolated instance
transformation for an instance of an instance array geometry for the
specified time.
#### SYNOPSIS
#include <embree4/rtcore.h>
void rtcGetGeometryTransformEx(
RTCGeometry geometry,
unsigned int instPrimID,
float time,
enum RTCFormat format,
void* xfm
);
#### DESCRIPTION
The `rtcGetGeometryTransformEx` function returns the interpolated local
to world transformation (`xfm` parameter) of the `instPrimID`-th instance of an
instance array geometry (`geometry` parameter) for a particular time (`time`
parameter in range $[0,1]$) in the specified format (`format` parameter).
The function can also be used when `geometry` refers to a regular instance, but
then the `instPrimID` has to be $0$.
Possible formats for the returned matrix are:
+ `RTC_FORMAT_FLOAT3X4_ROW_MAJOR`: The 3×4 float matrix is laid out
in row-major form.
+ `RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR`: The 3×4 float matrix is laid out
in column-major form.
+ `RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR`: The 3×4 float matrix is laid out
in column-major form as a 4×4 homogeneous matrix with last row equal
to (0, 0, 0, 1).
#### EXIT STATUS
On failure an error code is set that can be queried using
`rtcGetDeviceError`.
#### SEE ALSO
[RTC_GEOMETRY_TYPE_INSTANCE_ARRAY]
@@ -0,0 +1,51 @@
% rtcGetGeometryTransformFromScene(3) | Embree Ray Tracing Kernels 4
#### NAME
rtcGetGeometryTransformFromScene - returns the interpolated instance
transformation for the specified time
#### SYNOPSIS
#include <embree4/rtcore.h>
void rtcGetGeometryTransformFromScene(
RTCScene scene,
unsigned int geomID,
float time,
enum RTCFormat format,
void* xfm
);
#### DESCRIPTION
The `rtcGetGeometryTransformFromScene` function returns the
interpolated local to world transformation (`xfm` output parameter) of
an instance geometry specified by its geometry ID (`geomID` parameter)
of a scene (`scene` parameter) for a particular time (`time` parameter
in range $[0,1]$) in the specified format (`format` parameter).
Possible formats for the returned matrix are:
+ `RTC_FORMAT_FLOAT3X4_ROW_MAJOR`: The 3×4 float matrix is laid out
in row-major form.
+ `RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR`: The 3×4 float matrix is laid out
in column-major form.
+ `RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR`: The 3×4 float matrix is laid out
in column-major form as a 4×4 homogeneous matrix with last row equal
to (0, 0, 0, 1).
In contrast to the `rtcGetGeometryTransform` function, the
`rtcGetGeometryTransformFromScene` function can get used during
rendering inside a SYCL kernel.
#### EXIT STATUS
On failure an error code is set that can be queried using
`rtcGetDeviceError`.
#### SEE ALSO
[RTC_GEOMETRY_TYPE_INSTANCE], [rtcSetGeometryTransform], [rtcGetGeometryTransform]
+4 -2
View File
@@ -18,7 +18,9 @@ previously set with `rtcSetGeometryUserData`. When
`rtcSetGeometryUserData` was not called yet, `NULL` is returned.
This function is supposed to be used during rendering, but only
supported on the CPU and in SYCL on the GPU.
supported on the CPU and not inside SYCL kernels on the GPU. Inside a
SYCL kernel the `rtcGetGeometryUserDataFromScene` function has to get
used.
#### EXIT STATUS
@@ -27,4 +29,4 @@ On failure an error code is set that can be queried using
#### SEE ALSO
[rtcSetGeometryUserData]
[rtcSetGeometryUserData], [rtcGetGeometryUserDataFromScene]
@@ -18,7 +18,9 @@ pointer previously set with `rtcSetGeometryUserData` from the geometry
with index `geomID` from the specified scene `scene`. When
`rtcSetGeometryUserData` was not called yet, `NULL` is returned.
This function is supposed to be used during rendering.
In contrast to the `rtcGetGeometryUserData` function, the
`rtcGetGeometryUserDataFromScene` function an get used during
rendering inside a SYCL kernel.
#### EXIT STATUS
+6 -4
View File
@@ -33,7 +33,8 @@
RTC_GEOMETRY_TYPE_DISC_POINT,
RTC_GEOMETRY_TYPE_ORIENTED_DISC_POINT,
RTC_GEOMETRY_TYPE_USER,
RTC_GEOMETRY_TYPE_INSTANCE
RTC_GEOMETRY_TYPE_INSTANCE,
RTC_GEOMETRY_TYPE_INSTANCE_ARRAY,
};
RTCGeometry rtcNewGeometry(
@@ -64,8 +65,9 @@ bases (`RTC_GEOMETRY_TYPE_FLAT_LINEAR_CURVE`, `RTC_GEOMETRY_TYPE_FLAT_BEZIER_CUR
grid meshes (`RTC_GEOMETRY_TYPE_GRID`), point geometries
(`RTC_GEOMETRY_TYPE_SPHERE_POINT`, `RTC_GEOMETRY_TYPE_DISC_POINT`,
`RTC_TYPE_ORIENTED_DISC_POINT`),
user-defined geometries (`RTC_GEOMETRY_TYPE_USER`), and instances
(`RTC_GEOMETRY_TYPE_INSTANCE`).
user-defined geometries (`RTC_GEOMETRY_TYPE_USER`), instances
(`RTC_GEOMETRY_TYPE_INSTANCE`), and instance arrays
(`RTC_GEOMETRY_TYPE_INSTANCE_ARRAY`).
The types `RTC_GEOMETRY_TYPE_ROUND_BEZIER_CURVE`,
`RTC_GEOMETRY_TYPE_ROUND_BSPLINE_CURVE`, and
@@ -123,4 +125,4 @@ queried using `rtcGetDeviceError`.
[RTC_GEOMETRY_TYPE_TRIANGLE], [RTC_GEOMETRY_TYPE_QUAD],
[RTC_GEOMETRY_TYPE_SUBDIVISION], [RTC_GEOMETRY_TYPE_CURVE],
[RTC_GEOMETRY_TYPE_GRID], [RTC_GEOMETRY_TYPE_POINT],
[RTC_GEOMETRY_TYPE_USER], [RTC_GEOMETRY_TYPE_INSTANCE]
[RTC_GEOMETRY_TYPE_USER], [RTC_GEOMETRY_TYPE_INSTANCE], [RTC_GEOMETRY_TYPE_INSTANCE_ARRAY]
@@ -0,0 +1,37 @@
% rtcSetGeometryInstancedScenes(3) | Embree Ray Tracing Kernels 4
#### NAME
rtcSetGeometryInstancedScenes - sets an array of scenes that can be
instanced by an instance array geometry
#### SYNOPSIS
#include <embree4/rtcore.h>
void rtcSetGeometryInstancedScenes(
RTCGeometry geometry,
RTCScene* scene,
size_t numScenes
);
#### DESCRIPTION
The `rtcSetGeometryInstancedScenes` function sets an array of type `RTCScene`
with `numScenes` elements that the specified instance geometry (`geometry`
argument) can instance. This call also requires setting an index buffer using
either `rtcSetSharedGeometryBuffer` or `rtcSetNewGeometryBuffer` (similar to
index buffers for triangle meshes), that specifies which instance of the
instance array instances which scene in the scene array. If only one scene
should be instanced the call `rtcSetGeometryInstancedScene` should be
preferred.
#### EXIT STATUS
On failure an error code is set that can be queried using
`rtcGetDeviceError`.
#### SEE ALSO
[RTC_GEOMETRY_TYPE_INSTANCE_ARRAY], [rtcSetNewGeometryBuffer],
[rtcSetSharedGeometryBuffer], [rtcSetGeometryInstancedScene]
@@ -70,11 +70,11 @@ ray and the potential hit are in object space.
The filter callback function has the task to check for each valid ray
whether it wants to accept or reject the corresponding hit. To reject
a hit, the filter callback function just has to write `0` to the
integer valid mask of the corresponding ray. To accept the hit, it just
has to leave the valid mask set to `-1`. The filter function is further
allowed to change the hit and decrease the `tfar` value of the ray but
it should not modify other ray data nor any inactive components of the
ray or hit.
integer valid mask of the corresponding ray. To accept the hit, it
just has to leave the valid mask set to `-1`. When accepting a hit,
the filter function is further allowed to change the hit and decrease
the `tfar` value of the ray but it should not modify other ray data
nor any inactive components of the ray or hit.
``` {include=src/api/inc/reorder_callback_intersect.md}
```
@@ -25,7 +25,7 @@ further invocations overwrite the previously set callback function.
Passing `NULL` as function pointer disables the registered callback
function.
The registered intersection filter function is invoked for every hit
The registered occlusion filter function is invoked for every hit
encountered during the `rtcOccluded`-type ray queries and can accept
or reject that hit. The feature can be used to define a silhouette for
a primitive and reject hits that are outside the silhouette. E.g. a
@@ -36,6 +36,14 @@ Please see the description of the
`rtcSetGeometryIntersectFilterFunction` for a description of the
filter callback function.
The `rtcOccluded`-type functions terminate traversal when a hit got
committed. As filter functions can only set the `tfar` distance of the
ray for a committed hit, the occlusion filter cannot influence the
`tfar` value of subsequent traversal, as that directly ends. For that
reason `rtcOccluded` and occlusion filters cannot get used to gather
the next n-hits, and `rtcIntersect` and intersection filters should
get used instead.
#### EXIT STATUS
On failure an error code is set that can be queried using
+37
View File
@@ -1,6 +1,43 @@
Version History
---------------
### Embree 4.3.2
- Embree now uses level zero raytracing extension to build BVH which enables forward-compatibility. On Linux, the package intel-level-zero-gpu-raytracing has to be installed in addition to the other packages listed here [https://dgpu-docs.intel.com/](https://dgpu-docs.intel.com/).
- MacOS universal binary compilation now works.
- Some bugfixes for AVX512 on MacOS x86 machines.
- Known issue: It is recommended to run Embree on Intel® Data Center GPU Max Series (e.g. Intel® Data Center GPU Max 1550) with the following environment settings: NEOReadDebugKeys=1 UseKmdMigration=0
- Known issue: ISPC version of tutorials will not successfully build with MacOS universal binary compilation.
### Embree 4.3.1
- Add missing EMBREE_GEOMETRY types to embree-config.cmake
- User defined thread count now takes precedence for internal task scheduler
- Fixed static linking issue with ze_wrapper library
- Better error reporting for SYCL platform and driver problems in embree_info and tutorial apps.
- Patch to glfw source is not applied by default anymore.
- Known issue: Running Embree on Intel® Data Center GPU Max Series with 2 tiles (e.g. Intel® Data Center GPU Max 1550) requires setting the environment variable ZE_FLAT_DEVICE_HIERARCHY=COMPOSITE.
- Known issue: Embree build using Apple Clang 15 and ARM support (via the SEE2NEON library) may cause "EXEC_BAD_INSTRUCTION" runtime exceptions. Please use Apple Clang <= 14 on macOS.
### Embree 4.3.0
- Added instance array primitive for reducing memony requirements in scenes
with large amounts of similar instances.
- Properly checks driver if L0 RTAS extension can get loaded.
- Added varying version of rtcGetGeometryTransform for ISPC.
- Fixed signature of RTCMemoryMonitorFunction for ISPC.
- Add support for ARM64 Windows platform in CMake.
### Embree 4.2.0
- SYCL version of Embree with GPU support is no longer in beta phase.
- Improved BVH build performance on many core machines for applications that oversubscribe threads.
- Added rtcGetGeometryTransformFromScene API function that can get used inside SYCL kernels.
- No longer linking to ze_loader in SYCL mode to avoid Intel(R) oneAPI Level Zero dependency
for CPU rendering.
- Releasing test package to test Embree.
### Embree 4.1.0
- Added support for Intel® Data Center GPU Max Series.
- Added ARM64 Linux support.
- Added EMBREE_BACKFACE_CULLING_SPHERES cmake option. The new cmake option defaults to OFF.
### Embree 4.0.1
- Improved performance for Tiger Lake, Comet Lake, Cannon Lake, Kaby Lake,
and Skylake client CPUs by using 256 bit SIMD instructions by default.
+48 -57
View File
@@ -17,31 +17,21 @@ C++11. Embree is tested with the following compilers:
Linux
- Intel® oneAPI DPC++/C++ Compiler 2023.0.0
- oneAPI DPC++/C++ Compiler 2022-12-14
- Intel® oneAPI DPC++/C++ Compiler 2024.0.2
- oneAPI DPC++/C++ Compiler 2023-10-26
- Clang 5.0.0
- Clang 4.0.0
- GCC 10.0.1 (Fedora 32) AVX512 support
- GCC 8.3.1 (Fedora 28) AVX512 support
- GCC 7.3.1 (Fedora 27) AVX2 support
- GCC 7.3.1 (Fedora 26) AVX2 support
- GCC 6.4.1 (Fedora 25) AVX2 support
- Intel® Implicit SPMD Program Compiler 1.18.1
- Intel® Implicit SPMD Program Compiler 1.17.0
- Intel® Implicit SPMD Program Compiler 1.16.1
- Intel® Implicit SPMD Program Compiler 1.15.0
- Intel® Implicit SPMD Program Compiler 1.14.1
- Intel® Implicit SPMD Program Compiler 1.13.0
- Intel® Implicit SPMD Program Compiler 1.12.0
macOS x86
- GCC 8.3.1 (Fedora 29) AVX512 support
- Intel® Implicit SPMD Program Compiler 1.22.0
- Intel® C++ Classic Compiler 2023.0.0
- Apple Clang 12.0.5 (macOS 11.7.1)
macOS x86_64
macOS M1
- Apple Clang 15
- Apple Clang 12.0.5 (macOS 11.7.1)
macOS Arm64
- Apple Clang 14
Embree supports using the Intel® Threading Building Blocks (TBB) as the
tasking system. For performance and flexibility reasons we recommend
@@ -64,7 +54,7 @@ version of [GLFW](https://www.glfw.org/) version 3.
Under macOS, all these dependencies can be installed
using [MacPorts](http://www.macports.org/):
sudo port install cmake tbb-devel glfw-devel
sudo port install cmake tbb glfw-devel
Depending on your Linux distribution you can install these dependencies
using `yum` or `apt-get`. Some of these packages might already be
@@ -141,18 +131,21 @@ The "oneAPI DPC++ Compiler" is more up-to-date than the "Intel(R) oneAPI
DPC++/C++ Compiler" but less stable. The current tested version of the "oneAPI
DPC++ compiler is
- [oneAPI DPC++ Compiler 2022-12-14](https://github.com/intel/llvm/releases/download/sycl-nightly%2F20221214/dpcpp-compiler.tar.gz)
- [oneAPI DPC++ Compiler 2023-10-26](https://github.com/intel/llvm/releases/tag/nightly-2023-10-26)
The compiler can be downloaded and simply extracted. The oneAPI DPC++ compiler
2022-12-14 can be set up executing the following command in a Linux (bash)
shell:
can be set up executing the following commands in a Linux (bash) shell:
wget https://github.com/intel/llvm/releases/download/sycl-nightly%2F20221214/dpcpp-compiler.tar.gz
tar xzf dpcpp-compiler.tar.gz
source ./dpcpp_compiler/startup.sh
export SYCL_BUNDLE_ROOT=path_to_dpcpp_compiler
export PATH=$SYCL_BUNDLE_ROOT/bin:$PATH
export CPATH=$SYCL_BUNDLE_ROOT/include:$CPATH
export LIBRARY_PATH=$SYCL_BUNDLE_ROOT/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=$SYCL_BUNDLE_ROOT/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$SYCL_BUNDLE_ROOT/linux/lib/x64:$LD_LIBRARY_PATH
The `startup.sh` script will put `clang++` and `clang` from the
oneAPI DPC++ Compiler into your path.
where the `path_to_dpcpp_compiler` should point to the unpacked oneAPI DPC++
compiler. This will put `clang++` and `clang` from the oneAPI DPC++ Compiler
into your path.
Please also install all Linux packages described in the previous
section.
@@ -171,12 +164,12 @@ through `EMBREE_SYCL_SUPPORT=ON`.
Alternatively, you can download and run the installer of the
- [Intel(R) oneAPI DPC++/C++ Compiler 2023.0.0](https://www.intel.com/content/www/us/en/developer/articles/tool/oneapi-standalone-components.html#dpcpp-cpp).
- [Intel(R) oneAPI DPC++/C++ Compiler](https://www.intel.com/content/www/us/en/developer/articles/tool/oneapi-standalone-components.html#dpcpp-cpp).
After installation, you can set up the compiler by sourcing the
`vars.sh` script in the `env` directory of the compiler install directory, for example,
source /opt/intel/oneAPI/compiler/2023.0.0/env/vars.sh
source /opt/intel/oneAPI/compiler/latest/env/vars.sh
This script will put the `icpx` and `icx` compiler executables from the
Intel(R) oneAPI DPC++/C++ Compiler in your path.
@@ -210,36 +203,23 @@ your Intel Xe HPG/HPC GPUs from here
the driver installation instructions for your graphics card and
operating system.
We tested Embree with the latest GPGPU driver Devel Release from
20220809. The Intel(R) Graphics Compute Runtime for oneAPI Level Zero
and OpenCL(TM) Driver from that release is too old for Embree to work
properly. Thus if no newer version of the GPGPU driver is available,
you need to additionally install the latest compute runtime from here
[22.43.24595](https://github.com/intel/compute-runtime/releases/tag/22.43.24595.30).
After installing the drivers you have to install an additional package
manually using
Unfortunately, these compute runtime packages are only available for
Ubuntu 22.04. You can also install a newer version of the compute
runtime if available.
sudo apt install intel-level-zero-gpu-raytracing
Windows
-------
Embree is tested using the following compilers under Windows:
- Intel® oneAPI DPC++/C++ Compiler 2023.0.0
- oneAPI DPC++/C++ Compiler 2022-12-14
- Intel® oneAPI DPC++/C++ Compiler 2024.0.2
- oneAPI DPC++/C++ Compiler 2023-10-26
- Visual Studio 2022
- Visual Studio 2019
- Visual Studio 2017
- Visual Studio 2015 (Update\ 1)
- Intel® Implicit SPMD Program Compiler 1.18.1
- Intel® Implicit SPMD Program Compiler 1.17.0
- Intel® Implicit SPMD Program Compiler 1.16.1
- Intel® Implicit SPMD Program Compiler 1.15.0
- Intel® Implicit SPMD Program Compiler 1.14.1
- Intel® Implicit SPMD Program Compiler 1.13.0
- Intel® Implicit SPMD Program Compiler 1.12.0
- Intel® Implicit SPMD Program Compiler 1.22.0
To compile Embree for AVX-512 you have to use the Intel® Compiler.
@@ -356,7 +336,7 @@ The "oneAPI DPC++ Compiler" is more up-to-date than the "Intel(R) oneAPI
DPC++/C++ Compiler" but less stable. The current tested version of the oneAPI
DPC++ compiler is
- [oneAPI DPC++ Compiler 2022-12-14](https://github.com/intel/llvm/releases/download/sycl-nightly%2F20221214/dpcpp-compiler-win.tar.gz)
- [oneAPI DPC++ Compiler 2023-10-26](https://github.com/intel/llvm/releases/tag/nightly-2023-10-26)
Download and unpack the archive and open the "x64 Native Tools Command Prompt"
of Visual Studio and execute the following lines to properly configure the
@@ -395,13 +375,13 @@ option.
Alternatively, you can download and run the installer of the
- [Intel(R) oneAPI DPC++/C++ Compiler 2023.0.0](https://www.intel.com/content/www/us/en/developer/articles/tool/oneapi-standalone-components.html#dpcpp-cpp).
- [Intel(R) oneAPI DPC++/C++ Compiler](https://www.intel.com/content/www/us/en/developer/articles/tool/oneapi-standalone-components.html#dpcpp-cpp).
After installation, you can either open a regular `Command Prompt` and execute
the `vars.bat` script in the `env` directory of the compiler install directory,
for example
C:\Program Files (x86)\Intel\oneAPI\compiler\2023.0.0\env\vars.bat
C:\Program Files (x86)\Intel\oneAPI\compiler\latest\env\vars.bat
or simply open the installed "Intel oneAPI command prompt for Intel 64 for Visual Studio".
@@ -442,9 +422,9 @@ your application with such an Embree package.
### Windows Graphics Driver Installation
In order to run the SYCL tutorials on HPG hardware, you first need to
install the proper graphics drivers for your graphics card from
[https://www.intel.com](https://www.intel.com). Embree will work with
graphics driver version 101.4027 or later.
install the graphics drivers for your graphics card from
[https://www.intel.com](https://www.intel.com). Please make sure to
have installed version 31.0.101.4644 or newer.
CMake Configuration
@@ -513,6 +493,14 @@ parameters that can be configured in CMake:
surfaces facing a ray can be hit. This option is turned OFF by
default.
+ `EMBREE_BACKFACE_CULLING_CURVES`: Enables backface culling for curves,
i.e. only surfaces facing a ray can be hit. This option is turned OFF
by default.
+ `EMBREE_BACKFACE_CULLING_SPHERES`: Enables backface culling for spheres,
i.e. only surfaces facing a ray can be hit. This option is turned OFF
by default.
+ `EMBREE_COMPACT_POLYS`: Enables compact tris/quads, i.e. only
geomIDs and primIDs are stored inside the leaf nodes.
@@ -590,6 +578,9 @@ parameters that can be configured in CMake:
+ `EMBREE_GEOMETRY_INSTANCE`: Enables support for instances (ON by
default).
+ `EMBREE_GEOMETRY_INSTANCE_ARRAY`: Enables support for instance arrays (ON by
default).
+ `EMBREE_GEOMETRY_USER`: Enables support for user-defined geometries
(ON by default).
+2 -2
View File
@@ -1,9 +1,9 @@
Downloading Embree
------------------
For Windows we provide Embree as ZIP files linked against the Visual Studio 2015/2017 (VC14) runtime:
For Windows we provide Embree as a ZIP file:
[embree-<EMBREE_VERSION>.x64.vc14.windows.zip](https://github.com/embree/embree/releases/download/v<EMBREE_VERSION>/embree-<EMBREE_VERSION>.x64.vc14.windows.zip)
[embree-<EMBREE_VERSION>.x64.windows.zip](https://github.com/embree/embree/releases/download/v<EMBREE_VERSION>/embree-<EMBREE_VERSION>.x64.windows.zip)
For Linux we provide Embree as a `tar.gz` file:
+1
View File
@@ -6,6 +6,7 @@
[imgUserGeometry]: images/user_geometry.jpg
[imgViewer]: images/viewer.jpg
[imgInstancedGeometry]: images/instanced_geometry.jpg
[imgForest]: images/forest.jpg
[imgMultiLevelInstancing]: images/multi_level_instancing.jpg
[imgIntersectionFilter]: images/intersection_filter.jpg
[imgPathtracer]: images/pathtracer.jpg
+1
View File
@@ -6,6 +6,7 @@
[imgUserGeometry]: https://embree.github.io/images/user_geometry.jpg
[imgViewer]: https://embree.github.io/images/viewer.jpg
[imgInstancedGeometry]: https://embree.github.io/images/instanced_geometry.jpg
[imgForest]: https://embree.github.io/images/forest.jpg
[imgMultiLevelInstancing]: https://embree.github.io/images/multi_level_instancing.jpg
[imgIntersectionFilter]: https://embree.github.io/images/intersection_filter.jpg
[imgPathtracer]: https://embree.github.io/images/pathtracer.jpg
+20 -3
View File
@@ -5,8 +5,8 @@ Installation of Embree
Windows Installation
--------------------
Embree linked against Visual Studio 2015 are provided as a ZIP file
[embree-<EMBREE_VERSION>.x64.vc14.windows.zip](https://github.com/embree/embree/releases/download/v<EMBREE_VERSION>/embree-<EMBREE_VERSION>.x64.vc14.windows.zip). After
A pre-built version of Embree for Windows is provided as a ZIP archive
[embree-<EMBREE_VERSION>.x64.windows.zip](https://github.com/embree/embree/releases/download/v<EMBREE_VERSION>/embree-<EMBREE_VERSION>.x64.windows.zip). After
unpacking this ZIP file, you should set the path to the `lib` folder
manually to your `PATH` environment variable for applications to find
Embree.
@@ -15,7 +15,7 @@ Embree.
Linux Installation
------------------
The Linux version of Embree is also delivered as a `tar.gz` file:
A pre-built version of Embree for Linux is provided as a `tar.gz` archive:
[embree-<EMBREE_VERSION>.x86_64.linux.tar.gz](https://github.com/embree/embree/releases/download/v<EMBREE_VERSION>/embree-<EMBREE_VERSION>.x86_64.linux.tar.gz). Unpack
this file using `tar` and source the provided `embree-vars.sh` (if you
are using the bash shell) or `embree-vars.csh` (if you are using the C
@@ -155,3 +155,20 @@ help of the device option in ocloc tool:
ocloc compile --help
Building Embree Tests
---------------------
Embree is released with a bundle of tests in an optional testing package.
To run these tests extract the testing package in the same folder as your embree installation.
e.g.:
tar -xzf embree-<EMBREE_VERSION>-testing.zip -C /path/to/installed/embree
The tests are extracted into a new folder inside you embree installation and can be run with:
cd /path/to/installed/embree/testing
cmake -B build
cmake --build build target=tests
+1
View File
@@ -7,6 +7,7 @@
[Stream Viewer]: #stream-viewer
[User Geometry]: #user-geometry
[Instanced Geometry]: #instanced-geometry
[Instance Array Geometry]: #instance-array-geometry
[Multi Level Instancing]: #multi-level-instancing
[Intersection Filter]: #intersection-filter
[Hair]: #hair
+1
View File
@@ -7,6 +7,7 @@
[Stream Viewer]: tutorials.html#stream-viewer
[User Geometry]: tutorials.html#user-geometry
[Instanced Geometry]: tutorials.html#instanced-geometry
[Instance Array Geometry]: tutorials.html#instance-array-geometry
[Multi Level Instancing]: tutorials.html#multi-level-instancing
[Intersection Filter]: tutorials.html#intersection-filter
[Hair]: tutorials.html#hair
+2 -2
View File
@@ -4,8 +4,8 @@ Intel® Embree Overview
Intel® Embree is a high-performance ray tracing library developed at
Intel, which is released as open source under the [Apache 2.0
license](http://www.apache.org/licenses/LICENSE-2.0). Intel® Embree
supports x86 CPUs under Linux, macOS, and Windows; ARM CPUs on macOS;
as well as Intel® GPUs under Linux and Windows.
supports x86 CPUs under Linux, macOS, and Windows; ARM CPUs on Linux
and macOS; as well as Intel® GPUs under Linux and Windows.
Intel® Embree targets graphics application developers to improve the
performance of photo-realistic rendering applications. Embree is
+2 -12
View File
@@ -3,24 +3,14 @@ Supported Platforms
Embree supports Windows (32-bit and 64-bit), Linux (64-bit), and macOS
(64-bit). Under Windows, Linux and macOS x86 based CPUs are supported,
while ARM CPUs are currently only supported under macOS (e.g. Apple
M1). ARM support for Windows and Linux is experimental.
while ARM CPUs are currently only supported under Linux and macOS (e.g.
Apple M1). ARM support for Windows experimental.
Embree supports Intel GPUs based on the Xe HPG microarchitecture
(Intel® Arc™ GPU) under Linux and Windows and Xe HPC microarchitecture
(Intel® Data Center GPU Flex Series and Intel® Data Center GPU Max
Series) under Linux.
Currently the following products are supported and further products
will get enabled soon:
- Intel® Arc™ A770 Graphics
- Intel® Arc™ A750 Graphics
- Intel® Arc™ A770M Graphics
- Intel® Arc™ A730M Graphics
- Intel® Arc™ A550M Graphics
- Intel® Data Center GPU Flex 170
The code compiles with the Intel® Compiler, Intel® oneAPI DPC++
Compiler, GCC, Clang, and the Microsoft Compiler. To use Embree on the
GPU the Intel® oneAPI DPC++ Compiler must be used. Please see section
+19
View File
@@ -199,6 +199,25 @@ ways can be distinguished.
[Source Code](https://github.com/embree/embree/blob/master/tutorials/instanced_geometry/instanced_geometry_device.cpp)
Instance Array Geometry
----------------------
[![][imgForest]](https://github.com/embree/embree/blob/master/tutorials/forest/forest_device.cpp)
This tutorial demonstrates the usage of instance arrays in Embree. Instance arrays
are large collections of similar objects. Examples are sand dunes that consist
of millions of instances of a few grain models or, like here, a forest consisting of
many instances of a few tree models.
In this application can switch between representing the scene with regular
instances or (one!) instance array. It also prints several stats, that
demonstrate the memory savings and faster BVH build times when using instance
arrays for such scenes. Instance arrays come with a small overhead on CPU and
should be preferred if memory consumption is more important than raytracing
performance.
[Source Code](https://github.com/embree/embree/blob/master/tutorials/forest/forest_device.cpp)
Multi Level Instancing
----------------------
+2
View File
@@ -27,6 +27,8 @@ enum RTCBufferType
RTC_BUFFER_TYPE_VERTEX_CREASE_WEIGHT = 21,
RTC_BUFFER_TYPE_HOLE = 22,
RTC_BUFFER_TYPE_TRANSFORM = 23,
RTC_BUFFER_TYPE_FLAGS = 32
};
+2
View File
@@ -26,6 +26,8 @@ enum RTCBufferType
RTC_BUFFER_TYPE_VERTEX_CREASE_WEIGHT = 21,
RTC_BUFFER_TYPE_HOLE = 22,
RTC_BUFFER_TYPE_TRANSFORM = 23,
RTC_BUFFER_TYPE_FLAGS = 32
};
+28 -4
View File
@@ -147,7 +147,9 @@ enum RTCFormat
RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR = 0x9244,
/* special 12-byte format for grids */
RTC_FORMAT_GRID = 0xA001
RTC_FORMAT_GRID = 0xA001,
RTC_FORMAT_QUATERNION_DECOMPOSITION = 0xB001,
};
/* Build quality levels */
@@ -290,6 +292,8 @@ enum RTCFeatureFlags
RTC_FEATURE_FLAG_32_BIT_RAY_MASK = 1 << 28,
RTC_FEATURE_FLAG_INSTANCE_ARRAY = 1 << 29,
RTC_FEATURE_FLAG_ALL = 0xffffffff,
};
@@ -334,19 +338,26 @@ struct RTCRayQueryContext
unsigned int instStackSize; // Number of instances currently on the stack.
#endif
unsigned int instID[RTC_MAX_INSTANCE_LEVEL_COUNT]; // The current stack of instance ids.
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
unsigned int instPrimID[RTC_MAX_INSTANCE_LEVEL_COUNT]; // The current stack of instance primitive ids.
#endif
};
/* Initializes an ray query context. */
RTC_FORCEINLINE void rtcInitRayQueryContext(struct RTCRayQueryContext* context)
{
unsigned l = 0;
#if RTC_MAX_INSTANCE_LEVEL_COUNT > 1
context->instStackSize = 0;
#endif
for (; l < RTC_MAX_INSTANCE_LEVEL_COUNT; ++l)
for (; l < RTC_MAX_INSTANCE_LEVEL_COUNT; ++l) {
context->instID[l] = RTC_INVALID_GEOMETRY_ID;
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
context->instPrimID[l] = RTC_INVALID_GEOMETRY_ID;
#endif
}
}
/* Point query structure for closest point query */
@@ -404,6 +415,11 @@ struct RTC_ALIGN(16) RTCPointQueryContext
// instance ids.
unsigned int instID[RTC_MAX_INSTANCE_LEVEL_COUNT];
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
// instance prim ids.
unsigned int instPrimID[RTC_MAX_INSTANCE_LEVEL_COUNT];
#endif
// number of instances currently on the stack.
unsigned int instStackSize;
};
@@ -411,8 +427,16 @@ struct RTC_ALIGN(16) RTCPointQueryContext
/* Initializes an ray query context. */
RTC_FORCEINLINE void rtcInitPointQueryContext(struct RTCPointQueryContext* context)
{
unsigned l = 0;
context->instStackSize = 0;
context->instID[0] = RTC_INVALID_GEOMETRY_ID;
for (; l < RTC_MAX_INSTANCE_LEVEL_COUNT; ++l) {
context->instID[l] = RTC_INVALID_GEOMETRY_ID;
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
context->instPrimID[l] = RTC_INVALID_GEOMETRY_ID;
#endif
}
}
struct RTC_ALIGN(16) RTCPointQueryFunctionArguments
+23 -5
View File
@@ -265,6 +265,8 @@ enum RTCFeatureFlags
RTC_FEATURE_FLAG_32_BIT_RAY_MASK = 1 << 28,
RTC_FEATURE_FLAG_INSTANCE_ARRAY = 1 << 29,
RTC_FEATURE_FLAG_ALL = 0xffffffff,
};
@@ -287,6 +289,10 @@ struct RTCRayQueryContext
unsigned int instStackSize; // Number of instances currently on the stack.
#endif
unsigned int instID[RTC_MAX_INSTANCE_LEVEL_COUNT]; // The current stack of instance ids.
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
unsigned int instPrimID[RTC_MAX_INSTANCE_LEVEL_COUNT]; // The current stack of instance primitive ids.
#endif
};
/* Initializes an ray query context. */
@@ -298,8 +304,12 @@ RTC_FORCEINLINE void rtcInitRayQueryContext(uniform RTCRayQueryContext* uniform
context->instStackSize = 0;
#endif
for (; l < RTC_MAX_INSTANCE_LEVEL_COUNT; ++l)
for (; l < RTC_MAX_INSTANCE_LEVEL_COUNT; ++l) {
context->instID[l] = RTC_INVALID_GEOMETRY_ID;
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
context->instPrimID[l] = RTC_INVALID_GEOMETRY_ID;
#endif
}
}
/* Arguments for RTCFilterFunctionN */
@@ -362,17 +372,22 @@ struct RTCPointQueryContext
{
// accumulated 4x4 column major matrices from world space to instance space.
// undefined if size == 0.
float world2inst[RTC_MAX_INSTANCE_LEVEL_COUNT][16];
float world2inst[RTC_MAX_INSTANCE_LEVEL_COUNT][16];
// accumulated 4x4 column major matrices from instance space to world space.
// undefined if size == 0.
float inst2world[RTC_MAX_INSTANCE_LEVEL_COUNT][16];
float inst2world[RTC_MAX_INSTANCE_LEVEL_COUNT][16];
// instance ids.
unsigned int instID[RTC_MAX_INSTANCE_LEVEL_COUNT];
unsigned int instID[RTC_MAX_INSTANCE_LEVEL_COUNT];
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
// instance prim ids.
unsigned int instPrimID[RTC_MAX_INSTANCE_LEVEL_COUNT];
#endif
// number of instances currently on the stack.
unsigned int instStackSize;
unsigned int instStackSize;
};
/* Initializes an ray query context. */
@@ -380,6 +395,9 @@ RTC_FORCEINLINE void rtcInitPointQueryContext(uniform RTCPointQueryContext* unif
{
context->instStackSize = 0;
context->instID[0] = RTC_INVALID_GEOMETRY_ID;
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
context->instPrimID[0] = RTC_INVALID_GEOMETRY_ID;
#endif
}
struct RTCPointQueryFunctionArguments
+5 -1
View File
@@ -49,6 +49,7 @@ enum RTCDeviceProperty
RTC_DEVICE_PROPERTY_NATIVE_RAY8_SUPPORTED = 33,
RTC_DEVICE_PROPERTY_NATIVE_RAY16_SUPPORTED = 34,
RTC_DEVICE_PROPERTY_BACKFACE_CULLING_SPHERES_ENABLED = 62,
RTC_DEVICE_PROPERTY_BACKFACE_CULLING_CURVES_ENABLED = 63,
RTC_DEVICE_PROPERTY_RAY_MASK_SUPPORTED = 64,
RTC_DEVICE_PROPERTY_BACKFACE_CULLING_ENABLED = 65,
@@ -65,7 +66,10 @@ enum RTCDeviceProperty
RTC_DEVICE_PROPERTY_TASKING_SYSTEM = 128,
RTC_DEVICE_PROPERTY_JOIN_COMMIT_SUPPORTED = 129,
RTC_DEVICE_PROPERTY_PARALLEL_COMMIT_SUPPORTED = 130
RTC_DEVICE_PROPERTY_PARALLEL_COMMIT_SUPPORTED = 130,
RTC_DEVICE_PROPERTY_CPU_DEVICE = 140,
RTC_DEVICE_PROPERTY_SYCL_DEVICE = 141
};
/* Gets a device property. */
+1 -1
View File
@@ -76,7 +76,7 @@ typedef unmasked void (*uniform RTCErrorFunction)(void* uniform userPtr, uniform
RTC_API void rtcSetDeviceErrorFunction(RTCDevice device, uniform RTCErrorFunction error, void* uniform userPtr);
/* Memory monitor callback function */
typedef uniform bool (*uniform RTCMemoryMonitorFunction)(uniform intptr_t bytes, uniform bool post);
typedef unmasked uniform bool (*uniform RTCMemoryMonitorFunction)(void* uniform ptr, uniform intptr_t bytes, uniform bool post);
/* Sets the memory monitor callback function. */
RTC_API void rtcSetDeviceMemoryMonitorFunction(RTCDevice device, RTCMemoryMonitorFunction memoryMonitor, void* uniform userPtr);
+11 -1
View File
@@ -48,7 +48,8 @@ enum RTCGeometryType
RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_CATMULL_ROM_CURVE = 60, // flat normal-oriented Catmull-Rom curves
RTC_GEOMETRY_TYPE_USER = 120, // user-defined geometry
RTC_GEOMETRY_TYPE_INSTANCE = 121 // scene instance
RTC_GEOMETRY_TYPE_INSTANCE = 121, // scene instance
RTC_GEOMETRY_TYPE_INSTANCE_ARRAY = 122, // scene instance array
};
/* Interpolation modes for subdivision surfaces */
@@ -219,6 +220,9 @@ RTC_SYCL_API void rtcInvokeOccludedFilterFromGeometry(const struct RTCOccludedFu
/* Sets the instanced scene of an instance geometry. */
RTC_API void rtcSetGeometryInstancedScene(RTCGeometry geometry, RTCScene scene);
/* Sets the instanced scenes of an instance array geometry. */
RTC_API void rtcSetGeometryInstancedScenes(RTCGeometry geometry, RTCScene* scenes, size_t numScenes);
/* Sets the transformation of an instance for the specified time step. */
RTC_API void rtcSetGeometryTransform(RTCGeometry geometry, unsigned int timeStep, enum RTCFormat format, const void* xfm);
@@ -228,6 +232,12 @@ RTC_API void rtcSetGeometryTransformQuaternion(RTCGeometry geometry, unsigned in
/* Returns the interpolated transformation of an instance for the specified time. */
RTC_API void rtcGetGeometryTransform(RTCGeometry geometry, float time, enum RTCFormat format, void* xfm);
/*
* Returns the interpolated transformation of the instPrimID'th instance of an
* instance array for the specified time. If geometry is an regular instance,
* instPrimID must be 0.
*/
RTC_API void rtcGetGeometryTransformEx(RTCGeometry geometry, unsigned int instPrimID, float time, enum RTCFormat format, void* xfm);
/* Sets the uniform tessellation rate of the geometry. */
RTC_API void rtcSetGeometryTessellationRate(RTCGeometry geometry, float tessellationRate);
+52 -1
View File
@@ -47,7 +47,8 @@ enum RTCGeometryType
RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_CATMULL_ROM_CURVE = 60, // flat normal-oriented Catmull-Rom curves
RTC_GEOMETRY_TYPE_USER = 120, // user-defined geometry
RTC_GEOMETRY_TYPE_INSTANCE = 121 // scene instance
RTC_GEOMETRY_TYPE_INSTANCE = 121, // scene instance
RTC_GEOMETRY_TYPE_INSTANCE_ARRAY = 122 // scene instance
};
/* Interpolation modes for subdivision surfaces */
@@ -225,6 +226,9 @@ RTC_API void rtcInvokeOccludedFilterFromGeometry(const uniform struct RTCOcclude
/* Sets the instanced scene of an instance geometry. */
RTC_API void rtcSetGeometryInstancedScene(RTCGeometry geometry, RTCScene scene);
/* Sets the instanced scene of an instance array geometry. */
RTC_API void rtcSetGeometryInstancedScenes(RTCGeometry geometry, uniform RTCScene* uniform scenes, uniform size_t numScenes);
/* Sets the transformation of an instance for the specified time step. */
RTC_API void rtcSetGeometryTransform(RTCGeometry geometry, uniform unsigned int timeStep, uniform RTCFormat format, const void* uniform xfm);
@@ -234,6 +238,53 @@ RTC_API void rtcSetGeometryTransformQuaternion(RTCGeometry geometry, uniform uns
/* Returns the interpolated transformation of an instance for the specified time. */
RTC_API void rtcGetGeometryTransform(RTCGeometry geometry, uniform float time, uniform RTCFormat format, void* uniform xfm);
/* Returns the interpolated transformation of an instance for the specified time. Varying version. */
inline void rtcGetGeometryTransform(RTCGeometry geometry, varying float time, uniform RTCFormat format, void* uniform xfm)
{
varying float vmatrix[12];
foreach_unique(utime in time)
{
uniform float umatrix[12];
rtcGetGeometryTransform(geometry,utime,RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR,umatrix);
for (int uniform j=0; j<12; j++) vmatrix[j] = umatrix[j];
}
/* store to desired layout */
varying float* vxfm = (varying float*) xfm;
switch (format)
{
case RTC_FORMAT_FLOAT3X4_ROW_MAJOR:
vxfm[ 0] = vmatrix[0]; vxfm[ 1] = vmatrix[3]; vxfm[ 2] = vmatrix[6]; vxfm[ 3] = vmatrix[9];
vxfm[ 4] = vmatrix[1]; vxfm[ 5] = vmatrix[4]; vxfm[ 6] = vmatrix[7]; vxfm[ 7] = vmatrix[10];
vxfm[ 8] = vmatrix[2]; vxfm[ 9] = vmatrix[5]; vxfm[10] = vmatrix[8]; vxfm[11] = vmatrix[11];
break;
case RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR:
vxfm[ 0] = vmatrix[0]; vxfm[ 1] = vmatrix[1]; vxfm[ 2] = vmatrix[2];
vxfm[ 3] = vmatrix[3]; vxfm[ 4] = vmatrix[4]; vxfm[ 5] = vmatrix[5];
vxfm[ 6] = vmatrix[6]; vxfm[ 7] = vmatrix[7]; vxfm[ 8] = vmatrix[8];
vxfm[ 9] = vmatrix[9]; vxfm[10] = vmatrix[10]; vxfm[11] = vmatrix[11];
break;
case RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR:
vxfm[ 0] = vmatrix[0]; vxfm[ 1] = vmatrix[1]; vxfm[ 2] = vmatrix[2]; vxfm[ 3] = 0.f;
vxfm[ 4] = vmatrix[3]; vxfm[ 5] = vmatrix[4]; vxfm[ 6] = vmatrix[5]; vxfm[ 7] = 0.f;
vxfm[ 8] = vmatrix[6]; vxfm[ 9] = vmatrix[7]; vxfm[10] = vmatrix[8]; vxfm[11] = 0.f;
vxfm[12] = vmatrix[9]; vxfm[13] = vmatrix[10]; vxfm[14] = vmatrix[11]; vxfm[15] = 1.f;
break;
default:
break;
}
}
/*
* Returns the interpolated transformation of the instPrimID'th instance of an
* instance array for the specified time. If geometry is an regular instance,
* instPrimID must be 0.
*/
RTC_API void rtcGetGeometryTransformEx(RTCGeometry geometry, uniform unsigned int instPrimID, uniform float time, uniform RTCFormat format, void* uniform xfm);
/* Sets the uniform tessellation rate of the geometry. */
RTC_API void rtcSetGeometryTessellationRate(RTCGeometry geometry, uniform float tessellationRate);
+40 -10
View File
@@ -39,6 +39,9 @@ struct RTC_ALIGN(16) RTCHit
unsigned int primID; // primitive ID
unsigned int geomID; // geometry ID
unsigned int instID[RTC_MAX_INSTANCE_LEVEL_COUNT]; // instance ID
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
unsigned int instPrimID[RTC_MAX_INSTANCE_LEVEL_COUNT]; // instance primitive ID
#endif
};
/* Combined ray/hit structure for a single ray */
@@ -80,6 +83,9 @@ struct RTC_ALIGN(16) RTCHit4
unsigned int primID[4];
unsigned int geomID[4];
unsigned int instID[RTC_MAX_INSTANCE_LEVEL_COUNT][4];
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
unsigned int instPrimID[RTC_MAX_INSTANCE_LEVEL_COUNT][4];
#endif
};
/* Combined ray/hit structure for a packet of 4 rays */
@@ -121,6 +127,9 @@ struct RTC_ALIGN(32) RTCHit8
unsigned int primID[8];
unsigned int geomID[8];
unsigned int instID[RTC_MAX_INSTANCE_LEVEL_COUNT][8];
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
unsigned int instPrimID[RTC_MAX_INSTANCE_LEVEL_COUNT][8];
#endif
};
/* Combined ray/hit structure for a packet of 8 rays */
@@ -162,6 +171,9 @@ struct RTC_ALIGN(64) RTCHit16
unsigned int primID[16];
unsigned int geomID[16];
unsigned int instID[RTC_MAX_INSTANCE_LEVEL_COUNT][16];
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
unsigned int instPrimID[RTC_MAX_INSTANCE_LEVEL_COUNT][16];
#endif
};
/* Combined ray/hit structure for a packet of 16 rays */
@@ -201,17 +213,20 @@ RTC_FORCEINLINE float& RTCHitN_Ng_z(RTCHitN* hit, unsigned int N, unsigned int i
RTC_FORCEINLINE float& RTCHitN_u(RTCHitN* hit, unsigned int N, unsigned int i) { return ((float*)hit)[3*N+i]; }
RTC_FORCEINLINE float& RTCHitN_v(RTCHitN* hit, unsigned int N, unsigned int i) { return ((float*)hit)[4*N+i]; }
RTC_FORCEINLINE unsigned int& RTCHitN_primID(RTCHitN* hit, unsigned int N, unsigned int i) { return ((unsigned*)hit)[5*N+i]; }
RTC_FORCEINLINE unsigned int& RTCHitN_geomID(RTCHitN* hit, unsigned int N, unsigned int i) { return ((unsigned*)hit)[6*N+i]; }
RTC_FORCEINLINE unsigned int& RTCHitN_instID(RTCHitN* hit, unsigned int N, unsigned int i, unsigned int l) { return ((unsigned*)hit)[7*N+i+N*l]; }
RTC_FORCEINLINE unsigned int& RTCHitN_primID (RTCHitN* hit, unsigned int N, unsigned int i) { return ((unsigned*)hit)[5*N+i]; }
RTC_FORCEINLINE unsigned int& RTCHitN_geomID (RTCHitN* hit, unsigned int N, unsigned int i) { return ((unsigned*)hit)[6*N+i]; }
RTC_FORCEINLINE unsigned int& RTCHitN_instID (RTCHitN* hit, unsigned int N, unsigned int i, unsigned int l) { return ((unsigned*)hit)[7*N + N*l + i]; }
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
RTC_FORCEINLINE unsigned int& RTCHitN_instPrimID(RTCHitN* hit, unsigned int N, unsigned int i, unsigned int l) { return ((unsigned*)hit)[7*N + N*RTC_MAX_INSTANCE_LEVEL_COUNT + N*l + i]; }
#endif
/* Helper functions to extract RTCRayN and RTCHitN from RTCRayHitN */
RTC_FORCEINLINE RTCRayN* RTCRayHitN_RayN(RTCRayHitN* rayhit, unsigned int N) { return (RTCRayN*)&((float*)rayhit)[0*N]; }
RTC_FORCEINLINE RTCHitN* RTCRayHitN_HitN(RTCRayHitN* rayhit, unsigned int N) { return (RTCHitN*)&((float*)rayhit)[12*N]; }
/* Helper structure for a ray packet of compile-time size N */
template<int N>
struct RTCRayNt
template<unsigned int N>
struct RTC_ALIGN((N && !(N & (N - 1)) ? (N * 4 > 16 ? N * 4 : 16) : 16)) RTCRayNt
{
float org_x[N];
float org_y[N];
@@ -230,8 +245,8 @@ struct RTCRayNt
};
/* Helper structure for a hit packet of compile-time size N */
template<int N>
struct RTCHitNt
template<unsigned int N>
struct RTC_ALIGN((N && !(N & (N - 1)) ? (N * 4 > 16 ? N * 4 : 16) : 16)) RTCHitNt
{
float Ng_x[N];
float Ng_y[N];
@@ -243,6 +258,9 @@ struct RTCHitNt
unsigned int primID[N];
unsigned int geomID[N];
unsigned int instID[RTC_MAX_INSTANCE_LEVEL_COUNT][N];
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
unsigned int instPrimID[RTC_MAX_INSTANCE_LEVEL_COUNT][N];
#endif
};
/* Helper structure for a combined ray/hit packet of compile-time size N */
@@ -281,8 +299,12 @@ RTC_FORCEINLINE RTCHit rtcGetHitFromHitN(RTCHitN* hitN, unsigned int N, unsigned
hit.v = RTCHitN_v(hitN,N,i);
hit.primID = RTCHitN_primID(hitN,N,i);
hit.geomID = RTCHitN_geomID(hitN,N,i);
for (unsigned int l = 0; l < RTC_MAX_INSTANCE_LEVEL_COUNT; l++)
for (unsigned int l = 0; l < RTC_MAX_INSTANCE_LEVEL_COUNT; l++) {
hit.instID[l] = RTCHitN_instID(hitN,N,i,l);
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
hit.instPrimID[l] = RTCHitN_instPrimID(hitN,N,i,l);
#endif
}
return hit;
}
@@ -295,8 +317,12 @@ RTC_FORCEINLINE void rtcCopyHitToHitN(RTCHitN* hitN, const RTCHit* hit, unsigned
RTCHitN_v(hitN,N,i) = hit->v;
RTCHitN_primID(hitN,N,i) = hit->primID;
RTCHitN_geomID(hitN,N,i) = hit->geomID;
for (unsigned int l = 0; l < RTC_MAX_INSTANCE_LEVEL_COUNT; l++)
for (unsigned int l = 0; l < RTC_MAX_INSTANCE_LEVEL_COUNT; l++) {
RTCHitN_instID(hitN,N,i,l) = hit->instID[l];
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
RTCHitN_instPrimID(hitN,N,i,l) = hit->instPrimID[l];
#endif
}
}
RTC_FORCEINLINE RTCRayHit rtcGetRayHitFromRayHitN(RTCRayHitN* rayhitN, unsigned int N, unsigned int i)
@@ -325,8 +351,12 @@ RTC_FORCEINLINE RTCRayHit rtcGetRayHitFromRayHitN(RTCRayHitN* rayhitN, unsigned
rh.hit.v = RTCHitN_v(hit,N,i);
rh.hit.primID = RTCHitN_primID(hit,N,i);
rh.hit.geomID = RTCHitN_geomID(hit,N,i);
for (unsigned int l = 0; l < RTC_MAX_INSTANCE_LEVEL_COUNT; l++)
for (unsigned int l = 0; l < RTC_MAX_INSTANCE_LEVEL_COUNT; l++) {
rh.hit.instID[l] = RTCHitN_instID(hit,N,i,l);
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
rh.hit.instPrimID[l] = RTCHitN_instPrimID(hit,N,i,l);
#endif
}
return rh;
}
+21 -3
View File
@@ -38,6 +38,9 @@ struct RTC_ALIGN(16) RTCHit
unsigned int primID; // primitive ID
unsigned int geomID; // geometry ID
unsigned int instID[RTC_MAX_INSTANCE_LEVEL_COUNT]; // instance ID
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
unsigned int instPrimID[RTC_MAX_INSTANCE_LEVEL_COUNT]; // instance prim ID
#endif
};
/* Combined ray/hit structure */
@@ -76,6 +79,9 @@ RTC_FORCEINLINE varying float& RTCHitN_v (const RTCHitN* uniform hit, uniform
RTC_FORCEINLINE varying unsigned int& RTCHitN_primID(const RTCHitN* uniform hit, uniform unsigned int N, uniform unsigned int i) { return *((varying unsigned int* uniform) &((unsigned int* uniform )hit)[5*N+i]); }
RTC_FORCEINLINE varying unsigned int& RTCHitN_geomID(const RTCHitN* uniform hit, uniform unsigned int N, uniform unsigned int i) { return *((varying unsigned int* uniform) &((unsigned int* uniform )hit)[6*N+i]); }
RTC_FORCEINLINE varying unsigned int& RTCHitN_instID(const RTCHitN* uniform hit, uniform unsigned int N, uniform unsigned int i, uniform unsigned int l) { return *((varying unsigned int* uniform) &((unsigned int* uniform )hit)[7*N+i+l*N]); }
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
RTC_FORCEINLINE varying unsigned int& RTCHitN_instPrimID(const RTCHitN* uniform hit, uniform unsigned int N, uniform unsigned int i, uniform unsigned int l) { return *((varying unsigned int* uniform) &((unsigned int* uniform )hit)[7*N + N*RTC_MAX_INSTANCE_LEVEL_COUNT + N*l + i]); }
#endif
/* Helper functions to extract RTCRayN and RTCHitN from RTCRayHitN */
RTC_FORCEINLINE RTCRayN* uniform RTCRayHitN_RayN(RTCRayHitN* uniform rayhit, uniform unsigned int N) { return (RTCRayN* uniform)&((uniform float* uniform)rayhit)[0*N]; }
@@ -109,8 +115,12 @@ RTC_FORCEINLINE RTCHit rtcGetHitFromHitN(RTCHitN* uniform hitN, uniform unsigned
hit.v = RTCHitN_v(hitN,N,i);
hit.primID = RTCHitN_primID(hitN,N,i);
hit.geomID = RTCHitN_geomID(hitN,N,i);
for (uniform unsigned int l = 0; l < RTC_MAX_INSTANCE_LEVEL_COUNT; l++)
for (uniform unsigned int l = 0; l < RTC_MAX_INSTANCE_LEVEL_COUNT; l++) {
hit.instID[l] = RTCHitN_instID(hitN,N,i,l);
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
hit.instPrimID[l] = RTCHitN_instPrimID(hitN,N,i,l);
#endif
}
return hit;
}
@@ -123,8 +133,12 @@ RTC_FORCEINLINE void rtcCopyHitToHitN(RTCHitN* uniform hitN, const varying RTCHi
RTCHitN_v(hitN,N,i) = hit->v;
RTCHitN_primID(hitN,N,i) = hit->primID;
RTCHitN_geomID(hitN,N,i) = hit->geomID;
for (uniform unsigned int l = 0; l < RTC_MAX_INSTANCE_LEVEL_COUNT; l++)
for (uniform unsigned int l = 0; l < RTC_MAX_INSTANCE_LEVEL_COUNT; l++) {
RTCHitN_instID(hitN,N,i,l) = hit->instID[l];
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
RTCHitN_instPrimID(hitN,N,i,l) = hit->instPrimID[l];
#endif
}
}
RTC_FORCEINLINE RTCRayHit rtcGetRayHitFromRayHitN(RTCRayHitN* uniform rayhitN, uniform unsigned int N, uniform unsigned int i)
@@ -153,8 +167,12 @@ RTC_FORCEINLINE RTCRayHit rtcGetRayHitFromRayHitN(RTCRayHitN* uniform rayhitN, u
rh.hit.v = RTCHitN_v(hit,N,i);
rh.hit.primID = RTCHitN_primID(hit,N,i);
rh.hit.geomID = RTCHitN_geomID(hit,N,i);
for (uniform unsigned int l = 0; l < RTC_MAX_INSTANCE_LEVEL_COUNT; l++)
for (uniform unsigned int l = 0; l < RTC_MAX_INSTANCE_LEVEL_COUNT; l++) {
rh.hit.instID[l] = RTCHitN_instID(hit,N,i,l);
#if defined(RTC_GEOMETRY_INSTANCE_ARRAY)
rh.hit.instPrimID[l] = RTCHitN_instPrimID(hit,N,i,l);
#endif
}
return rh;
}
+33 -5
View File
@@ -16,11 +16,12 @@ struct RTCRayHit16;
/* Scene flags */
enum RTCSceneFlags
{
RTC_SCENE_FLAG_NONE = 0,
RTC_SCENE_FLAG_DYNAMIC = (1 << 0),
RTC_SCENE_FLAG_COMPACT = (1 << 1),
RTC_SCENE_FLAG_ROBUST = (1 << 2),
RTC_SCENE_FLAG_FILTER_FUNCTION_IN_ARGUMENTS = (1 << 3)
RTC_SCENE_FLAG_NONE = 0,
RTC_SCENE_FLAG_DYNAMIC = (1 << 0),
RTC_SCENE_FLAG_COMPACT = (1 << 1),
RTC_SCENE_FLAG_ROBUST = (1 << 2),
RTC_SCENE_FLAG_FILTER_FUNCTION_IN_ARGUMENTS = (1 << 3),
RTC_SCENE_FLAG_PREFETCH_USM_SHARED_ON_GPU = (1 << 4),
};
/* Additional arguments for rtcIntersect1/4/8/16 calls */
@@ -110,6 +111,9 @@ RTC_API RTCGeometry rtcGetGeometryThreadSafe(RTCScene scene, unsigned int geomID
/* Gets the user-defined data pointer of the geometry. This function is not thread safe and should get used during rendering. */
RTC_SYCL_API void* rtcGetGeometryUserDataFromScene(RTCScene scene, unsigned int geomID);
/* Returns the interpolated transformation of an instance for the specified time. */
RTC_SYCL_API void rtcGetGeometryTransformFromScene(RTCScene scene, unsigned int geomID, float time, enum RTCFormat format, void* xfm);
/* Commits the scene. */
RTC_API void rtcCommitScene(RTCScene scene);
@@ -169,15 +173,27 @@ RTC_API void rtcIntersect16(const int* valid, RTCScene scene, struct RTCRayHit16
/* Forwards ray inside user geometry callback. */
RTC_SYCL_API void rtcForwardIntersect1(const struct RTCIntersectFunctionNArguments* args, RTCScene scene, struct RTCRay* ray, unsigned int instID);
/* Forwards ray inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_SYCL_API void rtcForwardIntersect1Ex(const struct RTCIntersectFunctionNArguments* args, RTCScene scene, struct RTCRay* ray, unsigned int instID, unsigned int instPrimID);
/* Forwards ray packet of size 4 inside user geometry callback. */
RTC_API void rtcForwardIntersect4(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCScene scene, struct RTCRay4* ray, unsigned int instID);
/* Forwards ray packet of size 4 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_API void rtcForwardIntersect4Ex(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCScene scene, struct RTCRay4* ray, unsigned int instID, unsigned int primInstID);
/* Forwards ray packet of size 8 inside user geometry callback. */
RTC_API void rtcForwardIntersect8(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCScene scene, struct RTCRay8* ray, unsigned int instID);
/* Forwards ray packet of size 4 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_API void rtcForwardIntersect8Ex(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCScene scene, struct RTCRay8* ray, unsigned int instID, unsigned int primInstID);
/* Forwards ray packet of size 16 inside user geometry callback. */
RTC_API void rtcForwardIntersect16(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCScene scene, struct RTCRay16* ray, unsigned int instID);
/* Forwards ray packet of size 4 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_API void rtcForwardIntersect16Ex(const int* valid, const struct RTCIntersectFunctionNArguments* args, RTCScene scene, struct RTCRay16* ray, unsigned int instID, unsigned int primInstID);
/* Tests a single ray for occlusion with the scene. */
RTC_SYCL_API void rtcOccluded1(RTCScene scene, struct RTCRay* ray, struct RTCOccludedArguments* args RTC_OPTIONAL_ARGUMENT);
@@ -195,15 +211,27 @@ RTC_API void rtcOccluded16(const int* valid, RTCScene scene, struct RTCRay16* ra
/* Forwards single occlusion ray inside user geometry callback. */
RTC_SYCL_API void rtcForwardOccluded1(const struct RTCOccludedFunctionNArguments* args, RTCScene scene, struct RTCRay* ray, unsigned int instID);
/* Forwards single occlusion ray inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_SYCL_API void rtcForwardOccluded1Ex(const struct RTCOccludedFunctionNArguments* args, RTCScene scene, struct RTCRay* ray, unsigned int instID, unsigned int instPrimID);
/* Forwards occlusion ray packet of size 4 inside user geometry callback. */
RTC_API void rtcForwardOccluded4(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCScene scene, struct RTCRay4* ray, unsigned int instID);
/* Forwards occlusion ray packet of size 4 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_API void rtcForwardOccluded4Ex(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCScene scene, struct RTCRay4* ray, unsigned int instID, unsigned int instPrimID);
/* Forwards occlusion ray packet of size 8 inside user geometry callback. */
RTC_API void rtcForwardOccluded8(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCScene scene, struct RTCRay8* ray, unsigned int instID);
/* Forwards occlusion ray packet of size 8 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_API void rtcForwardOccluded8Ex(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCScene scene, struct RTCRay8* ray, unsigned int instID, unsigned int instPrimID);
/* Forwards occlusion ray packet of size 16 inside user geometry callback. */
RTC_API void rtcForwardOccluded16(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCScene scene, struct RTCRay16* ray, unsigned int instID);
/* Forwards occlusion ray packet of size 16 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_API void rtcForwardOccluded16Ex(const int* valid, const struct RTCOccludedFunctionNArguments* args, RTCScene scene, struct RTCRay16* ray, unsigned int instID, unsigned int instPrimID);
/*! collision callback */
struct RTCCollision { unsigned int geomID0; unsigned int primID0; unsigned int geomID1; unsigned int primID1; };
+99
View File
@@ -101,6 +101,51 @@ RTC_API RTCGeometry rtcGetGeometryThreadSafe(RTCScene scene, uniform unsigned in
/* Gets the user-defined data pointer of the geometry. This function is not thread safe and should get used during rendering. */
RTC_API void* rtcGetGeometryUserDataFromScene(RTCScene scene, uniform unsigned int geomID);
/* Returns the interpolated transformation of an instance for the specified time. */
RTC_API void rtcGetGeometryTransformFromScene(RTCScene scene, uniform unsigned int geomID, uniform float time, uniform RTCFormat format, void* uniform xfm);
/* Returns the interpolated transformation of an instance for the specified time. Varying version. */
inline void rtcGetGeometryTransformFromScene(RTCScene scene, varying unsigned int geomID, varying float time, uniform RTCFormat format, void* uniform xfm)
{
varying float vmatrix[12];
foreach_unique(ugeomID in geomID)
foreach_unique(utime in time)
{
uniform float umatrix[12];
rtcGetGeometryTransformFromScene(scene,ugeomID,utime,RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR,umatrix);
for (int uniform j=0; j<12; j++) vmatrix[j] = umatrix[j];
}
/* store to desired layout */
varying float* vxfm = (varying float*) xfm;
switch (format)
{
case RTC_FORMAT_FLOAT3X4_ROW_MAJOR:
vxfm[ 0] = vmatrix[0]; vxfm[ 1] = vmatrix[3]; vxfm[ 2] = vmatrix[6]; vxfm[ 3] = vmatrix[9];
vxfm[ 4] = vmatrix[1]; vxfm[ 5] = vmatrix[4]; vxfm[ 6] = vmatrix[7]; vxfm[ 7] = vmatrix[10];
vxfm[ 8] = vmatrix[2]; vxfm[ 9] = vmatrix[5]; vxfm[10] = vmatrix[8]; vxfm[11] = vmatrix[11];
break;
case RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR:
vxfm[ 0] = vmatrix[0]; vxfm[ 1] = vmatrix[1]; vxfm[ 2] = vmatrix[2];
vxfm[ 3] = vmatrix[3]; vxfm[ 4] = vmatrix[4]; vxfm[ 5] = vmatrix[5];
vxfm[ 6] = vmatrix[6]; vxfm[ 7] = vmatrix[7]; vxfm[ 8] = vmatrix[8];
vxfm[ 9] = vmatrix[9]; vxfm[10] = vmatrix[10]; vxfm[11] = vmatrix[11];
break;
case RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR:
vxfm[ 0] = vmatrix[0]; vxfm[ 1] = vmatrix[1]; vxfm[ 2] = vmatrix[2]; vxfm[ 3] = 0.f;
vxfm[ 4] = vmatrix[3]; vxfm[ 5] = vmatrix[4]; vxfm[ 6] = vmatrix[5]; vxfm[ 7] = 0.f;
vxfm[ 8] = vmatrix[6]; vxfm[ 9] = vmatrix[7]; vxfm[10] = vmatrix[8]; vxfm[11] = 0.f;
vxfm[12] = vmatrix[9]; vxfm[13] = vmatrix[10]; vxfm[14] = vmatrix[11]; vxfm[15] = 1.f;
break;
default:
break;
}
}
/* Commits the scene. */
RTC_API void rtcCommitScene(RTCScene scene);
@@ -191,15 +236,26 @@ RTC_FORCEINLINE void rtcIntersectV(RTCScene scene, varying RTCRayHit* uniform ra
/* Forwards ray inside user geometry callback. */
RTC_API void rtcForwardIntersect1(const uniform RTCIntersectFunctionNArguments* uniform args, RTCScene scene, uniform RTCRay* uniform ray, uniform unsigned int instID);
/* Forwards ray inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_API void rtcForwardIntersect1Ex(const uniform RTCIntersectFunctionNArguments* uniform args, RTCScene scene, uniform RTCRay* uniform ray, uniform unsigned int instID, uniform unsigned int instPrimID);
/* Forwards ray packet of size 4 inside user geometry callback. */
RTC_API void rtcForwardIntersect4(const uniform int* uniform valid, const uniform RTCIntersectFunctionNArguments* uniform args, RTCScene scene, void* uniform ray4, uniform unsigned int instID);
/* Forwards ray packet of size 4 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_API void rtcForwardIntersect4Ex(const uniform int* uniform valid, const uniform RTCIntersectFunctionNArguments* uniform args, RTCScene scene, void* uniform ray4, uniform unsigned int instID, uniform unsigned int instPrimID);
/* Forwards ray packet of size 8 inside user geometry callback. */
RTC_API void rtcForwardIntersect8(const uniform int* uniform valid, const uniform RTCIntersectFunctionNArguments* uniform args, RTCScene scene, void* uniform ray8, uniform unsigned int instID);
/* Forwards ray packet of size 8 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_API void rtcForwardIntersect8Ex(const uniform int* uniform valid, const uniform RTCIntersectFunctionNArguments* uniform args, RTCScene scene, void* uniform ray8, uniform unsigned int instID, uniform unsigned int instPrimID);
/* Forwards ray packet of size 16 inside user geometry callback. */
RTC_API void rtcForwardIntersect16(const uniform int* uniform valid, const uniform RTCIntersectFunctionNArguments* uniform args, RTCScene scene, void* uniform ray16, uniform unsigned int instID);
/* Forwards ray packet of size 16 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_API void rtcForwardIntersect16Ex(const uniform int* uniform valid, const uniform RTCIntersectFunctionNArguments* uniform args, RTCScene scene, void* uniform ray16, uniform unsigned int instID, uniform unsigned int instPrimID);
/* Forwards ray intersection query inside user geometry callback. */
RTC_FORCEINLINE void rtcForwardIntersectV(const uniform RTCIntersectFunctionNArguments* uniform args, RTCScene scene, varying RTCRay* uniform iray, uniform unsigned int instID)
@@ -216,6 +272,21 @@ RTC_FORCEINLINE void rtcForwardIntersectV(const uniform RTCIntersectFunctionNArg
rtcForwardIntersect16((uniform int* uniform)&imask, args, scene, iray, instID);
}
/* Forwards ray intersection query inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_FORCEINLINE void rtcForwardIntersectVEx(const uniform RTCIntersectFunctionNArguments* uniform args, RTCScene scene, varying RTCRay* uniform iray, uniform unsigned int instID, uniform unsigned int instPrimID)
{
varying bool mask = __mask;
unmasked {
varying int imask = mask ? -1 : 0;
}
if (sizeof(varying float) == 16)
rtcForwardIntersect4Ex((uniform int* uniform)&imask, args, scene, iray, instID, instPrimID);
else if (sizeof(varying float) == 32)
rtcForwardIntersect8Ex((uniform int* uniform)&imask, args, scene, iray, instID, instPrimID);
else if (sizeof(varying float) == 64)
rtcForwardIntersect16Ex((uniform int* uniform)&imask, args, scene, iray, instID, instPrimID);
}
/* Tests a single ray for occlusion with the scene. */
RTC_API void rtcOccluded1(RTCScene scene, uniform RTCRay* uniform ray, uniform RTCOccludedArguments* uniform args = NULL);
@@ -249,15 +320,27 @@ RTC_FORCEINLINE void rtcOccludedV(RTCScene scene, varying RTCRay* uniform ray, u
/* Forwards single occlusion ray inside user geometry callback. */
RTC_API void rtcForwardOccluded1(const uniform RTCOccludedFunctionNArguments* uniform args, RTCScene scene, uniform RTCRay* uniform ray, uniform unsigned int instID);
/* Forwards single occlusion ray inside user geometry callback. Extended to handle instance arrays using instPrimID parameter.*/
RTC_API void rtcForwardOccluded1Ex(const uniform RTCOccludedFunctionNArguments* uniform args, RTCScene scene, uniform RTCRay* uniform ray, uniform unsigned int instID, uniform unsigned int instPrimID);
/* Forwards occlusion ray packet of size 4 inside user geometry callback. */
RTC_API void rtcForwardOccluded4(const uniform int* uniform valid, const uniform RTCOccludedFunctionNArguments* uniform args, RTCScene scene, void* uniform ray4, uniform unsigned int instID);
/* Forwards occlusion ray packet of size 4 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_API void rtcForwardOccluded4Ex(const uniform int* uniform valid, const uniform RTCOccludedFunctionNArguments* uniform args, RTCScene scene, void* uniform ray4, uniform unsigned int instID, uniform unsigned int instPrimID);
/* Forwards occlusion ray packet of size 8 inside user geometry callback. */
RTC_API void rtcForwardOccluded8(const uniform int* uniform valid, const uniform RTCOccludedFunctionNArguments* uniform args, RTCScene scene, void* uniform ray8, uniform unsigned int instID);
/* Forwards occlusion ray packet of size 8 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_API void rtcForwardOccluded8Ex(const uniform int* uniform valid, const uniform RTCOccludedFunctionNArguments* uniform args, RTCScene scene, void* uniform ray8, uniform unsigned int instID, uniform unsigned int instPrimID);
/* Forwards occlusion ray packet of size 16 inside user geometry callback. */
RTC_API void rtcForwardOccluded16(const uniform int* uniform valid, const uniform RTCOccludedFunctionNArguments* uniform args, RTCScene scene, void* uniform ray16, uniform unsigned int instID);
/* Forwards occlusion ray packet of size 16 inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_API void rtcForwardOccluded16Ex(const uniform int* uniform valid, const uniform RTCOccludedFunctionNArguments* uniform args, RTCScene scene, void* uniform ray16, uniform unsigned int instID, uniform unsigned int instPrimID);
/* Forwards ray occlusion query inside user geometry callback. */
RTC_FORCEINLINE void rtcForwardOccludedV(const uniform RTCOccludedFunctionNArguments* uniform args, RTCScene scene, varying RTCRay* uniform iray, uniform unsigned int instID)
{
@@ -274,6 +357,22 @@ RTC_FORCEINLINE void rtcForwardOccludedV(const uniform RTCOccludedFunctionNArgum
rtcForwardOccluded16((uniform int* uniform)&imask, args, scene, iray, instID);
}
/* Forwards ray occlusion query inside user geometry callback. Extended to handle instance arrays using instPrimID parameter. */
RTC_FORCEINLINE void rtcForwardOccludedVEx(const uniform RTCOccludedFunctionNArguments* uniform args, RTCScene scene, varying RTCRay* uniform iray, uniform unsigned int instID, uniform unsigned int instPrimID)
{
varying bool mask = __mask;
unmasked {
varying int imask = mask ? -1 : 0;
}
if (sizeof(varying float) == 16)
rtcForwardOccluded4Ex((uniform int* uniform)&imask, args, scene, iray, instID, instPrimID);
else if (sizeof(varying float) == 32)
rtcForwardOccluded8Ex((uniform int* uniform)&imask, args, scene, iray, instID, instPrimID);
else if (sizeof(varying float) == 64)
rtcForwardOccluded16Ex((uniform int* uniform)&imask, args, scene, iray, instID, instPrimID);
}
/*! collision callback */
struct RTCCollision { unsigned int geomID0; unsigned int primID0; unsigned int geomID1; unsigned int primID1; };
+15 -10
View File
@@ -6,6 +6,7 @@ IF (EMBREE_SYCL_RT_SIMULATION)
ENDIF()
IF (EMBREE_SYCL_SUPPORT)
ADD_SUBDIRECTORY(level_zero)
ADD_SUBDIRECTORY(rthwif)
ENDIF()
@@ -47,6 +48,7 @@ SET(EMBREE_LIBRARY_FILES
common/geometry.cpp
common/scene_user_geometry.cpp
common/scene_instance.cpp
common/scene_instance_array.cpp
common/scene_triangle_mesh.cpp
common/scene_quad_mesh.cpp
common/scene_curves.cpp
@@ -61,6 +63,7 @@ SET(EMBREE_LIBRARY_FILES
geometry/primitive4.cpp
geometry/instance_intersector.cpp
geometry/instance_array_intersector.cpp
geometry/curve_intersector_virtual_4v.cpp
geometry/curve_intersector_virtual_4i.cpp
geometry/curve_intersector_virtual_4i_mb.cpp
@@ -88,9 +91,13 @@ SET(EMBREE_LIBRARY_FILES
bvh/bvh_intersector1_bvh4.cpp
)
IF (EMBREE_SYCL_SUPPORT)
SET(EMBREE_LIBRARY_FILES ${EMBREE_LIBRARY_FILES}
sycl/rthwif_embree_builder.cpp)
sycl/rthwif_embree_builder.cpp
sycl/scene_sycl.cpp)
set_source_files_properties(sycl/scene_sycl.cpp PROPERTIES COMPILE_FLAGS ${CMAKE_CXX_FLAGS_SYCL})
ENDIF()
IF (EMBREE_GEOMETRY_SUBDIVISION)
@@ -113,6 +120,7 @@ MACRO(embree_files TARGET ISA)
SET(${TARGET}
geometry/instance_intersector.cpp
geometry/instance_array_intersector.cpp
geometry/curve_intersector_virtual_4v.cpp
geometry/curve_intersector_virtual_4i.cpp
geometry/curve_intersector_virtual_4i_mb.cpp
@@ -130,6 +138,7 @@ MACRO(embree_files TARGET ISA)
LIST(APPEND ${TARGET}
common/scene_user_geometry.cpp
common/scene_instance.cpp
common/scene_instance_array.cpp
common/scene_triangle_mesh.cpp
common/scene_quad_mesh.cpp
common/scene_curves.cpp
@@ -240,10 +249,9 @@ DISABLE_STACK_PROTECTOR_FOR_INTERSECTORS(${EMBREE_LIBRARY_FILES})
ADD_LIBRARY(embree ${EMBREE_LIB_TYPE} ${EMBREE_LIBRARY_FILES})
IF (EMBREE_SYCL_SUPPORT)
IF (EMBREE_LEVEL_ZERO)
TARGET_COMPILE_DEFINITIONS(embree PUBLIC EMBREE_LEVEL_ZERO)
ENDIF()
# add link flag '-fsycl' here to include the kernel for USM prefetch from
# scene_sycl.cpp in embree4.dll/embree4.so
TARGET_LINK_OPTIONS(embree PRIVATE "-fsycl")
ADD_LIBRARY(embree_sycl STATIC
sycl/rtcore_sycl.cpp
@@ -341,10 +349,7 @@ ENDIF()
TARGET_LINK_LIBRARIES(embree PRIVATE ${EMBREE_LIBRARIES} sys math simd lexers tasking)
IF (EMBREE_SYCL_SUPPORT)
TARGET_LINK_LIBRARIES(embree PRIVATE embree_rthwif ${SYCL_LIB_NAME} PUBLIC embree_sycl)
IF (EMBREE_LEVL_ZERO)
TARGET_LINK_LIBRARIES(embree PRIVATE ze_loader)
ENDIF()
TARGET_LINK_LIBRARIES(embree PRIVATE ${SYCL_LIB_NAME} ze_wrapper PUBLIC embree_sycl)
ENDIF()
#TARGET_LINK_LIBRARIES(embree PRIVATE ${EMBREE_LIBRARIES} sys math simd lexers tasking ${CMAKE_LINK_FLAGS_SYCL}) # FIXME: enable this line
@@ -357,7 +362,7 @@ target_include_directories(embree PUBLIC
# libtbb is located in same install folder as libembree
IF(WIN32)
ELSEIF(APPLE)
SET_TARGET_PROPERTIES(embree PROPERTIES INSTALL_RPATH "@rpath") # On MacOSX the app is supposed to already have an rpath set to that folder
SET_TARGET_PROPERTIES(embree PROPERTIES INSTALL_RPATH "@loader_path") # On MacOSX we tell dyld to find libtbb in the folder libembree is placed
ELSE()
SET_TARGET_PROPERTIES(embree PROPERTIES INSTALL_RPATH "$ORIGIN") # Linux we tell ld to find libtbb in the folder libembree is placed.
ENDIF()
+1 -2
View File
@@ -48,10 +48,9 @@ namespace embree
}
Settings (size_t sahBlockSize, size_t minLeafSize, size_t maxLeafSize, float travCost, float intCost, size_t singleThreadThreshold, size_t primrefarrayalloc = inf)
: branchingFactor(2), maxDepth(32), logBlockSize(bsr(sahBlockSize)), minLeafSize(minLeafSize), maxLeafSize(maxLeafSize),
: branchingFactor(2), maxDepth(32), logBlockSize(bsr(sahBlockSize)), minLeafSize(min(minLeafSize,maxLeafSize)), maxLeafSize(maxLeafSize),
travCost(travCost), intCost(intCost), singleThreadThreshold(singleThreadThreshold), primrefarrayalloc(primrefarrayalloc)
{
minLeafSize = min(minLeafSize,maxLeafSize);
}
public:
+3 -5
View File
@@ -283,11 +283,9 @@ namespace embree
if (likely(splits <= 1)) continue; /* todo: does this ever happen ? */
//int bin0 = split.mapping.bin(prims0[i].lower)[split.dim];
//int bin1 = split.mapping.bin(prims0[i].upper)[split.dim];
//if (unlikely(bin0 < split.pos && bin1 >= split.pos))
if (unlikely(prims0[i].lower[split.dim] < fpos && prims0[i].upper[split.dim] > fpos))
const int bin0 = split.mapping.bin(prims0[i].lower)[split.dim];
const int bin1 = split.mapping.bin(prims0[i].upper)[split.dim];
if (unlikely(bin0 < split.pos && bin1 >= split.pos))
{
assert(splits > 1);
+1
View File
@@ -354,5 +354,6 @@ namespace embree
IF_ENABLED_QUADS(template size_t createMortonCodeArray<QuadMesh>(QuadMesh* mesh COMMA mvector<BVHBuilderMorton::BuildPrim>& morton COMMA BuildProgressMonitor& progressMonitor));
IF_ENABLED_USER (template size_t createMortonCodeArray<UserGeometry>(UserGeometry* mesh COMMA mvector<BVHBuilderMorton::BuildPrim>& morton COMMA BuildProgressMonitor& progressMonitor));
IF_ENABLED_INSTANCE (template size_t createMortonCodeArray<Instance>(Instance* mesh COMMA mvector<BVHBuilderMorton::BuildPrim>& morton COMMA BuildProgressMonitor& progressMonitor));
IF_ENABLED_INSTANCE_ARRAY (template size_t createMortonCodeArray<InstanceArray>(InstanceArray* mesh COMMA mvector<BVHBuilderMorton::BuildPrim>& morton COMMA BuildProgressMonitor& progressMonitor));
}
}
+2 -5
View File
@@ -38,7 +38,6 @@ namespace embree
__forceinline bool split_pos(const PrimRef& prim, unsigned int& dim_o, float& fsplit_o) const
{
#if !defined(__SYCL_DEVICE_ONLY__)
/* compute morton code */
const Vec3fa lower = prim.lower;
const Vec3fa upper = prim.upper;
@@ -73,7 +72,6 @@ namespace embree
dim_o = dim;
fsplit_o = fsplit;
#endif
return true;
}
@@ -85,11 +83,10 @@ namespace embree
const Vec3fa gupper = (upper-base)*Vec3fa(scale)-Vec3fa(0.2f);
Vec3ia ilower(floor(glower));
Vec3ia iupper(floor(gupper));
#if !defined(__SYCL_DEVICE_ONLY__)
/* this ignores dimensions that are empty */
iupper = (Vec3ia)select(vint4(glower) >= vint4(gupper),vint4(ilower),vint4(iupper));
#endif
/* compute a morton code for the lower and upper grid coordinates. */
const unsigned int lower_code = bitInterleave(ilower.x,ilower.y,ilower.z);
const unsigned int upper_code = bitInterleave(iupper.x,iupper.y,iupper.z);
+92 -4
View File
@@ -17,6 +17,7 @@
#include "../geometry/subdivpatch1.h"
#include "../geometry/object.h"
#include "../geometry/instance.h"
#include "../geometry/instance_array.h"
#include "../geometry/subgrid.h"
#include "../common/accelinstance.h"
@@ -66,6 +67,9 @@ namespace embree
DECLARE_SYMBOL2(Accel::Intersector1,BVH4InstanceIntersector1);
DECLARE_SYMBOL2(Accel::Intersector1,BVH4InstanceMBIntersector1);
DECLARE_SYMBOL2(Accel::Intersector1,BVH4InstanceArrayIntersector1);
DECLARE_SYMBOL2(Accel::Intersector1,BVH4InstanceArrayMBIntersector1);
DECLARE_SYMBOL2(Accel::Intersector1,BVH4GridIntersector1Moeller);
DECLARE_SYMBOL2(Accel::Intersector1,BVH4GridMBIntersector1Moeller);
DECLARE_SYMBOL2(Accel::Intersector1,BVH4GridIntersector1Pluecker);
@@ -104,6 +108,9 @@ namespace embree
DECLARE_SYMBOL2(Accel::Intersector4,BVH4InstanceIntersector4Chunk);
DECLARE_SYMBOL2(Accel::Intersector4,BVH4InstanceMBIntersector4Chunk);
DECLARE_SYMBOL2(Accel::Intersector4,BVH4InstanceArrayIntersector4Chunk);
DECLARE_SYMBOL2(Accel::Intersector4,BVH4InstanceArrayMBIntersector4Chunk);
DECLARE_SYMBOL2(Accel::Intersector4,BVH4GridIntersector4HybridMoeller);
DECLARE_SYMBOL2(Accel::Intersector4,BVH4GridMBIntersector4HybridMoeller);
DECLARE_SYMBOL2(Accel::Intersector4,BVH4GridIntersector4HybridPluecker);
@@ -142,6 +149,9 @@ namespace embree
DECLARE_SYMBOL2(Accel::Intersector8,BVH4InstanceIntersector8Chunk);
DECLARE_SYMBOL2(Accel::Intersector8,BVH4InstanceMBIntersector8Chunk);
DECLARE_SYMBOL2(Accel::Intersector8,BVH4InstanceArrayIntersector8Chunk);
DECLARE_SYMBOL2(Accel::Intersector8,BVH4InstanceArrayMBIntersector8Chunk);
DECLARE_SYMBOL2(Accel::Intersector8,BVH4GridIntersector8HybridMoeller);
DECLARE_SYMBOL2(Accel::Intersector8,BVH4GridMBIntersector8HybridMoeller);
DECLARE_SYMBOL2(Accel::Intersector8,BVH4GridIntersector8HybridPluecker);
@@ -180,6 +190,9 @@ namespace embree
DECLARE_SYMBOL2(Accel::Intersector16,BVH4InstanceIntersector16Chunk);
DECLARE_SYMBOL2(Accel::Intersector16,BVH4InstanceMBIntersector16Chunk);
DECLARE_SYMBOL2(Accel::Intersector16,BVH4InstanceArrayIntersector16Chunk);
DECLARE_SYMBOL2(Accel::Intersector16,BVH4InstanceArrayMBIntersector16Chunk);
DECLARE_SYMBOL2(Accel::Intersector16,BVH4GridIntersector16HybridMoeller);
DECLARE_SYMBOL2(Accel::Intersector16,BVH4GridMBIntersector16HybridMoeller);
DECLARE_SYMBOL2(Accel::Intersector16,BVH4GridIntersector16HybridPluecker);
@@ -190,6 +203,7 @@ namespace embree
DECLARE_ISA_FUNCTION(Builder*,BVH4BuilderTwoLevelQuadMeshSAH,void* COMMA Scene* COMMA bool);
DECLARE_ISA_FUNCTION(Builder*,BVH4BuilderTwoLevelVirtualSAH,void* COMMA Scene* COMMA bool);
DECLARE_ISA_FUNCTION(Builder*,BVH4BuilderTwoLevelInstanceSAH,void* COMMA Scene* COMMA Geometry::GTypeMask COMMA bool);
DECLARE_ISA_FUNCTION(Builder*,BVH4BuilderTwoLevelInstanceArraySAH,void* COMMA Scene* COMMA Geometry::GTypeMask COMMA bool);
DECLARE_ISA_FUNCTION(Builder*,BVH4Curve4vBuilder_OBB_New,void* COMMA Scene* COMMA size_t);
DECLARE_ISA_FUNCTION(Builder*,BVH4Curve4iBuilder_OBB_New,void* COMMA Scene* COMMA size_t);
@@ -220,7 +234,10 @@ namespace embree
DECLARE_ISA_FUNCTION(Builder*,BVH4InstanceSceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);
DECLARE_ISA_FUNCTION(Builder*,BVH4InstanceMBSceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);
DECLARE_ISA_FUNCTION(Builder*,BVH4InstanceArraySceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);
DECLARE_ISA_FUNCTION(Builder*,BVH4InstanceArrayMBSceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);
DECLARE_ISA_FUNCTION(Builder*,BVH4GridSceneBuilderSAH,void* COMMA Scene* COMMA size_t);
DECLARE_ISA_FUNCTION(Builder*,BVH4GridMBSceneBuilderSAH,void* COMMA Scene* COMMA size_t);
@@ -249,6 +266,7 @@ namespace embree
IF_ENABLED_QUADS (SELECT_SYMBOL_DEFAULT_AVX(features,BVH4BuilderTwoLevelQuadMeshSAH));
IF_ENABLED_USER (SELECT_SYMBOL_DEFAULT_AVX(features,BVH4BuilderTwoLevelVirtualSAH));
IF_ENABLED_INSTANCE (SELECT_SYMBOL_DEFAULT_AVX(features,BVH4BuilderTwoLevelInstanceSAH));
IF_ENABLED_INSTANCE_ARRAY (SELECT_SYMBOL_DEFAULT_AVX(features,BVH4BuilderTwoLevelInstanceArraySAH));
IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX(features,BVH4Curve4vBuilder_OBB_New));
IF_ENABLED_CURVES_OR_POINTS(SELECT_SYMBOL_DEFAULT_AVX(features,BVH4Curve4iBuilder_OBB_New));
@@ -279,7 +297,10 @@ namespace embree
IF_ENABLED_INSTANCE(SELECT_SYMBOL_DEFAULT_AVX(features,BVH4InstanceSceneBuilderSAH));
IF_ENABLED_INSTANCE(SELECT_SYMBOL_DEFAULT_AVX(features,BVH4InstanceMBSceneBuilderSAH));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_DEFAULT_AVX(features,BVH4InstanceArraySceneBuilderSAH));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_DEFAULT_AVX(features,BVH4InstanceArrayMBSceneBuilderSAH));
IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_AVX(features,BVH4GridSceneBuilderSAH));
IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_AVX(features,BVH4GridMBSceneBuilderSAH));
@@ -332,6 +353,9 @@ namespace embree
IF_ENABLED_INSTANCE(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4InstanceIntersector1));
IF_ENABLED_INSTANCE(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4InstanceMBIntersector1));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4InstanceArrayIntersector1));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4InstanceArrayMBIntersector1));
IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4GridIntersector1Moeller));
IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4GridMBIntersector1Moeller))
IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4GridIntersector1Pluecker));
@@ -372,7 +396,10 @@ namespace embree
IF_ENABLED_INSTANCE(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4InstanceIntersector4Chunk));
IF_ENABLED_INSTANCE(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4InstanceMBIntersector4Chunk));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4InstanceArrayIntersector4Chunk));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4InstanceArrayMBIntersector4Chunk));
IF_ENABLED_QUADS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4Quad4vIntersector4HybridMoeller));
IF_ENABLED_GRIDS(SELECT_SYMBOL_DEFAULT_SSE42_AVX_AVX2_AVX512(features,BVH4GridIntersector4HybridMoeller));
@@ -407,13 +434,16 @@ namespace embree
IF_ENABLED_SUBDIV(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4SubdivPatch1Intersector8));
IF_ENABLED_SUBDIV(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4SubdivPatch1MBIntersector8));
IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4VirtualIntersector8Chunk));
IF_ENABLED_USER(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4VirtualMBIntersector8Chunk));
IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4InstanceIntersector8Chunk));
IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4InstanceMBIntersector8Chunk));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4InstanceArrayIntersector8Chunk));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4InstanceArrayMBIntersector8Chunk));
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4GridIntersector8HybridMoeller));
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4GridMBIntersector8HybridMoeller));
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH4GridIntersector8HybridPluecker));
@@ -453,6 +483,9 @@ namespace embree
IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX512(features,BVH4InstanceIntersector16Chunk));
IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX512(features,BVH4InstanceMBIntersector16Chunk));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX512(features,BVH4InstanceArrayIntersector16Chunk));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX512(features,BVH4InstanceArrayMBIntersector16Chunk));
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX512(features,BVH4GridIntersector16HybridMoeller));
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX512(features,BVH4GridMBIntersector16HybridMoeller));
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX512(features,BVH4GridIntersector16HybridPluecker));
@@ -816,6 +849,32 @@ namespace embree
#endif
return intersectors;
}
Accel::Intersectors BVH4Factory::BVH4InstanceArrayIntersectors(BVH4* bvh)
{
Accel::Intersectors intersectors;
intersectors.ptr = bvh;
intersectors.intersector1 = BVH4InstanceArrayIntersector1();
#if defined (EMBREE_RAY_PACKETS)
intersectors.intersector4 = BVH4InstanceArrayIntersector4Chunk();
intersectors.intersector8 = BVH4InstanceArrayIntersector8Chunk();
intersectors.intersector16 = BVH4InstanceArrayIntersector16Chunk();
#endif
return intersectors;
}
Accel::Intersectors BVH4Factory::BVH4InstanceArrayMBIntersectors(BVH4* bvh)
{
Accel::Intersectors intersectors;
intersectors.ptr = bvh;
intersectors.intersector1 = BVH4InstanceArrayMBIntersector1();
#if defined (EMBREE_RAY_PACKETS)
intersectors.intersector4 = BVH4InstanceArrayMBIntersector4Chunk();
intersectors.intersector8 = BVH4InstanceArrayMBIntersector8Chunk();
intersectors.intersector16 = BVH4InstanceArrayMBIntersector16Chunk();
#endif
return intersectors;
}
Accel::Intersectors BVH4Factory::BVH4SubdivPatch1Intersectors(BVH4* bvh)
{
@@ -1193,6 +1252,35 @@ namespace embree
return new AccelInstance(accel,builder,intersectors);
}
Accel* BVH4Factory::BVH4InstanceArray(Scene* scene, BuildVariant bvariant)
{
BVH4* accel = new BVH4(InstanceArrayPrimitive::type,scene);
Accel::Intersectors intersectors = BVH4InstanceArrayIntersectors(accel);
auto gtype = Geometry::MTY_INSTANCE_ARRAY;
Builder* builder = nullptr;
if (scene->device->object_builder == "default") {
switch (bvariant) {
case BuildVariant::STATIC : builder = BVH4InstanceArraySceneBuilderSAH(accel,scene,gtype); break;
case BuildVariant::DYNAMIC : builder = BVH4BuilderTwoLevelInstanceArraySAH(accel,scene,gtype,false); break;
case BuildVariant::HIGH_QUALITY: assert(false); break;
}
}
else if (scene->device->object_builder == "sah") { builder = BVH4InstanceArraySceneBuilderSAH(accel,scene,gtype); }
else if (scene->device->object_builder == "dynamic") { builder = BVH4BuilderTwoLevelInstanceArraySAH(accel,scene,gtype,false); }
else throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"unknown builder "+scene->device->object_builder+" for BVH4<Object>");
return new AccelInstance(accel,builder,intersectors);
}
Accel* BVH4Factory::BVH4InstanceArrayMB(Scene* scene)
{
BVH4* accel = new BVH4(InstanceArrayPrimitive::type,scene);
Accel::Intersectors intersectors = BVH4InstanceArrayMBIntersectors(accel);
Builder* builder = BVH4InstanceArrayMBSceneBuilderSAH(accel,scene,Geometry::MTY_INSTANCE_ARRAY);
return new AccelInstance(accel,builder,intersectors);
}
Accel::Intersectors BVH4Factory::BVH4GridIntersectors(BVH4* bvh, IntersectVariant ivariant)
{
Accel::Intersectors intersectors;
+24 -2
View File
@@ -48,6 +48,9 @@ namespace embree
Accel* BVH4Instance(Scene* scene, bool isExpensive, BuildVariant bvariant = BuildVariant::STATIC);
Accel* BVH4InstanceMB(Scene* scene, bool isExpensive);
Accel* BVH4InstanceArray(Scene* scene, BuildVariant bvariant = BuildVariant::STATIC);
Accel* BVH4InstanceArrayMB(Scene* scene);
Accel* BVH4Grid(Scene* scene, BuildVariant bvariant = BuildVariant::STATIC, IntersectVariant ivariant = IntersectVariant::FAST);
Accel* BVH4GridMB(Scene* scene, BuildVariant bvariant = BuildVariant::STATIC, IntersectVariant ivariant = IntersectVariant::FAST);
@@ -77,7 +80,10 @@ namespace embree
Accel::Intersectors BVH4InstanceIntersectors(BVH4* bvh);
Accel::Intersectors BVH4InstanceMBIntersectors(BVH4* bvh);
Accel::Intersectors BVH4InstanceArrayIntersectors(BVH4* bvh);
Accel::Intersectors BVH4InstanceArrayMBIntersectors(BVH4* bvh);
Accel::Intersectors BVH4SubdivPatch1Intersectors(BVH4* bvh);
Accel::Intersectors BVH4SubdivPatch1MBIntersectors(BVH4* bvh);
@@ -122,7 +128,10 @@ namespace embree
DEFINE_SYMBOL2(Accel::Intersector1,BVH4InstanceIntersector1);
DEFINE_SYMBOL2(Accel::Intersector1,BVH4InstanceMBIntersector1);
DEFINE_SYMBOL2(Accel::Intersector1,BVH4InstanceArrayIntersector1);
DEFINE_SYMBOL2(Accel::Intersector1,BVH4InstanceArrayMBIntersector1);
DEFINE_SYMBOL2(Accel::Intersector1,BVH4GridIntersector1Moeller);
DEFINE_SYMBOL2(Accel::Intersector1,BVH4GridMBIntersector1Moeller);
DEFINE_SYMBOL2(Accel::Intersector1,BVH4GridIntersector1Pluecker);
@@ -161,6 +170,9 @@ namespace embree
DEFINE_SYMBOL2(Accel::Intersector4,BVH4InstanceIntersector4Chunk);
DEFINE_SYMBOL2(Accel::Intersector4,BVH4InstanceMBIntersector4Chunk);
DEFINE_SYMBOL2(Accel::Intersector4,BVH4InstanceArrayIntersector4Chunk);
DEFINE_SYMBOL2(Accel::Intersector4,BVH4InstanceArrayMBIntersector4Chunk);
DEFINE_SYMBOL2(Accel::Intersector4,BVH4GridIntersector4HybridMoeller);
DEFINE_SYMBOL2(Accel::Intersector4,BVH4GridMBIntersector4HybridMoeller);
DEFINE_SYMBOL2(Accel::Intersector4,BVH4GridIntersector4HybridPluecker);
@@ -201,6 +213,9 @@ namespace embree
DEFINE_SYMBOL2(Accel::Intersector8,BVH4InstanceIntersector8Chunk);
DEFINE_SYMBOL2(Accel::Intersector8,BVH4InstanceMBIntersector8Chunk);
DEFINE_SYMBOL2(Accel::Intersector8,BVH4InstanceArrayIntersector8Chunk);
DEFINE_SYMBOL2(Accel::Intersector8,BVH4InstanceArrayMBIntersector8Chunk);
DEFINE_SYMBOL2(Accel::Intersector8,BVH4GridIntersector8HybridMoeller);
DEFINE_SYMBOL2(Accel::Intersector8,BVH4GridMBIntersector8HybridMoeller);
DEFINE_SYMBOL2(Accel::Intersector8,BVH4GridIntersector8HybridPluecker);
@@ -241,6 +256,9 @@ namespace embree
DEFINE_SYMBOL2(Accel::Intersector16,BVH4InstanceIntersector16Chunk);
DEFINE_SYMBOL2(Accel::Intersector16,BVH4InstanceMBIntersector16Chunk);
DEFINE_SYMBOL2(Accel::Intersector16,BVH4InstanceArrayIntersector16Chunk);
DEFINE_SYMBOL2(Accel::Intersector16,BVH4InstanceArrayMBIntersector16Chunk);
DEFINE_SYMBOL2(Accel::Intersector16,BVH4GridIntersector16HybridMoeller);
DEFINE_SYMBOL2(Accel::Intersector16,BVH4GridMBIntersector16HybridMoeller);
DEFINE_SYMBOL2(Accel::Intersector16,BVH4GridIntersector16HybridPluecker);
@@ -274,6 +292,9 @@ namespace embree
DEFINE_ISA_FUNCTION(Builder*,BVH4InstanceSceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);
DEFINE_ISA_FUNCTION(Builder*,BVH4InstanceMBSceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);
DEFINE_ISA_FUNCTION(Builder*,BVH4InstanceArraySceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);
DEFINE_ISA_FUNCTION(Builder*,BVH4InstanceArrayMBSceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);
DEFINE_ISA_FUNCTION(Builder*,BVH4GridSceneBuilderSAH,void* COMMA Scene* COMMA size_t);
DEFINE_ISA_FUNCTION(Builder*,BVH4GridMBSceneBuilderSAH,void* COMMA Scene* COMMA size_t);
@@ -292,5 +313,6 @@ namespace embree
DEFINE_ISA_FUNCTION(Builder*,BVH4BuilderTwoLevelQuadMeshSAH,void* COMMA Scene* COMMA bool);
DEFINE_ISA_FUNCTION(Builder*,BVH4BuilderTwoLevelVirtualSAH,void* COMMA Scene* COMMA bool);
DEFINE_ISA_FUNCTION(Builder*,BVH4BuilderTwoLevelInstanceSAH,void* COMMA Scene* COMMA Geometry::GTypeMask COMMA bool);
DEFINE_ISA_FUNCTION(Builder*,BVH4BuilderTwoLevelInstanceArraySAH,void* COMMA Scene* COMMA Geometry::GTypeMask COMMA bool);
};
}
+90
View File
@@ -21,6 +21,7 @@
#include "../geometry/subdivpatch1.h"
#include "../geometry/object.h"
#include "../geometry/instance.h"
#include "../geometry/instance_array.h"
#include "../geometry/subgrid.h"
#include "../common/accelinstance.h"
@@ -66,6 +67,9 @@ namespace embree
DECLARE_SYMBOL2(Accel::Intersector1,BVH8InstanceIntersector1);
DECLARE_SYMBOL2(Accel::Intersector1,BVH8InstanceMBIntersector1);
DECLARE_SYMBOL2(Accel::Intersector1,BVH8InstanceArrayIntersector1);
DECLARE_SYMBOL2(Accel::Intersector1,BVH8InstanceArrayMBIntersector1);
DECLARE_SYMBOL2(Accel::Intersector1,BVH8GridIntersector1Moeller);
DECLARE_SYMBOL2(Accel::Intersector1,BVH8GridMBIntersector1Moeller);
DECLARE_SYMBOL2(Accel::Intersector1,BVH8GridIntersector1Pluecker);
@@ -101,6 +105,9 @@ namespace embree
DECLARE_SYMBOL2(Accel::Intersector4,BVH8InstanceIntersector4Chunk);
DECLARE_SYMBOL2(Accel::Intersector4,BVH8InstanceMBIntersector4Chunk);
DECLARE_SYMBOL2(Accel::Intersector4,BVH8InstanceArrayIntersector4Chunk);
DECLARE_SYMBOL2(Accel::Intersector4,BVH8InstanceArrayMBIntersector4Chunk);
DECLARE_SYMBOL2(Accel::Intersector4,BVH8GridIntersector4HybridMoeller);
DECLARE_SYMBOL2(Accel::Intersector4,BVH8GridIntersector4HybridPluecker);
@@ -135,6 +142,9 @@ namespace embree
DECLARE_SYMBOL2(Accel::Intersector8,BVH8InstanceIntersector8Chunk);
DECLARE_SYMBOL2(Accel::Intersector8,BVH8InstanceMBIntersector8Chunk);
DECLARE_SYMBOL2(Accel::Intersector8,BVH8InstanceArrayIntersector8Chunk);
DECLARE_SYMBOL2(Accel::Intersector8,BVH8InstanceArrayMBIntersector8Chunk);
DECLARE_SYMBOL2(Accel::Intersector8,BVH8GridIntersector8HybridMoeller);
DECLARE_SYMBOL2(Accel::Intersector8,BVH8GridIntersector8HybridPluecker);
@@ -169,6 +179,9 @@ namespace embree
DECLARE_SYMBOL2(Accel::Intersector16,BVH8InstanceIntersector16Chunk);
DECLARE_SYMBOL2(Accel::Intersector16,BVH8InstanceMBIntersector16Chunk);
DECLARE_SYMBOL2(Accel::Intersector16,BVH8InstanceArrayIntersector16Chunk);
DECLARE_SYMBOL2(Accel::Intersector16,BVH8InstanceArrayMBIntersector16Chunk);
DECLARE_SYMBOL2(Accel::Intersector16,BVH8GridIntersector16HybridMoeller);
DECLARE_SYMBOL2(Accel::Intersector16,BVH8GridIntersector16HybridPluecker);
@@ -194,6 +207,9 @@ namespace embree
DECLARE_ISA_FUNCTION(Builder*,BVH8InstanceSceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);
DECLARE_ISA_FUNCTION(Builder*,BVH8InstanceMBSceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);
DECLARE_ISA_FUNCTION(Builder*,BVH8InstanceArraySceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);
DECLARE_ISA_FUNCTION(Builder*,BVH8InstanceArrayMBSceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);
DECLARE_ISA_FUNCTION(Builder*,BVH8Triangle4SceneBuilderFastSpatialSAH,void* COMMA Scene* COMMA size_t);
DECLARE_ISA_FUNCTION(Builder*,BVH8Triangle4vSceneBuilderFastSpatialSAH,void* COMMA Scene* COMMA size_t);
DECLARE_ISA_FUNCTION(Builder*,BVH8Quad4vSceneBuilderFastSpatialSAH,void* COMMA Scene* COMMA size_t);
@@ -206,6 +222,7 @@ namespace embree
DECLARE_ISA_FUNCTION(Builder*,BVH8BuilderTwoLevelQuadMeshSAH,void* COMMA Scene* COMMA bool);
DECLARE_ISA_FUNCTION(Builder*,BVH8BuilderTwoLevelVirtualSAH,void* COMMA Scene* COMMA bool);
DECLARE_ISA_FUNCTION(Builder*,BVH8BuilderTwoLevelInstanceSAH,void* COMMA Scene* COMMA Geometry::GTypeMask COMMA bool);
DECLARE_ISA_FUNCTION(Builder*,BVH8BuilderTwoLevelInstanceArraySAH,void* COMMA Scene* COMMA Geometry::GTypeMask COMMA bool);
BVH8Factory::BVH8Factory(int bfeatures, int ifeatures)
{
@@ -238,6 +255,9 @@ namespace embree
IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX(features,BVH8InstanceSceneBuilderSAH));
IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX(features,BVH8InstanceMBSceneBuilderSAH));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX(features,BVH8InstanceArraySceneBuilderSAH));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX(features,BVH8InstanceArrayMBSceneBuilderSAH));
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX(features,BVH8GridSceneBuilderSAH));
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX(features,BVH8GridMBSceneBuilderSAH));
@@ -252,6 +272,7 @@ namespace embree
IF_ENABLED_QUADS (SELECT_SYMBOL_INIT_AVX(features,BVH8BuilderTwoLevelQuadMeshSAH));
IF_ENABLED_USER (SELECT_SYMBOL_INIT_AVX(features,BVH8BuilderTwoLevelVirtualSAH));
IF_ENABLED_INSTANCE (SELECT_SYMBOL_INIT_AVX(features,BVH8BuilderTwoLevelInstanceSAH));
IF_ENABLED_INSTANCE_ARRAY (SELECT_SYMBOL_INIT_AVX(features,BVH8BuilderTwoLevelInstanceArraySAH));
}
void BVH8Factory::selectIntersectors(int features)
@@ -295,6 +316,9 @@ namespace embree
IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceIntersector1));
IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceMBIntersector1));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceArrayIntersector1));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceArrayMBIntersector1));
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8GridIntersector1Moeller));
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8GridMBIntersector1Moeller))
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8GridIntersector1Pluecker));
@@ -333,6 +357,9 @@ namespace embree
IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceIntersector4Chunk));
IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceMBIntersector4Chunk));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceArrayIntersector4Chunk));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceArrayMBIntersector4Chunk));
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8GridIntersector4HybridMoeller));
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8GridIntersector4HybridPluecker));
@@ -368,6 +395,9 @@ namespace embree
IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceIntersector8Chunk));
IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceMBIntersector8Chunk));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceArrayIntersector8Chunk));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8InstanceArrayMBIntersector8Chunk));
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8GridIntersector8HybridMoeller));
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX_AVX2_AVX512(features,BVH8GridIntersector8HybridPluecker));
@@ -403,6 +433,9 @@ namespace embree
IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX512(features,BVH8InstanceIntersector16Chunk));
IF_ENABLED_INSTANCE(SELECT_SYMBOL_INIT_AVX512(features,BVH8InstanceMBIntersector16Chunk));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX512(features,BVH8InstanceArrayIntersector16Chunk));
IF_ENABLED_INSTANCE_ARRAY(SELECT_SYMBOL_INIT_AVX512(features,BVH8InstanceArrayMBIntersector16Chunk));
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX512(features,BVH8GridIntersector16HybridMoeller));
IF_ENABLED_GRIDS(SELECT_SYMBOL_INIT_AVX512(features,BVH8GridIntersector16HybridPluecker));
@@ -767,6 +800,19 @@ namespace embree
return intersectors;
}
Accel::Intersectors BVH8Factory::BVH8InstanceArrayIntersectors(BVH8* bvh)
{
Accel::Intersectors intersectors;
intersectors.ptr = bvh;
intersectors.intersector1 = BVH8InstanceArrayIntersector1();
#if defined (EMBREE_RAY_PACKETS)
intersectors.intersector4 = BVH8InstanceArrayIntersector4Chunk();
intersectors.intersector8 = BVH8InstanceArrayIntersector8Chunk();
intersectors.intersector16 = BVH8InstanceArrayIntersector16Chunk();
#endif
return intersectors;
}
Accel::Intersectors BVH8Factory::BVH8InstanceMBIntersectors(BVH8* bvh)
{
Accel::Intersectors intersectors;
@@ -780,6 +826,19 @@ namespace embree
return intersectors;
}
Accel::Intersectors BVH8Factory::BVH8InstanceArrayMBIntersectors(BVH8* bvh)
{
Accel::Intersectors intersectors;
intersectors.ptr = bvh;
intersectors.intersector1 = BVH8InstanceArrayMBIntersector1();
#if defined (EMBREE_RAY_PACKETS)
intersectors.intersector4 = BVH8InstanceArrayMBIntersector4Chunk();
intersectors.intersector8 = BVH8InstanceArrayMBIntersector8Chunk();
intersectors.intersector16 = BVH8InstanceArrayMBIntersector16Chunk();
#endif
return intersectors;
}
Accel* BVH8Factory::BVH8OBBVirtualCurve8v(Scene* scene, IntersectVariant ivariant)
{
BVH8* accel = new BVH8(Curve8v::type,scene);
@@ -1024,6 +1083,28 @@ namespace embree
return new AccelInstance(accel,builder,intersectors);
}
Accel* BVH8Factory::BVH8InstanceArray(Scene* scene, BuildVariant bvariant)
{
BVH8* accel = new BVH8(InstanceArrayPrimitive::type,scene);
Accel::Intersectors intersectors = BVH8InstanceArrayIntersectors(accel);
auto gtype = Geometry::MTY_INSTANCE_ARRAY;
// Builder* builder = BVH8InstanceSceneBuilderSAH(accel,scene,gtype);
Builder* builder = nullptr;
if (scene->device->object_builder == "default") {
switch (bvariant) {
case BuildVariant::STATIC : builder = BVH8InstanceArraySceneBuilderSAH(accel,scene,gtype); break;
case BuildVariant::DYNAMIC : builder = BVH8BuilderTwoLevelInstanceArraySAH(accel,scene,gtype,false); break;
case BuildVariant::HIGH_QUALITY: assert(false); break;
}
}
else if (scene->device->object_builder == "sah") builder = BVH8InstanceArraySceneBuilderSAH(accel,scene,gtype);
else if (scene->device->object_builder == "dynamic") builder = BVH8BuilderTwoLevelInstanceArraySAH(accel,scene,gtype,false);
else throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"unknown builder "+scene->device->object_builder+" for BVH8<Object>");
return new AccelInstance(accel,builder,intersectors);
}
Accel* BVH8Factory::BVH8InstanceMB(Scene* scene, bool isExpensive)
{
BVH8* accel = new BVH8(InstancePrimitive::type,scene);
@@ -1033,6 +1114,15 @@ namespace embree
return new AccelInstance(accel,builder,intersectors);
}
Accel* BVH8Factory::BVH8InstanceArrayMB(Scene* scene)
{
BVH8* accel = new BVH8(InstanceArrayPrimitive::type,scene);
Accel::Intersectors intersectors = BVH8InstanceArrayMBIntersectors(accel);
auto gtype = Geometry::MTY_INSTANCE_ARRAY;
Builder* builder = BVH8InstanceArrayMBSceneBuilderSAH(accel,scene,gtype);
return new AccelInstance(accel,builder,intersectors);
}
Accel::Intersectors BVH8Factory::BVH8GridIntersectors(BVH8* bvh, IntersectVariant ivariant)
{
Accel::Intersectors intersectors;
+25 -3
View File
@@ -39,6 +39,9 @@ namespace embree
Accel* BVH8Instance(Scene* scene, bool isExpensive, BuildVariant bvariant = BuildVariant::STATIC);
Accel* BVH8InstanceMB(Scene* scene, bool isExpensive);
Accel* BVH8InstanceArray(Scene* scene, BuildVariant bvariant = BuildVariant::STATIC);
Accel* BVH8InstanceArrayMB(Scene* scene);
Accel* BVH8Grid(Scene* scene, BuildVariant bvariant = BuildVariant::STATIC, IntersectVariant ivariant = IntersectVariant::FAST);
Accel* BVH8GridMB(Scene* scene, BuildVariant bvariant = BuildVariant::STATIC, IntersectVariant ivariant = IntersectVariant::FAST);
@@ -70,6 +73,9 @@ namespace embree
Accel::Intersectors BVH8InstanceIntersectors(BVH8* bvh);
Accel::Intersectors BVH8InstanceMBIntersectors(BVH8* bvh);
Accel::Intersectors BVH8InstanceArrayIntersectors(BVH8* bvh);
Accel::Intersectors BVH8InstanceArrayMBIntersectors(BVH8* bvh);
Accel::Intersectors BVH8GridIntersectors(BVH8* bvh, IntersectVariant ivariant);
Accel::Intersectors BVH8GridMBIntersectors(BVH8* bvh, IntersectVariant ivariant);
@@ -111,6 +117,9 @@ namespace embree
DEFINE_SYMBOL2(Accel::Intersector1,BVH8InstanceIntersector1);
DEFINE_SYMBOL2(Accel::Intersector1,BVH8InstanceMBIntersector1);
DEFINE_SYMBOL2(Accel::Intersector1,BVH8InstanceArrayIntersector1);
DEFINE_SYMBOL2(Accel::Intersector1,BVH8InstanceArrayMBIntersector1);
DEFINE_SYMBOL2(Accel::Intersector1,BVH8GridIntersector1Moeller);
DEFINE_SYMBOL2(Accel::Intersector1,BVH8GridMBIntersector1Moeller);
DEFINE_SYMBOL2(Accel::Intersector1,BVH8GridIntersector1Pluecker);
@@ -145,7 +154,10 @@ namespace embree
DEFINE_SYMBOL2(Accel::Intersector4,BVH8InstanceIntersector4Chunk);
DEFINE_SYMBOL2(Accel::Intersector4,BVH8InstanceMBIntersector4Chunk);
DEFINE_SYMBOL2(Accel::Intersector4,BVH8InstanceArrayIntersector4Chunk);
DEFINE_SYMBOL2(Accel::Intersector4,BVH8InstanceArrayMBIntersector4Chunk);
DEFINE_SYMBOL2(Accel::Intersector4,BVH8GridIntersector4HybridMoeller);
DEFINE_SYMBOL2(Accel::Intersector4,BVH8GridIntersector4HybridPluecker);
@@ -180,9 +192,12 @@ namespace embree
DEFINE_SYMBOL2(Accel::Intersector8,BVH8InstanceIntersector8Chunk);
DEFINE_SYMBOL2(Accel::Intersector8,BVH8InstanceMBIntersector8Chunk);
DEFINE_SYMBOL2(Accel::Intersector8,BVH8InstanceArrayIntersector8Chunk);
DEFINE_SYMBOL2(Accel::Intersector8,BVH8InstanceArrayMBIntersector8Chunk);
DEFINE_SYMBOL2(Accel::Intersector8,BVH8GridIntersector8HybridMoeller);
DEFINE_SYMBOL2(Accel::Intersector8,BVH8GridIntersector8HybridPluecker);
DEFINE_SYMBOL2(Accel::Intersector16,BVH8OBBVirtualCurveIntersector16Hybrid);
DEFINE_SYMBOL2(Accel::Intersector16,BVH8OBBVirtualCurveIntersector16HybridMB);
DEFINE_SYMBOL2(Accel::Intersector16,BVH8OBBVirtualCurveIntersectorRobust16Hybrid);
@@ -213,7 +228,10 @@ namespace embree
DEFINE_SYMBOL2(Accel::Intersector16,BVH8InstanceIntersector16Chunk);
DEFINE_SYMBOL2(Accel::Intersector16,BVH8InstanceMBIntersector16Chunk);
DEFINE_SYMBOL2(Accel::Intersector16,BVH8InstanceArrayIntersector16Chunk);
DEFINE_SYMBOL2(Accel::Intersector16,BVH8InstanceArrayMBIntersector16Chunk);
DEFINE_SYMBOL2(Accel::Intersector16,BVH8GridIntersector16HybridMoeller);
DEFINE_SYMBOL2(Accel::Intersector16,BVH8GridIntersector16HybridPluecker);
@@ -240,6 +258,9 @@ namespace embree
DEFINE_ISA_FUNCTION(Builder*,BVH8InstanceSceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);
DEFINE_ISA_FUNCTION(Builder*,BVH8InstanceMBSceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);
DEFINE_ISA_FUNCTION(Builder*,BVH8InstanceArraySceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);
DEFINE_ISA_FUNCTION(Builder*,BVH8InstanceArrayMBSceneBuilderSAH,void* COMMA Scene* COMMA Geometry::GTypeMask);
DEFINE_ISA_FUNCTION(Builder*,BVH8GridSceneBuilderSAH,void* COMMA Scene* COMMA size_t);
DEFINE_ISA_FUNCTION(Builder*,BVH8GridMBSceneBuilderSAH,void* COMMA Scene* COMMA size_t);
@@ -258,5 +279,6 @@ namespace embree
DEFINE_ISA_FUNCTION(Builder*,BVH8BuilderTwoLevelQuadMeshSAH,void* COMMA Scene* COMMA bool);
DEFINE_ISA_FUNCTION(Builder*,BVH8BuilderTwoLevelVirtualSAH,void* COMMA Scene* COMMA bool);
DEFINE_ISA_FUNCTION(Builder*,BVH8BuilderTwoLevelInstanceSAH,void* COMMA Scene* COMMA Geometry::GTypeMask COMMA bool);
DEFINE_ISA_FUNCTION(Builder*,BVH8BuilderTwoLevelInstanceArraySAH,void* COMMA Scene* COMMA Geometry::GTypeMask COMMA bool);
};
}
+53 -1
View File
@@ -17,6 +17,7 @@
#include "../geometry/quadi.h"
#include "../geometry/object.h"
#include "../geometry/instance.h"
#include "../geometry/instance_array.h"
#if defined(__64BIT__)
# define ROTATE_TREE 1 // specifies number of tree rotation rounds to perform
@@ -399,6 +400,50 @@ namespace embree
unsigned int geomID_ = std::numeric_limits<unsigned int>::max();
};
template<int N>
struct CreateMortonLeaf<N,InstanceArrayPrimitive>
{
typedef BVHN<N> BVH;
typedef typename BVH::NodeRef NodeRef;
typedef typename BVH::NodeRecord NodeRecord;
__forceinline CreateMortonLeaf (InstanceArray* mesh, unsigned int geomID, BVHBuilderMorton::BuildPrim* morton)
: mesh(mesh), morton(morton), geomID_(geomID) {}
__noinline NodeRecord operator() (const range<unsigned>& current, const FastAllocator::CachedAllocator& alloc)
{
vfloat4 lower(pos_inf);
vfloat4 upper(neg_inf);
size_t items = current.size();
size_t start = current.begin();
assert(items <= 1);
/* allocate leaf node */
InstanceArrayPrimitive* accel = (InstanceArrayPrimitive*) alloc.malloc1(items*sizeof(InstanceArrayPrimitive),BVH::byteAlignment);
NodeRef ref = BVH::encodeLeaf((char*)accel,items);
const InstanceArray* instance = this->mesh;
BBox3fa bounds = empty;
for (size_t i=0; i<items; i++)
{
const unsigned int primID = morton[start+i].index;
bounds.extend(instance->bounds(primID));
new (&accel[i]) InstanceArrayPrimitive(geomID_, primID);
}
BBox3fx box_o = (BBox3fx&)bounds;
#if ROTATE_TREE
if (N == 4)
box_o.lower.a = current.size();
#endif
return NodeRecord(ref,box_o);
}
private:
InstanceArray* mesh;
BVHBuilderMorton::BuildPrim* morton;
unsigned int geomID_ = std::numeric_limits<unsigned int>::max();
};
template<typename Mesh>
struct CalculateMeshBounds
{
@@ -523,7 +568,14 @@ namespace embree
#if defined(EMBREE_GEOMETRY_INSTANCE)
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); }
#if defined(__AVX__)
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); }
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); }
#endif
#endif
#if defined(EMBREE_GEOMETRY_INSTANCE_ARRAY)
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); }
#if defined(__AVX__)
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); }
#endif
#endif
+26 -4
View File
@@ -15,6 +15,7 @@
#include "../geometry/quadi.h"
#include "../geometry/object.h"
#include "../geometry/instance.h"
#include "../geometry/instance_array.h"
#include "../geometry/subgrid.h"
#include "../common/state.h"
@@ -150,7 +151,7 @@ namespace embree
const size_t leaf_bytes = size_t(1.2*Primitive::blocks(numPrimitives)*sizeof(Primitive));
bvh->alloc.init_estimate(node_bytes+leaf_bytes);
settings.singleThreadThreshold = bvh->alloc.fixSingleThreadThreshold(N,DEFAULT_SINGLE_THREAD_THRESHOLD,numPrimitives,node_bytes+leaf_bytes);
prims.resize(numPrimitives);
prims.resize(numPrimitives);
PrimInfo pinfo = mesh ?
createPrimRefArray(mesh,geomID_,numPrimitives,prims,bvh->scene->progressInterface) :
@@ -518,14 +519,35 @@ namespace embree
#endif
#if defined(EMBREE_GEOMETRY_INSTANCE)
Builder* BVH4InstanceSceneBuilderSAH (void* bvh, Scene* scene, Geometry::GTypeMask gtype) { return new BVHNBuilderSAH<4,InstancePrimitive>((BVH4*)bvh,scene,4,1.0f,1,1,gtype); }
Builder* BVH4InstanceSceneBuilderSAH (void* bvh, Scene* scene, Geometry::GTypeMask gtype) {
return new BVHNBuilderSAH<4,InstancePrimitive>((BVH4*)bvh,scene,4,1.0f,1,1,gtype);
}
Builder* BVH4InstanceMeshBuilderSAH (void* bvh, Instance* mesh, Geometry::GTypeMask gtype, unsigned int geomID, size_t mode) {
return new BVHNBuilderSAH<4,InstancePrimitive>((BVH4*)bvh,mesh,geomID,4,1.0f,1,inf,gtype);
}
#if defined(__AVX__)
Builder* BVH8InstanceSceneBuilderSAH (void* bvh, Scene* scene, Geometry::GTypeMask gtype) { return new BVHNBuilderSAH<8,InstancePrimitive>((BVH8*)bvh,scene,8,1.0f,1,1,gtype); }
Builder* BVH8InstanceSceneBuilderSAH (void* bvh, Scene* scene, Geometry::GTypeMask gtype) {
return new BVHNBuilderSAH<8,InstancePrimitive>((BVH8*)bvh,scene,8,1.0f,1,1,gtype);
}
Builder* BVH8InstanceMeshBuilderSAH (void* bvh, Instance* mesh, Geometry::GTypeMask gtype, unsigned int geomID, size_t mode) {
return new BVHNBuilderSAH<8,InstancePrimitive>((BVH8*)bvh,mesh,geomID,8,1.0f,1,inf,gtype);
return new BVHNBuilderSAH<8,InstancePrimitive>((BVH8*)bvh,mesh,geomID,8,1.0f,1,1,gtype);
}
#endif
#endif
#if defined(EMBREE_GEOMETRY_INSTANCE_ARRAY)
Builder* BVH4InstanceArraySceneBuilderSAH (void* bvh, Scene* scene, Geometry::GTypeMask gtype) {
return new BVHNBuilderSAH<4,InstanceArrayPrimitive>((BVH4*)bvh,scene,4,1.0f,1,1,gtype);
}
Builder* BVH4InstanceArrayMeshBuilderSAH (void* bvh, InstanceArray* mesh, Geometry::GTypeMask gtype, unsigned int geomID, size_t mode) {
return new BVHNBuilderSAH<4,InstanceArrayPrimitive>((BVH4*)bvh,mesh,geomID,4,1.0f,1,1,gtype);
}
#if defined(__AVX__)
Builder* BVH8InstanceArraySceneBuilderSAH (void* bvh, Scene* scene, Geometry::GTypeMask gtype) {
return new BVHNBuilderSAH<8,InstanceArrayPrimitive>((BVH8*)bvh,scene,8,1.0f,1,1,gtype);
}
Builder* BVH8InstanceArrayMeshBuilderSAH (void* bvh, InstanceArray* mesh, Geometry::GTypeMask gtype, unsigned int geomID, size_t mode) {
return new BVHNBuilderSAH<8,InstanceArrayPrimitive>((BVH8*)bvh,mesh,geomID,8,1.0f,1,1,gtype);
}
#endif
#endif

Some files were not shown because too many files have changed in this diff Show More