diff --git a/intern/cycles/device/oneapi/device_impl.cpp b/intern/cycles/device/oneapi/device_impl.cpp index 624206178d2..ae54c8d71ea 100644 --- a/intern/cycles/device/oneapi/device_impl.cpp +++ b/intern/cycles/device/oneapi/device_impl.cpp @@ -4,6 +4,10 @@ #ifdef WITH_ONEAPI +/* is needed until included upstream in sycl/detail/property_list_base.hpp */ +# include +# include + # include "device/oneapi/device_impl.h" # include "util/debug.h" @@ -25,6 +29,9 @@ extern "C" bool rtcIsSYCLDeviceSupported(const sycl::device sycl_device); CCL_NAMESPACE_BEGIN +static std::vector available_sycl_devices(); +static int parse_driver_build_version(const sycl::device &device); + static void queue_error_cb(const char *message, void *user_ptr) { if (user_ptr) { @@ -574,7 +581,7 @@ bool OneapiDevice::create_queue(SyclQueue *&external_queue, { bool finished_correct = true; try { - std::vector devices = OneapiDevice::available_devices(); + std::vector devices = available_sycl_devices(); if (device_index < 0 || device_index >= devices.size()) { return false; } @@ -862,7 +869,7 @@ static const int lowest_supported_driver_version_neo = 26957; static const int lowest_supported_driver_version_neo = 26918; # endif -int OneapiDevice::parse_driver_build_version(const sycl::device &device) +int parse_driver_build_version(const sycl::device &device) { const std::string &driver_version = device.get_info(); int driver_build_version = 0; @@ -901,7 +908,7 @@ int OneapiDevice::parse_driver_build_version(const sycl::device &device) return driver_build_version; } -std::vector OneapiDevice::available_devices() +std::vector available_sycl_devices() { bool allow_all_devices = false; if (getenv("CYCLES_ONEAPI_ALL_DEVICES") != nullptr) { @@ -971,7 +978,7 @@ char *OneapiDevice::device_capabilities() { std::stringstream capabilities; - const std::vector &oneapi_devices = available_devices(); + const std::vector &oneapi_devices = available_sycl_devices(); for (const sycl::device &device : oneapi_devices) { # ifndef WITH_ONEAPI_SYCL_HOST_TASK const std::string &name = device.get_info(); @@ -1080,7 +1087,7 @@ char *OneapiDevice::device_capabilities() void OneapiDevice::iterate_devices(OneAPIDeviceIteratorCallback cb, void *user_ptr) { int num = 0; - std::vector devices = OneapiDevice::available_devices(); + std::vector devices = available_sycl_devices(); for (sycl::device &device : devices) { const std::string &platform_name = device.get_platform().get_info(); diff --git a/intern/cycles/device/oneapi/device_impl.h b/intern/cycles/device/oneapi/device_impl.h index c870f6d0b53..5c7d6485d0c 100644 --- a/intern/cycles/device/oneapi/device_impl.h +++ b/intern/cycles/device/oneapi/device_impl.h @@ -3,11 +3,6 @@ * SPDX-License-Identifier: Apache-2.0 */ #ifdef WITH_ONEAPI - -/* is needed until included upstream in sycl/detail/property_list_base.hpp */ -# include -# include - # include "device/device.h" # include "device/oneapi/device.h" # include "device/oneapi/queue.h" @@ -106,9 +101,7 @@ class OneapiDevice : public Device { void *usm_aligned_alloc_host(size_t memory_size, size_t alignment); void usm_free(void *usm_ptr); - static std::vector available_devices(); static char *device_capabilities(); - static int parse_driver_build_version(const sycl::device &device); static void iterate_devices(OneAPIDeviceIteratorCallback cb, void *user_ptr); size_t get_memcapacity(); diff --git a/intern/cycles/integrator/denoiser_oidn_gpu.cpp b/intern/cycles/integrator/denoiser_oidn_gpu.cpp index df1464fdf0c..f1025c178c6 100644 --- a/intern/cycles/integrator/denoiser_oidn_gpu.cpp +++ b/intern/cycles/integrator/denoiser_oidn_gpu.cpp @@ -9,6 +9,7 @@ # include # include "device/device.h" +# include "device/oneapi/device_impl.h" # include "device/queue.h" # include "integrator/pass_accessor_cpu.h" # include "session/buffers.h" @@ -114,9 +115,11 @@ bool OIDNDenoiserGPU::denoise_create_if_needed(DenoiseContext &context) } switch (denoiser_device_->info.type) { -# if defined(OIDN_DEVICE_SYCL) +# if defined(OIDN_DEVICE_SYCL) && defined(WITH_ONEAPI) case DEVICE_ONEAPI: - oidn_device_ = oidnNewDevice(OIDN_DEVICE_TYPE_SYCL); + oidn_device_ = oidnNewSYCLDevice( + (const sycl::queue *)reinterpret_cast(denoiser_device_)->sycl_queue(), + 1); denoiser_queue_->init_execution(); break; # endif