1 // Copyright 2020-2021 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3
4 #include "api/CPUDevice.h"
5 #include "openvkl/common/ManagedObject.h"
6
7 // For Windows in particular, we need registered object creation functions
8 // available in the top level module library, as exports from dependencies will
9 // not be visible.
10
11 #define VKL_WRAP_DEVICE_REGISTRATION( \
12 module_name, internal_name, external_name) \
13 extern "C" OPENVKL_DLLEXPORT void openvkl_init_module_##module_name(); \
14 \
15 extern "C" OPENVKL_DLLEXPORT ::openvkl::api::Device \
16 *openvkl_create_device__##internal_name(); \
17 \
18 extern "C" OPENVKL_DLLEXPORT ::openvkl::api::Device \
19 *openvkl_create_device__##external_name() \
20 { \
21 return openvkl_create_device__##internal_name(); \
22 }
23
24 #define VKL_WRAP_VOLUME_REGISTRATION(internal_name, external_name) \
25 extern "C" OPENVKL_DLLEXPORT ::openvkl::ManagedObject \
26 *openvkl_create_volume__##internal_name(); \
27 \
28 extern "C" OPENVKL_DLLEXPORT ::openvkl::ManagedObject \
29 *openvkl_create_volume__##external_name() \
30 { \
31 return openvkl_create_volume__##internal_name(); \
32 }
33
34 #if VKL_TARGET_WIDTH_ENABLED_4
VKL_WRAP_DEVICE_REGISTRATION(cpu_device_4,internal_cpu_4,cpu_4)35 VKL_WRAP_DEVICE_REGISTRATION(cpu_device_4, internal_cpu_4, cpu_4)
36
37 VKL_WRAP_VOLUME_REGISTRATION(internal_amr_4, amr_4)
38 VKL_WRAP_VOLUME_REGISTRATION(internal_structuredRegular_4, structuredRegular_4)
39 VKL_WRAP_VOLUME_REGISTRATION(internal_structuredSpherical_4,
40 structuredSpherical_4)
41 VKL_WRAP_VOLUME_REGISTRATION(internal_unstructured_4, unstructured_4)
42 VKL_WRAP_VOLUME_REGISTRATION(internal_vdb_4, vdb_4)
43 VKL_WRAP_VOLUME_REGISTRATION(internal_particle_4, particle_4)
44
45 // support deprecated snake case names (a warning will be triggered if these are
46 // used)
47 VKL_WRAP_VOLUME_REGISTRATION(internal_structuredRegular_4, structured_regular_4)
48 VKL_WRAP_VOLUME_REGISTRATION(internal_structuredSpherical_4,
49 structured_spherical_4)
50 #endif
51
52 #if VKL_TARGET_WIDTH_ENABLED_8
53 VKL_WRAP_DEVICE_REGISTRATION(cpu_device_8, internal_cpu_8, cpu_8)
54
55 VKL_WRAP_VOLUME_REGISTRATION(internal_amr_8, amr_8)
56 VKL_WRAP_VOLUME_REGISTRATION(internal_structuredRegular_8, structuredRegular_8)
57 VKL_WRAP_VOLUME_REGISTRATION(internal_structuredSpherical_8,
58 structuredSpherical_8)
59 VKL_WRAP_VOLUME_REGISTRATION(internal_unstructured_8, unstructured_8)
60 VKL_WRAP_VOLUME_REGISTRATION(internal_vdb_8, vdb_8)
61 VKL_WRAP_VOLUME_REGISTRATION(internal_particle_8, particle_8)
62
63 // support deprecated snake case names (a warning will be triggered if these are
64 // used)
65 VKL_WRAP_VOLUME_REGISTRATION(internal_structuredRegular_8, structured_regular_8)
66 VKL_WRAP_VOLUME_REGISTRATION(internal_structuredSpherical_8,
67 structured_spherical_8)
68 #endif
69
70 #if VKL_TARGET_WIDTH_ENABLED_16
71 VKL_WRAP_DEVICE_REGISTRATION(cpu_device_16, internal_cpu_16, cpu_16)
72
73 VKL_WRAP_VOLUME_REGISTRATION(internal_amr_16, amr_16)
74 VKL_WRAP_VOLUME_REGISTRATION(internal_structuredRegular_16,
75 structuredRegular_16)
76 VKL_WRAP_VOLUME_REGISTRATION(internal_structuredSpherical_16,
77 structuredSpherical_16)
78 VKL_WRAP_VOLUME_REGISTRATION(internal_unstructured_16, unstructured_16)
79 VKL_WRAP_VOLUME_REGISTRATION(internal_vdb_16, vdb_16)
80 VKL_WRAP_VOLUME_REGISTRATION(internal_particle_16, particle_16)
81
82 // support deprecated snake case names (a warning will be triggered if these are
83 // used)
84 VKL_WRAP_VOLUME_REGISTRATION(internal_structuredRegular_16,
85 structured_regular_16)
86 VKL_WRAP_VOLUME_REGISTRATION(internal_structuredSpherical_16,
87 structured_spherical_16)
88 #endif
89
90 // calls init functions in [4, 8, 16] devices to ensure proper linkage
91 extern "C" OPENVKL_DLLEXPORT void openvkl_init_module_cpu_device()
92 {
93 #if VKL_TARGET_WIDTH_ENABLED_4
94 openvkl_init_module_cpu_device_4();
95 #endif
96
97 #if VKL_TARGET_WIDTH_ENABLED_8
98 openvkl_init_module_cpu_device_8();
99 #endif
100
101 #if VKL_TARGET_WIDTH_ENABLED_16
102 openvkl_init_module_cpu_device_16();
103 #endif
104 }
105