11#ifdef WITH_OPENIMAGEDENOISE
50 Device *best_device =
nullptr;
58 best_device = sub_device;
63 best_device = sub_device;
70 best_device = sub_device;
85 OptiXDenoiser::is_device_supported(denoiser_device->
info));
87 (void)denoiser_device;
95#ifdef WITH_OPENIMAGEDENOISE
97 OIDNDenoiserGPU::is_device_supported(denoiser_device->
info));
99 (void)denoiser_device;
106 Device *cpu_fallback_device,
109 Device *&single_denoiser_device)
115 single_denoiser_device =
nullptr;
118 single_denoiser_device = denoiser_device;
127 if (single_denoiser_device ==
nullptr) {
128 single_denoiser_device = cpu_fallback_device;
132 if (is_cpu_denoiser_device ==
false) {
137 return effective_denoise_params;
143 effective_denoise_params.
use_gpu =
false;
145 return effective_denoise_params;
149 Device *cpu_fallback_device,
154 Device *single_denoiser_device;
156 denoiser_device, cpu_fallback_device,
params, interop_device, single_denoiser_device);
159 if (is_cpu_denoiser_device ==
false) {
162 return make_unique<OptiXDenoiser>(single_denoiser_device, effective_denoiser_params);
166#ifdef WITH_OPENIMAGEDENOISE
169 return make_unique<OIDNDenoiserGPU>(single_denoiser_device, effective_denoiser_params);
179 return make_unique<OIDNDenoiser>(is_cpu_denoiser_device ? single_denoiser_device :
181 effective_denoiser_params);
186#ifdef WITH_OPENIMAGEDENOISE
188 OIDNDenoiserGPU::is_device_supported(denoise_device_info))
193 (void)denoise_device_info;
197 if (OptiXDenoiser::is_device_supported(denoise_device_info)) {
202#ifdef WITH_OPENIMAGEDENOISE
226 LOG_ERROR <<
"Attempt to change denoiser type.";
243 progress->
set_status(
"Loading denoising kernels (may take a few minutes the first time)");
247 set_error(
"No device available to denoise on");
254 if (message.empty()) {
255 message =
"Failed loading denoising kernel, see console for errors";
static unique_ptr< Denoiser > create(Device *denoiser_device, Device *cpu_fallback_device, const DenoiseParams ¶ms, const GraphicsInteropDevice &interop_device)
void set_error(const string &error)
void set_params(const DenoiseParams ¶ms)
static DenoiserType automatic_viewport_denoiser_type(const DeviceInfo &denoise_device_info)
Denoiser(Device *denoiser_device, const DenoiseParams ¶ms)
virtual bool load_kernels(Progress *progress)
bool denoise_kernels_are_loaded_
Device * get_denoiser_device() const
Device * denoiser_device_
const DenoiseParams & get_params() const
vector< DeviceInfo > multi_devices
DenoiserTypeMask denoisers
virtual bool should_use_graphics_interop(const GraphicsInteropDevice &, const bool=false)
virtual void foreach_device(const std::function< void(Device *)> &callback)
void set_status(const string &status_, const string &substatus_="")
@ DENOISER_OPENIMAGEDENOISE
bool use_gpu_oidn_denoiser(Device *denoiser_device, const DenoiseParams ¶ms)
static Device * find_best_device(Device *device, const DenoiserType type, const GraphicsInteropDevice &interop_device)
bool use_optix_denoiser(Device *denoiser_device, const DenoiseParams ¶ms)
static CCL_NAMESPACE_BEGIN bool is_single_device(const Device *device)
DenoiseParams get_effective_denoise_params(Device *denoiser_device, Device *cpu_fallback_device, const DenoiseParams ¶ms, const GraphicsInteropDevice &interop_device, Device *&single_denoiser_device)
bool use_gpu_oidn_denoiser(Device *denoiser_device, const DenoiseParams ¶ms)
bool use_optix_denoiser(Device *denoiser_device, const DenoiseParams ¶ms)
DenoiseParams get_effective_denoise_params(Device *denoiser_device, Device *cpu_fallback_device, const DenoiseParams ¶ms, const GraphicsInteropDevice &interop_device, Device *&single_denoiser_device)
#define KERNEL_FEATURE_DENOISING
#define CCL_NAMESPACE_END
#define DCHECK(expression)
static CCL_NAMESPACE_BEGIN bool openimagedenoise_supported()