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 /build_files/build_environment/patches/dpcpp.diff | |
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 'build_files/build_environment/patches/dpcpp.diff')
-rw-r--r-- | build_files/build_environment/patches/dpcpp.diff | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/build_files/build_environment/patches/dpcpp.diff b/build_files/build_environment/patches/dpcpp.diff new file mode 100644 index 00000000000..9dbe032de0c --- /dev/null +++ b/build_files/build_environment/patches/dpcpp.diff @@ -0,0 +1,54 @@ +diff -Naur external_dpcpp.orig/sycl/source/CMakeLists.txt external_dpcpp/sycl/source/CMakeLists.txt +--- external_dpcpp.orig/sycl/source/CMakeLists.txt 2022-05-20 04:19:45.067771362 +0000 ++++ external_dpcpp/sycl/source/CMakeLists.txt 2022-05-20 04:21:49.708025048 +0000 +@@ -66,10 +66,10 @@ + target_compile_options(${LIB_OBJ_NAME} PUBLIC + -fvisibility=hidden -fvisibility-inlines-hidden) + set(linker_script "${CMAKE_CURRENT_SOURCE_DIR}/ld-version-script.txt") +- set(abi_linker_script "${CMAKE_CURRENT_SOURCE_DIR}/abi_replacements_linux.txt") +- target_link_libraries( +- ${LIB_NAME} PRIVATE "-Wl,${abi_linker_script}") +- set_target_properties(${LIB_NAME} PROPERTIES LINK_DEPENDS ${abi_linker_script}) ++# set(abi_linker_script "${CMAKE_CURRENT_SOURCE_DIR}/abi_replacements_linux.txt") ++# target_link_libraries( ++# ${LIB_NAME} PRIVATE "-Wl,${abi_linker_script}") ++# set_target_properties(${LIB_NAME} PROPERTIES LINK_DEPENDS ${abi_linker_script}) + target_link_libraries( + ${LIB_NAME} PRIVATE "-Wl,--version-script=${linker_script}") + set_target_properties(${LIB_NAME} PROPERTIES LINK_DEPENDS ${linker_script}) +diff -Naur llvm-sycl-nightly-20220501.orig\opencl/CMakeLists.txt llvm-sycl-nightly-20220501\opencl/CMakeLists.txt +--- llvm-sycl-nightly-20220501.orig/opencl/CMakeLists.txt 2022-04-29 13:47:11 -0600 ++++ llvm-sycl-nightly-20220501/opencl/CMakeLists.txt 2022-05-21 15:25:06 -0600 +@@ -11,6 +11,11 @@ + ) + endif() + ++# Blender code below is determined to use FetchContent_Declare ++# temporarily allow it (but feed it our downloaded tarball ++# in the OpenCL_HEADERS variable ++set(FETCHCONTENT_FULLY_DISCONNECTED OFF) ++ + # Repo URLs + + set(OCL_HEADERS_REPO +@@ -77,5 +82,6 @@ + + FetchContent_MakeAvailable(ocl-icd) + add_library(OpenCL-ICD ALIAS OpenCL) ++set(FETCHCONTENT_FULLY_DISCONNECTED ON) + + add_subdirectory(opencl-aot) +diff -Naur llvm-sycl-nightly-20220208.orig/libdevice/cmake/modules/SYCLLibdevice.cmake llvm-sycl-nightly-20220208/libdevice/cmake/modules/SYCLLibdevice.cmake +--- llvm-sycl-nightly-20220208.orig/libdevice/cmake/modules/SYCLLibdevice.cmake 2022-02-08 09:17:24 -0700 ++++ llvm-sycl-nightly-20220208/libdevice/cmake/modules/SYCLLibdevice.cmake 2022-05-24 11:35:51 -0600 +@@ -36,7 +36,9 @@ + add_custom_target(libsycldevice-obj) + add_custom_target(libsycldevice-spv) + +-add_custom_target(libsycldevice DEPENDS ++# Blender: add ALL here otherwise this target will not build ++# and cause an error due to missing files during the install phase. ++add_custom_target(libsycldevice ALL DEPENDS + libsycldevice-obj + libsycldevice-spv) + |