[Bf-blender-cvs] [68b9aa87c91] cycles-x: Cycles X: Use RenderBuffer in the denoise task API
Sergey Sharybin
noreply at git.blender.org
Wed Jun 16 11:00:38 CEST 2021
Commit: 68b9aa87c91d9eab37f9be82404aec485e7d76c9
Author: Sergey Sharybin
Date: Tue Jun 15 12:43:19 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB68b9aa87c91d9eab37f9be82404aec485e7d76c9
Cycles X: Use RenderBuffer in the denoise task API
No functional changes, but gives possibility to use PassAccessor to get
pixels of the input noisy pass.
===================================================================
M intern/cycles/device/device_denoise.h
M intern/cycles/device/optix/device_impl.cpp
M intern/cycles/integrator/denoiser_device.cpp
===================================================================
diff --git a/intern/cycles/device/device_denoise.h b/intern/cycles/device/device_denoise.h
index d8b8658204a..25263d14cac 100644
--- a/intern/cycles/device/device_denoise.h
+++ b/intern/cycles/device/device_denoise.h
@@ -86,9 +86,9 @@ class DeviceDenoiseTask {
DenoiseParams params;
int num_samples;
- BufferParams buffer_params;
- device_ptr buffer;
+ RenderBuffers *render_buffers;
+ BufferParams buffer_params;
};
CCL_NAMESPACE_END
diff --git a/intern/cycles/device/optix/device_impl.cpp b/intern/cycles/device/optix/device_impl.cpp
index 46369e18f49..a5fccb92c08 100644
--- a/intern/cycles/device/optix/device_impl.cpp
+++ b/intern/cycles/device/optix/device_impl.cpp
@@ -594,7 +594,7 @@ bool OptiXDevice::denoise_filter_convert_to_rgb(OptiXDeviceQueue *queue,
const int pass_sample_count = task.buffer_params.get_pass_offset(PASS_SAMPLE_COUNT);
void *args[] = {const_cast<device_ptr *>(&d_input_rgb),
- const_cast<device_ptr *>(&task.buffer),
+ &task.render_buffers->buffer.device_pointer,
const_cast<int *>(&task.buffer_params.full_x),
const_cast<int *>(&task.buffer_params.full_y),
const_cast<int *>(&task.buffer_params.width),
@@ -621,7 +621,7 @@ bool OptiXDevice::denoise_filter_convert_from_rgb(OptiXDeviceQueue *queue,
const int pass_sample_count = task.buffer_params.get_pass_offset(PASS_SAMPLE_COUNT);
void *args[] = {const_cast<device_ptr *>(&d_input_rgb),
- const_cast<device_ptr *>(&task.buffer),
+ &task.render_buffers->buffer.device_pointer,
const_cast<int *>(&task.buffer_params.full_x),
const_cast<int *>(&task.buffer_params.full_y),
const_cast<int *>(&task.buffer_params.width),
diff --git a/intern/cycles/integrator/denoiser_device.cpp b/intern/cycles/integrator/denoiser_device.cpp
index 99678bd6aee..30097baf130 100644
--- a/intern/cycles/integrator/denoiser_device.cpp
+++ b/intern/cycles/integrator/denoiser_device.cpp
@@ -164,13 +164,13 @@ void DeviceDenoiser::denoise_buffer_on_device(Device *device,
task.num_samples = num_samples;
task.buffer_params = buffer_params;
- device_vector<float> local_buffer(device, "denoiser local buffer", MEM_READ_WRITE);
+ RenderBuffers local_render_buffers(device);
bool local_buffer_used = false;
if (device == device_) {
/* The device can access an existing buffer pointer. */
local_buffer_used = false;
- task.buffer = render_buffers->buffer.device_pointer;
+ task.render_buffers = render_buffers;
}
else {
/* Create buffer which is available by the device used by denoiser. */
@@ -182,24 +182,26 @@ void DeviceDenoiser::denoise_buffer_on_device(Device *device,
render_buffers->copy_from_device();
- local_buffer.alloc(render_buffers->buffer.size());
- memcpy(local_buffer.data(),
+ /* TODO(sergey): Avoid `zero_to_device()`. */
+ local_render_buffers.reset(buffer_params);
+
+ memcpy(local_render_buffers.buffer.data(),
render_buffers->buffer.data(),
sizeof(float) * render_buffers->buffer.size());
- local_buffer.copy_to_device();
+ local_render_buffers.copy_to_device();
- task.buffer = local_buffer.device_pointer;
+ task.render_buffers = &local_render_buffers;
}
device->denoise_buffer(task);
if (local_buffer_used) {
- /* TODO(sergey): Only copy denoised pass. */
- local_buffer.copy_from_device();
+ /* TODO(sergey): Only copy denoised passes. */
+ local_render_buffers.copy_from_device();
memcpy(render_buffers->buffer.data(),
- local_buffer.data(),
+ local_render_buffers.buffer.data(),
sizeof(float) * render_buffers->buffer.size());
- render_buffers->buffer.copy_to_device();
+ render_buffers->copy_to_device();
}
}
More information about the Bf-blender-cvs
mailing list