Page MenuHome

Fix missing tiles with GPU render and OIDN denoiser in Cycles X
ClosedPublic

Authored by Sergey Sharybin (sergey) on Aug 27 2021, 11:51 AM.

Details

Summary

Was noticed when testing upcoming tiled rendering with small tiles
sizes which stresses data transfers more than single tile rendering.

What happens is OIDN denoiser uses copy_to_device() using default
queue, which is not guaranteed to be synchronized before next call to
copy_from_device() happening via queue.

What we really want in the OIDN denoiser is synchronous data transfer
which is easiest to be achieved by creating a queue and synchronizing
it.

The issue is reported by Alaska in D12309#320253

Diff Detail

Repository
rB Blender
Branch
cycles-x_oidn_sync (branched from master)
Build Status
Buildable 16654
Build 16654: arc lint + arc unit

Event Timeline

Sergey Sharybin (sergey) requested review of this revision.Aug 27 2021, 11:51 AM
Sergey Sharybin (sergey) created this revision.

Just noticed that local_buffer handling in DeviceDenoiser::denoise_buffer` might need something similar.
But think is better to investigate that on its own, since the logic is a bit different there, so need a separate careful look.

Looks good to me.

This revision is now accepted and ready to land.Aug 27 2021, 3:10 PM