#pragma once
#include <stddef.h>
#include <stdbool.h>
#include <stdint.h>
#include "config.h"
#if defined(__cplusplus)
#if defined(SYCL_LANGUAGE_VERSION)
#include <CL/sycl.hpp>
#else
namespace sycl
{
class queue;
class event;
}
#endif
#endif
typedef struct CUstream_st* cudaStream_t;
typedef struct ihipStream_t* hipStream_t;
OIDN_API_NAMESPACE_BEGIN
#define OIDN_UUID_SIZE 16u
#define OIDN_LUID_SIZE 8u
OIDN_API int oidnGetNumPhysicalDevices();
OIDN_API bool oidnGetPhysicalDeviceBool(int physicalDeviceID, const char* name);
OIDN_API int oidnGetPhysicalDeviceInt(int physicalDeviceID, const char* name);
inline unsigned int oidnGetPhysicalDeviceUInt(int physicalDeviceID, const char* name)
{
return (unsigned int)oidnGetPhysicalDeviceInt(physicalDeviceID, name);
}
OIDN_API const char* oidnGetPhysicalDeviceString(int physicalDeviceID, const char* name);
OIDN_API const void* oidnGetPhysicalDeviceData(int physicalDeviceID, const char* name,
size_t* byteSize);
typedef enum
{
OIDN_DEVICE_TYPE_DEFAULT = 0,
OIDN_DEVICE_TYPE_CPU = 1, OIDN_DEVICE_TYPE_SYCL = 2, OIDN_DEVICE_TYPE_CUDA = 3, OIDN_DEVICE_TYPE_HIP = 4, } OIDNDeviceType;
typedef enum
{
OIDN_ERROR_NONE = 0, OIDN_ERROR_UNKNOWN = 1, OIDN_ERROR_INVALID_ARGUMENT = 2, OIDN_ERROR_INVALID_OPERATION = 3, OIDN_ERROR_OUT_OF_MEMORY = 4, OIDN_ERROR_UNSUPPORTED_HARDWARE = 5, OIDN_ERROR_CANCELLED = 6, } OIDNError;
typedef void (*OIDNErrorFunction)(void* userPtr, OIDNError code, const char* message);
typedef struct OIDNDeviceImpl* OIDNDevice;
OIDN_API OIDNDevice oidnNewDevice(OIDNDeviceType type);
OIDN_API OIDNDevice oidnNewDeviceByID(int physicalDeviceID);
OIDN_API OIDNDevice oidnNewDeviceByUUID(const void* uuid);
OIDN_API OIDNDevice oidnNewDeviceByLUID(const void* luid);
OIDN_API OIDNDevice oidnNewDeviceByPCIAddress(int pciDomain, int pciBus, int pciDevice,
int pciFunction);
#if defined(__cplusplus)
OIDN_API OIDNDevice oidnNewSYCLDevice(const sycl::queue* queues, int numQueues);
#endif
OIDN_API OIDNDevice oidnNewCUDADevice(const int* deviceIDs, const cudaStream_t* streams,
int numPairs);
OIDN_API OIDNDevice oidnNewHIPDevice(const int* deviceIDs, const hipStream_t* streams,
int numPairs);
OIDN_API void oidnRetainDevice(OIDNDevice device);
OIDN_API void oidnReleaseDevice(OIDNDevice device);
OIDN_API void oidnSetDeviceBool(OIDNDevice device, const char* name, bool value);
OIDN_DEPRECATED("oidnSetDevice1b is deprecated. Use oidnSetDeviceBool instead.")
inline void oidnSetDevice1b(OIDNDevice device, const char* name, bool value)
{
oidnSetDeviceBool(device, name, value);
}
OIDN_API void oidnSetDeviceInt(OIDNDevice device, const char* name, int value);
OIDN_DEPRECATED("oidnSetDevice1i is deprecated. Use oidnSetDeviceInt instead.")
inline void oidnSetDevice1i(OIDNDevice device, const char* name, int value)
{
oidnSetDeviceInt(device, name, value);
}
inline void oidnSetDeviceUInt(OIDNDevice device, const char* name, unsigned int value)
{
oidnSetDeviceInt(device, name, (int)value);
}
OIDN_API bool oidnGetDeviceBool(OIDNDevice device, const char* name);
OIDN_DEPRECATED("oidnGetDevice1b is deprecated. Use oidnGetDeviceBool instead.")
inline bool oidnGetDevice1b(OIDNDevice device, const char* name)
{
return oidnGetDeviceBool(device, name);
}
OIDN_API int oidnGetDeviceInt(OIDNDevice device, const char* name);
inline unsigned int oidnGetDeviceUInt(OIDNDevice device, const char* name)
{
return (unsigned int)oidnGetDeviceInt(device, name);
}
OIDN_DEPRECATED("oidnGetDevice1i is deprecated. Use oidnGetDeviceInt instead.")
inline int oidnGetDevice1i(OIDNDevice device, const char* name)
{
return oidnGetDeviceInt(device, name);
}
OIDN_API void oidnSetDeviceErrorFunction(OIDNDevice device, OIDNErrorFunction func, void* userPtr);
OIDN_API OIDNError oidnGetDeviceError(OIDNDevice device, const char** outMessage);
OIDN_API void oidnCommitDevice(OIDNDevice device);
OIDN_API void oidnSyncDevice(OIDNDevice device);
typedef enum
{
OIDN_FORMAT_UNDEFINED = 0,
OIDN_FORMAT_FLOAT = 1,
OIDN_FORMAT_FLOAT2,
OIDN_FORMAT_FLOAT3,
OIDN_FORMAT_FLOAT4,
OIDN_FORMAT_HALF = 257,
OIDN_FORMAT_HALF2,
OIDN_FORMAT_HALF3,
OIDN_FORMAT_HALF4,
} OIDNFormat;
typedef enum
{
OIDN_STORAGE_UNDEFINED = 0,
OIDN_STORAGE_HOST = 1,
OIDN_STORAGE_DEVICE = 2,
OIDN_STORAGE_MANAGED = 3,
} OIDNStorage;
typedef enum
{
OIDN_EXTERNAL_MEMORY_TYPE_FLAG_NONE = 0,
OIDN_EXTERNAL_MEMORY_TYPE_FLAG_OPAQUE_FD = 1 << 0,
OIDN_EXTERNAL_MEMORY_TYPE_FLAG_DMA_BUF = 1 << 1,
OIDN_EXTERNAL_MEMORY_TYPE_FLAG_OPAQUE_WIN32 = 1 << 2,
OIDN_EXTERNAL_MEMORY_TYPE_FLAG_OPAQUE_WIN32_KMT = 1 << 3,
OIDN_EXTERNAL_MEMORY_TYPE_FLAG_D3D11_TEXTURE = 1 << 4,
OIDN_EXTERNAL_MEMORY_TYPE_FLAG_D3D11_TEXTURE_KMT = 1 << 5,
OIDN_EXTERNAL_MEMORY_TYPE_FLAG_D3D11_RESOURCE = 1 << 6,
OIDN_EXTERNAL_MEMORY_TYPE_FLAG_D3D11_RESOURCE_KMT = 1 << 7,
OIDN_EXTERNAL_MEMORY_TYPE_FLAG_D3D12_HEAP = 1 << 8,
OIDN_EXTERNAL_MEMORY_TYPE_FLAG_D3D12_RESOURCE = 1 << 9,
} OIDNExternalMemoryTypeFlag;
typedef struct OIDNBufferImpl* OIDNBuffer;
OIDN_API OIDNBuffer oidnNewBuffer(OIDNDevice device, size_t byteSize);
OIDN_API OIDNBuffer oidnNewBufferWithStorage(OIDNDevice device, size_t byteSize, OIDNStorage storage);
OIDN_API OIDNBuffer oidnNewSharedBuffer(OIDNDevice device, void* devPtr, size_t byteSize);
OIDN_API OIDNBuffer oidnNewSharedBufferFromFD(OIDNDevice device,
OIDNExternalMemoryTypeFlag fdType,
int fd, size_t byteSize);
OIDN_API OIDNBuffer oidnNewSharedBufferFromWin32Handle(OIDNDevice device,
OIDNExternalMemoryTypeFlag handleType,
void* handle, const void* name, size_t byteSize);
OIDN_API size_t oidnGetBufferSize(OIDNBuffer buffer);
OIDN_API OIDNStorage oidnGetBufferStorage(OIDNBuffer buffer);
OIDN_API void* oidnGetBufferData(OIDNBuffer buffer);
OIDN_API void oidnReadBuffer(OIDNBuffer buffer, size_t byteOffset, size_t byteSize, void* dstHostPtr);
OIDN_API void oidnReadBufferAsync(OIDNBuffer buffer,
size_t byteOffset, size_t byteSize, void* dstHostPtr);
OIDN_API void oidnWriteBuffer(OIDNBuffer buffer,
size_t byteOffset, size_t byteSize, const void* srcHostPtr);
OIDN_API void oidnWriteBufferAsync(OIDNBuffer buffer,
size_t byteOffset, size_t byteSize, const void* srcHostPtr);
OIDN_API void oidnRetainBuffer(OIDNBuffer buffer);
OIDN_API void oidnReleaseBuffer(OIDNBuffer buffer);
typedef enum
{
OIDN_QUALITY_DEFAULT = 0,
OIDN_QUALITY_BALANCED = 5, OIDN_QUALITY_HIGH = 6, } OIDNQuality;
typedef bool (*OIDNProgressMonitorFunction)(void* userPtr, double n);
typedef struct OIDNFilterImpl* OIDNFilter;
OIDN_API OIDNFilter oidnNewFilter(OIDNDevice device, const char* type);
OIDN_API void oidnRetainFilter(OIDNFilter filter);
OIDN_API void oidnReleaseFilter(OIDNFilter filter);
OIDN_API void oidnSetFilterImage(OIDNFilter filter, const char* name,
OIDNBuffer buffer, OIDNFormat format,
size_t width, size_t height,
size_t byteOffset,
size_t pixelByteStride, size_t rowByteStride);
OIDN_API void oidnSetSharedFilterImage(OIDNFilter filter, const char* name,
void* devPtr, OIDNFormat format,
size_t width, size_t height,
size_t byteOffset,
size_t pixelByteStride, size_t rowByteStride);
OIDN_API void oidnUnsetFilterImage(OIDNFilter filter, const char* name);
OIDN_DEPRECATED("oidnRemoveFilterImage is deprecated. Use oidnUnsetFilterImage instead.")
inline void oidnRemoveFilterImage(OIDNFilter filter, const char* name)
{
oidnUnsetFilterImage(filter, name);
}
OIDN_API void oidnSetSharedFilterData(OIDNFilter filter, const char* name,
void* hostPtr, size_t byteSize);
OIDN_API void oidnUpdateFilterData(OIDNFilter filter, const char* name);
OIDN_API void oidnUnsetFilterData(OIDNFilter filter, const char* name);
OIDN_DEPRECATED("oidnRemoveFilterData is deprecated. Use oidnUnsetFilterData instead.")
inline void oidnRemoveFilterData(OIDNFilter filter, const char* name)
{
oidnUnsetFilterData(filter, name);
}
OIDN_API void oidnSetFilterBool(OIDNFilter filter, const char* name, bool value);
OIDN_DEPRECATED("oidnSetFilter1b is deprecated. Use oidnSetFilterBool instead.")
inline void oidnSetFilter1b(OIDNFilter filter, const char* name, bool value)
{
oidnSetFilterBool(filter, name, value);
}
OIDN_API bool oidnGetFilterBool(OIDNFilter filter, const char* name);
OIDN_DEPRECATED("oidnGetFilter1b is deprecated. Use oidnGetFilterBool instead.")
inline bool oidnGetFilter1b(OIDNFilter filter, const char* name)
{
return oidnGetFilterBool(filter, name);
}
OIDN_API void oidnSetFilterInt(OIDNFilter filter, const char* name, int value);
OIDN_DEPRECATED("oidnSetFilter1i is deprecated. Use oidnSetFilterInt instead.")
inline void oidnSetFilter1i(OIDNFilter filter, const char* name, int value)
{
oidnSetFilterInt(filter, name, value);
}
OIDN_API int oidnGetFilterInt(OIDNFilter filter, const char* name);
OIDN_DEPRECATED("oidnGetFilter1i is deprecated. Use oidnGetFilterInt instead.")
inline int oidnGetFilter1i(OIDNFilter filter, const char* name)
{
return oidnGetFilterInt(filter, name);
}
OIDN_API void oidnSetFilterFloat(OIDNFilter filter, const char* name, float value);
OIDN_DEPRECATED("oidnSetFilter1f is deprecated. Use oidnSetFilterFloat instead.")
inline void oidnSetFilter1f(OIDNFilter filter, const char* name, float value)
{
oidnSetFilterFloat(filter, name, value);
}
OIDN_API float oidnGetFilterFloat(OIDNFilter filter, const char* name);
OIDN_DEPRECATED("oidnGetFilter1f is deprecated. Use oidnGetFilterFloat instead.")
inline float oidnGetFilter1f(OIDNFilter filter, const char* name)
{
return oidnGetFilterFloat(filter, name);
}
OIDN_API void oidnSetFilterProgressMonitorFunction(OIDNFilter filter,
OIDNProgressMonitorFunction func, void* userPtr);
OIDN_API void oidnCommitFilter(OIDNFilter filter);
OIDN_API void oidnExecuteFilter(OIDNFilter filter);
OIDN_API void oidnExecuteFilterAsync(OIDNFilter filter);
#if defined(__cplusplus)
OIDN_API void oidnExecuteSYCLFilterAsync(OIDNFilter filter,
const sycl::event* depEvents, int numDepEvents,
sycl::event* doneEvent);
#endif
OIDN_API_NAMESPACE_END