diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake index 10be375ee0f..3a75fda35a4 100644 --- a/build_files/cmake/platform/platform_unix.cmake +++ b/build_files/cmake/platform/platform_unix.cmake @@ -326,9 +326,10 @@ if(WITH_CYCLES AND WITH_CYCLES_DEVICE_ONEAPI) file(GLOB _sycl_runtime_libraries ${SYCL_ROOT_DIR}/lib/libsycl.so ${SYCL_ROOT_DIR}/lib/libsycl.so.* - ${SYCL_ROOT_DIR}/lib/libpi_level_zero.so + ${SYCL_ROOT_DIR}/lib/libpi_*.so ) list(FILTER _sycl_runtime_libraries EXCLUDE REGEX ".*\.py") + list(REMOVE_ITEM _sycl_runtime_libraries "${SYCL_ROOT_DIR}/lib/libpi_opencl.so") list(APPEND PLATFORM_BUNDLED_LIBRARIES ${_sycl_runtime_libraries}) unset(_sycl_runtime_libraries) endif() diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake index 2ec11d708a6..9bad8045946 100644 --- a/build_files/cmake/platform/platform_win32.cmake +++ b/build_files/cmake/platform/platform_win32.cmake @@ -972,7 +972,13 @@ if(WITH_CYCLES AND WITH_CYCLES_DEVICE_ONEAPI) endforeach() unset(_sycl_runtime_libraries_glob) - list(APPEND _sycl_runtime_libraries ${SYCL_ROOT_DIR}/bin/pi_level_zero.dll) + file(GLOB _sycl_pi_runtime_libraries_glob + ${SYCL_ROOT_DIR}/bin/pi_*.dll + ) + list(REMOVE_ITEM _sycl_pi_runtime_libraries_glob "${SYCL_ROOT_DIR}/bin/pi_opencl.dll") + list (APPEND _sycl_runtime_libraries ${_sycl_pi_runtime_libraries_glob}) + unset(_sycl_pi_runtime_libraries_glob) + list(APPEND PLATFORM_BUNDLED_LIBRARIES ${_sycl_runtime_libraries}) unset(_sycl_runtime_libraries) endif() diff --git a/intern/cycles/device/oneapi/device.cpp b/intern/cycles/device/oneapi/device.cpp index 66d6f749e30..abd2a63f0ad 100644 --- a/intern/cycles/device/oneapi/device.cpp +++ b/intern/cycles/device/oneapi/device.cpp @@ -31,6 +31,8 @@ bool device_oneapi_init() * improves stability as of intel/LLVM SYCL-nightly/20220529. * All these env variable can be set beforehand by end-users and * will in that case -not- be overwritten. */ + /* By default, enable only Level-Zero and if all devices are allowed, also CUDA and HIP. + * OpenCL backend isn't currently well supported. */ # ifdef _WIN32 if (getenv("SYCL_CACHE_PERSISTENT") == nullptr) { _putenv_s("SYCL_CACHE_PERSISTENT", "1"); @@ -39,7 +41,12 @@ bool device_oneapi_init() _putenv_s("SYCL_CACHE_THRESHOLD", "0"); } if (getenv("SYCL_DEVICE_FILTER") == nullptr) { - _putenv_s("SYCL_DEVICE_FILTER", "level_zero"); + if (getenv("CYCLES_ONEAPI_ALL_DEVICES") == nullptr) { + _putenv_s("SYCL_DEVICE_FILTER", "level_zero"); + } + else { + _putenv_s("SYCL_DEVICE_FILTER", "level_zero,cuda,hip"); + } } if (getenv("SYCL_ENABLE_PCI") == nullptr) { _putenv_s("SYCL_ENABLE_PCI", "1"); @@ -50,7 +57,12 @@ bool device_oneapi_init() # elif __linux__ setenv("SYCL_CACHE_PERSISTENT", "1", false); setenv("SYCL_CACHE_THRESHOLD", "0", false); - setenv("SYCL_DEVICE_FILTER", "level_zero", false); + if (getenv("CYCLES_ONEAPI_ALL_DEVICES") == nullptr) { + setenv("SYCL_DEVICE_FILTER", "level_zero", false); + } + else { + setenv("SYCL_DEVICE_FILTER", "level_zero,cuda,hip", false); + } setenv("SYCL_ENABLE_PCI", "1", false); setenv("SYCL_PI_LEVEL_ZERO_USE_COPY_ENGINE_FOR_IN_ORDER_QUEUE", "0", false); # endif