1// Copyright 2009-2021 Intel Corporation
2// SPDX-License-Identifier: Apache-2.0
3
4#pragma once
5
6#include "default.h"
7#include "state.h"
8#include "accel.h"
9
10namespace embree
11{
12 class BVH4Factory;
13 class BVH8Factory;
14
15 class Device : public State, public MemoryMonitorInterface
16 {
17 ALIGNED_CLASS_(16);
18
19 public:
20
21 /*! Device construction */
22 Device (const char* cfg);
23
24 /*! Device destruction */
25 virtual ~Device ();
26
27 /*! prints info about the device */
28 void print();
29
30 /*! sets the error code */
31 void setDeviceErrorCode(RTCError error);
32
33 /*! returns and clears the error code */
34 RTCError getDeviceErrorCode();
35
36 /*! sets the error code */
37 static void setThreadErrorCode(RTCError error);
38
39 /*! returns and clears the error code */
40 static RTCError getThreadErrorCode();
41
42 /*! processes error codes, do not call directly */
43 static void process_error(Device* device, RTCError error, const char* str);
44
45 /*! invokes the memory monitor callback */
46 void memoryMonitor(ssize_t bytes, bool post);
47
48 /*! sets the size of the software cache. */
49 void setCacheSize(size_t bytes);
50
51 /*! sets a property */
52 void setProperty(const RTCDeviceProperty prop, ssize_t val);
53
54 /*! gets a property */
55 ssize_t getProperty(const RTCDeviceProperty prop);
56
57 private:
58
59 /*! initializes the tasking system */
60 void initTaskingSystem(size_t numThreads);
61
62 /*! shuts down the tasking system */
63 void exitTaskingSystem();
64
65 /*! some variables that can be set via rtcSetParameter1i for debugging purposes */
66 public:
67 static ssize_t debug_int0;
68 static ssize_t debug_int1;
69 static ssize_t debug_int2;
70 static ssize_t debug_int3;
71
72 public:
73 std::unique_ptr<BVH4Factory> bvh4_factory;
74#if defined(EMBREE_TARGET_SIMD8)
75 std::unique_ptr<BVH8Factory> bvh8_factory;
76#endif
77
78#if USE_TASK_ARENA
79 std::unique_ptr<tbb::task_arena> arena;
80#endif
81
82 /* ray streams filter */
83 RayStreamFilterFuncs rayStreamFilters;
84 };
85}
86