| 4 | #include "cuda_external_buffer.h" |
| 5 | |
| 6 | OIDN_NAMESPACE_BEGIN |
| 7 | |
| 8 | CUDAExternalBuffer::CUDAExternalBuffer(Engine* engine, |
| 9 | ExternalMemoryTypeFlags fdType, |
| 10 | int fd, size_t byteSize) |
| 11 | : USMBuffer(engine) |
| 12 | { |
| 13 | cudaExternalMemoryHandleDesc handleDesc{}; |
| 14 | handleDesc.type = cudaExternalMemoryHandleTypeOpaqueFd; |
| 15 | handleDesc.handle.fd = fd; |
| 16 | handleDesc.size = byteSize; |
| 17 | |
| 18 | if (fdType & ExternalMemoryTypeFlag::Dedicated) |
| 19 | { |
| 20 | handleDesc.flags = cudaExternalMemoryDedicated; |
| 21 | fdType ^= ExternalMemoryTypeFlag::Dedicated; |
| 22 | } |
| 23 | |
| 24 | if (fdType != ExternalMemoryTypeFlag::OpaqueFD) |
| 25 | throw Exception(Error::InvalidArgument, "external memory type not supported by the device"); |
| 26 | |
| 27 | init(handleDesc); |
| 28 | } |
| 29 | |
| 30 | CUDAExternalBuffer::CUDAExternalBuffer(Engine* engine, |
| 31 | ExternalMemoryTypeFlags handleType, |