oidn-wgpu-interop

Crates.iooidn-wgpu-interop
lib.rsoidn-wgpu-interop
version0.4.0
created_at2025-03-06 18:32:18.061106+00
updated_at2025-12-18 07:17:24.398235+00
descriptionAn inteoperability layer between wgpu and oidn
homepage
repositoryhttps://github.com/Vecvec/oidn-wgpu-interop
max_upload_size
id1581641
size78,247
(Vecvec)

documentation

README

OIDN wgpu interoperability

Crates.io CI

A helper library to create shared buffers between OIDN and wgpu.

Getting started

Creating the device

Simply replace the adapter.request_device call with oidn_wgpu_interop::Device::new (using adapter.request_device only if oidn_wgpu_interop::Device::new fails). You are then able to call device.wgpu_device to get the created wgpu device and device.oidn_device to get the OIDN device.

Creating shared buffers

To create a shared buffer call device.allocate_shared_buffers. The shared buffer may be used with usages BufferUsages::COPY_SRC | BufferUsages::COPY_DST. To get the wgpu buffer call buffer.wgpu_buffer and to get the OIDN buffer call buffer.oidn_buffer. It is recommended to minimise the number of shared buffers that exist at a given time due to them each requiring a separate allocation.

Synchronisation

There is no synchronisation between OIDN and wgpu currently possible. This lack of synchronisation means that after using any SharedBuffer in wgpu, but before using it with OIDN, all wgpu command buffers that use the shared buffer must finish. The same must happen in the opposite direction, any OIDN functions that use this buffer must have finished.

Platform Support

Currently the following platforms are supported (individual GPUs may or may not be supported):

  • DirectX (tested personally)
  • Vulkan on Windows (tested personally)
  • Vulkan on Linux (best effort, will compile)

Platform support could also be expanded to Metal, but I don't want to do too much.

Commit count: 52

cargo fmt