1// Copyright 2009-2021 Intel Corporation
2// SPDX-License-Identifier: Apache-2.0
3
4#pragma once
5
6#include "rtcore_common.h"
7
8RTC_NAMESPACE_BEGIN
9
10/* Opaque device type */
11typedef struct RTCDeviceTy* RTCDevice;
12
13/* Creates a new Embree device. */
14RTC_API RTCDevice rtcNewDevice(const char* config);
15
16/* Retains the Embree device (increments the reference count). */
17RTC_API void rtcRetainDevice(RTCDevice device);
18
19/* Releases an Embree device (decrements the reference count). */
20RTC_API void rtcReleaseDevice(RTCDevice device);
21
22/* Device properties */
23enum RTCDeviceProperty
24{
25 RTC_DEVICE_PROPERTY_VERSION = 0,
26 RTC_DEVICE_PROPERTY_VERSION_MAJOR = 1,
27 RTC_DEVICE_PROPERTY_VERSION_MINOR = 2,
28 RTC_DEVICE_PROPERTY_VERSION_PATCH = 3,
29
30 RTC_DEVICE_PROPERTY_NATIVE_RAY4_SUPPORTED = 32,
31 RTC_DEVICE_PROPERTY_NATIVE_RAY8_SUPPORTED = 33,
32 RTC_DEVICE_PROPERTY_NATIVE_RAY16_SUPPORTED = 34,
33 RTC_DEVICE_PROPERTY_RAY_STREAM_SUPPORTED = 35,
34
35 RTC_DEVICE_PROPERTY_BACKFACE_CULLING_CURVES_ENABLED = 63,
36 RTC_DEVICE_PROPERTY_RAY_MASK_SUPPORTED = 64,
37 RTC_DEVICE_PROPERTY_BACKFACE_CULLING_ENABLED = 65,
38 RTC_DEVICE_PROPERTY_FILTER_FUNCTION_SUPPORTED = 66,
39 RTC_DEVICE_PROPERTY_IGNORE_INVALID_RAYS_ENABLED = 67,
40 RTC_DEVICE_PROPERTY_COMPACT_POLYS_ENABLED = 68,
41
42 RTC_DEVICE_PROPERTY_TRIANGLE_GEOMETRY_SUPPORTED = 96,
43 RTC_DEVICE_PROPERTY_QUAD_GEOMETRY_SUPPORTED = 97,
44 RTC_DEVICE_PROPERTY_SUBDIVISION_GEOMETRY_SUPPORTED = 98,
45 RTC_DEVICE_PROPERTY_CURVE_GEOMETRY_SUPPORTED = 99,
46 RTC_DEVICE_PROPERTY_USER_GEOMETRY_SUPPORTED = 100,
47 RTC_DEVICE_PROPERTY_POINT_GEOMETRY_SUPPORTED = 101,
48
49 RTC_DEVICE_PROPERTY_TASKING_SYSTEM = 128,
50 RTC_DEVICE_PROPERTY_JOIN_COMMIT_SUPPORTED = 129,
51 RTC_DEVICE_PROPERTY_PARALLEL_COMMIT_SUPPORTED = 130
52};
53
54/* Gets a device property. */
55RTC_API ssize_t rtcGetDeviceProperty(RTCDevice device, enum RTCDeviceProperty prop);
56
57/* Sets a device property. */
58RTC_API void rtcSetDeviceProperty(RTCDevice device, const enum RTCDeviceProperty prop, ssize_t value);
59
60/* Error codes */
61enum RTCError
62{
63 RTC_ERROR_NONE = 0,
64 RTC_ERROR_UNKNOWN = 1,
65 RTC_ERROR_INVALID_ARGUMENT = 2,
66 RTC_ERROR_INVALID_OPERATION = 3,
67 RTC_ERROR_OUT_OF_MEMORY = 4,
68 RTC_ERROR_UNSUPPORTED_CPU = 5,
69 RTC_ERROR_CANCELLED = 6
70};
71
72/* Returns the error code. */
73RTC_API enum RTCError rtcGetDeviceError(RTCDevice device);
74
75/* Error callback function */
76typedef void (*RTCErrorFunction)(void* userPtr, enum RTCError code, const char* str);
77
78/* Sets the error callback function. */
79RTC_API void rtcSetDeviceErrorFunction(RTCDevice device, RTCErrorFunction error, void* userPtr);
80
81/* Memory monitor callback function */
82typedef bool (*RTCMemoryMonitorFunction)(void* ptr, ssize_t bytes, bool post);
83
84/* Sets the memory monitor callback function. */
85RTC_API void rtcSetDeviceMemoryMonitorFunction(RTCDevice device, RTCMemoryMonitorFunction memoryMonitor, void* userPtr);
86
87RTC_NAMESPACE_END
88