1 // Copyright 2020-2021 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 
4 #pragma once
5 
6 #ifdef __cplusplus
7 #include <cstdint>
8 #include <cstdlib>
9 #else
10 #include <stdint.h>
11 #include <stdlib.h>
12 #endif
13 
14 #include "common.h"
15 #include "volume.h"
16 
17 #ifdef __cplusplus
18 struct Sampler : public ManagedObject
19 {
20 };
21 #else
22 typedef ManagedObject Sampler;
23 #endif
24 
25 typedef Sampler *VKLSampler;
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30 
31 OPENVKL_INTERFACE VKLSampler vklNewSampler(VKLVolume volume);
32 
33 // single attribute sampling
34 
35 OPENVKL_INTERFACE
36 float vklComputeSample(VKLSampler sampler,
37                        const vkl_vec3f *objectCoordinates,
38                        unsigned int attributeIndex VKL_DEFAULT_VAL(= 0),
39                        float time VKL_DEFAULT_VAL(= 0));
40 
41 OPENVKL_INTERFACE
42 void vklComputeSample4(const int *valid,
43                        VKLSampler sampler,
44                        const vkl_vvec3f4 *objectCoordinates,
45                        float *samples,
46                        unsigned int attributeIndex VKL_DEFAULT_VAL(= 0),
47                        const float *times VKL_DEFAULT_VAL(= nullptr));
48 
49 OPENVKL_INTERFACE
50 void vklComputeSample8(const int *valid,
51                        VKLSampler sampler,
52                        const vkl_vvec3f8 *objectCoordinates,
53                        float *samples,
54                        unsigned int attributeIndex VKL_DEFAULT_VAL(= 0),
55                        const float *times VKL_DEFAULT_VAL(= nullptr));
56 
57 OPENVKL_INTERFACE
58 void vklComputeSample16(const int *valid,
59                         VKLSampler sampler,
60                         const vkl_vvec3f16 *objectCoordinates,
61                         float *samples,
62                         unsigned int attributeIndex VKL_DEFAULT_VAL(= 0),
63                         const float *times VKL_DEFAULT_VAL(= nullptr));
64 
65 OPENVKL_INTERFACE
66 void vklComputeSampleN(VKLSampler sampler,
67                        unsigned int N,
68                        const vkl_vec3f *objectCoordinates,
69                        float *samples,
70                        unsigned int attributeIndex VKL_DEFAULT_VAL(= 0),
71                        const float *times VKL_DEFAULT_VAL(= nullptr));
72 
73 // multi-attribute sampling
74 
75 OPENVKL_INTERFACE
76 void vklComputeSampleM(VKLSampler sampler,
77                        const vkl_vec3f *objectCoordinates,
78                        float *samples,
79                        unsigned int M,
80                        const unsigned int *attributeIndices,
81                        float time VKL_DEFAULT_VAL(= 0));
82 
83 OPENVKL_INTERFACE
84 void vklComputeSampleM4(const int *valid,
85                         VKLSampler sampler,
86                         const vkl_vvec3f4 *objectCoordinates,
87                         float *samples,
88                         unsigned int M,
89                         const unsigned int *attributeIndices,
90                         const float *times VKL_DEFAULT_VAL(= nullptr));
91 
92 OPENVKL_INTERFACE
93 void vklComputeSampleM8(const int *valid,
94                         VKLSampler sampler,
95                         const vkl_vvec3f8 *objectCoordinates,
96                         float *samples,
97                         unsigned int M,
98                         const unsigned int *attributeIndices,
99                         const float *times VKL_DEFAULT_VAL(= nullptr));
100 
101 OPENVKL_INTERFACE
102 void vklComputeSampleM16(const int *valid,
103                          VKLSampler sampler,
104                          const vkl_vvec3f16 *objectCoordinates,
105                          float *samples,
106                          unsigned int M,
107                          const unsigned int *attributeIndices,
108                          const float *times VKL_DEFAULT_VAL(= nullptr));
109 
110 OPENVKL_INTERFACE
111 void vklComputeSampleMN(VKLSampler sampler,
112                         unsigned int N,
113                         const vkl_vec3f *objectCoordinates,
114                         float *samples,
115                         unsigned int M,
116                         const unsigned int *attributeIndices,
117                         const float *times VKL_DEFAULT_VAL(= nullptr));
118 
119 OPENVKL_INTERFACE
120 vkl_vec3f vklComputeGradient(VKLSampler sampler,
121                              const vkl_vec3f *objectCoordinates,
122                              unsigned int attributeIndex VKL_DEFAULT_VAL(= 0),
123                              float time VKL_DEFAULT_VAL(= 0));
124 
125 OPENVKL_INTERFACE
126 void vklComputeGradient4(const int *valid,
127                          VKLSampler sampler,
128                          const vkl_vvec3f4 *objectCoordinates,
129                          vkl_vvec3f4 *gradients,
130                          unsigned int attributeIndex VKL_DEFAULT_VAL(= 0),
131                          const float *times VKL_DEFAULT_VAL(= nullptr));
132 
133 OPENVKL_INTERFACE
134 void vklComputeGradient8(const int *valid,
135                          VKLSampler sampler,
136                          const vkl_vvec3f8 *objectCoordinates,
137                          vkl_vvec3f8 *gradients,
138                          unsigned int attributeIndex VKL_DEFAULT_VAL(= 0),
139                          const float *times VKL_DEFAULT_VAL(= nullptr));
140 
141 OPENVKL_INTERFACE
142 void vklComputeGradient16(const int *valid,
143                           VKLSampler sampler,
144                           const vkl_vvec3f16 *objectCoordinates,
145                           vkl_vvec3f16 *gradients,
146                           unsigned int attributeIndex VKL_DEFAULT_VAL(= 0),
147                           const float *times VKL_DEFAULT_VAL(= nullptr));
148 
149 OPENVKL_INTERFACE
150 void vklComputeGradientN(VKLSampler sampler,
151                          unsigned int N,
152                          const vkl_vec3f *objectCoordinates,
153                          vkl_vec3f *gradients,
154                          unsigned int attributeIndex VKL_DEFAULT_VAL(= 0),
155                          const float *times VKL_DEFAULT_VAL(= nullptr));
156 
157 #ifdef __cplusplus
158 }  // extern "C"
159 #endif
160