diff options
author | Xavier Hallade <xavier.hallade@intel.com> | 2022-06-29 13:58:04 +0300 |
---|---|---|
committer | Xavier Hallade <xavier.hallade@intel.com> | 2022-06-29 13:58:04 +0300 |
commit | a02992f1313811c9905e44dc95a0aee31d707f67 (patch) | |
tree | 2d1f59524e2a298bb530ad578a2d2b9e2c4a1432 /intern/cycles/device/CMakeLists.txt | |
parent | 302b04a5a3fc0e767ac784424f78ce2edf5d2844 (diff) |
Cycles: Add support for rendering on Intel GPUs using oneAPI
This patch adds a new Cycles device with similar functionality to the
existing GPU devices. Kernel compilation and runtime interaction happen
via oneAPI DPC++ compiler and SYCL API.
This implementation is primarly focusing on Intel® Arc™ GPUs and other
future Intel GPUs. The first supported drivers are 101.1660 on Windows
and 22.10.22597 on Linux.
The necessary tools for compilation are:
- A SYCL compiler such as oneAPI DPC++ compiler or
https://github.com/intel/llvm
- Intel® oneAPI Level Zero which is used for low level device queries:
https://github.com/oneapi-src/level-zero
- To optionally generate prebuilt graphics binaries: Intel® Graphics
Compiler All are included in Linux precompiled libraries on svn:
https://svn.blender.org/svnroot/bf-blender/trunk/lib The same goes for
Windows precompiled binaries but for the graphics compiler, available
as "Intel® Graphics Offline Compiler for OpenCL™ Code" from
https://www.intel.com/content/www/us/en/developer/articles/tool/oneapi-standalone-components.html,
for which path can be set as OCLOC_INSTALL_DIR.
Being based on the open SYCL standard, this implementation could also be
extended to run on other compatible non-Intel hardware in the future.
Reviewed By: sergey, brecht
Differential Revision: https://developer.blender.org/D15254
Co-authored-by: Nikita Sirgienko <nikita.sirgienko@intel.com>
Co-authored-by: Stefan Werner <stefan.werner@intel.com>
Diffstat (limited to 'intern/cycles/device/CMakeLists.txt')
-rw-r--r-- | intern/cycles/device/CMakeLists.txt | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/intern/cycles/device/CMakeLists.txt b/intern/cycles/device/CMakeLists.txt index 6205775260a..6418801c572 100644 --- a/intern/cycles/device/CMakeLists.txt +++ b/intern/cycles/device/CMakeLists.txt @@ -82,6 +82,15 @@ set(SRC_HIP hip/util.h ) +set(SRC_ONEAPI + oneapi/device_impl.cpp + oneapi/device_impl.h + oneapi/device.cpp + oneapi/device.h + oneapi/queue.cpp + oneapi/queue.h +) + set(SRC_DUMMY dummy/device.cpp dummy/device.h @@ -134,6 +143,7 @@ set(SRC ${SRC_DUMMY} ${SRC_MULTI} ${SRC_OPTIX} + ${SRC_ONEAPI} ${SRC_HEADERS} ) @@ -181,6 +191,9 @@ if(WITH_CYCLES_DEVICE_METAL) ${SRC_METAL} ) endif() +if (WITH_CYCLES_DEVICE_ONEAPI) + add_definitions(-DWITH_ONEAPI) +endif() if(WITH_OPENIMAGEDENOISE) list(APPEND LIB @@ -193,6 +206,11 @@ include_directories(SYSTEM ${INC_SYS}) cycles_add_library(cycles_device "${LIB}" ${SRC}) +if(WITH_CYCLES_DEVICE_ONEAPI) + # Need to have proper rebuilding in case of changes in cycles_kernel_oneapi due external project behaviour + add_dependencies(cycles_device cycles_kernel_oneapi) +endif() + source_group("cpu" FILES ${SRC_CPU}) source_group("cuda" FILES ${SRC_CUDA}) source_group("dummy" FILES ${SRC_DUMMY}) @@ -200,4 +218,5 @@ source_group("hip" FILES ${SRC_HIP}) source_group("multi" FILES ${SRC_MULTI}) source_group("metal" FILES ${SRC_METAL}) source_group("optix" FILES ${SRC_OPTIX}) +source_group("oneapi" FILES ${SRC_ONEAPI}) source_group("common" FILES ${SRC_BASE} ${SRC_HEADERS}) |