Cleanup: fix compiler warnings.
[blender.git] / intern / cycles / bvh / bvh8.h
1 /*
2 * Original code Copyright 2017, Intel Corporation
3 * Modifications Copyright 2018, Blender Foundation.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * * Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * * Neither the name of Intel Corporation nor the names of its contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 #ifndef __BVH8_H__
30 #define __BVH8_H__
31
32 #include "bvh/bvh.h"
33 #include "bvh/bvh_params.h"
34
35 #include "util/util_types.h"
36 #include "util/util_vector.h"
37
38 CCL_NAMESPACE_BEGIN
39
40 class BVHNode;
41 struct BVHStackEntry;
42 class BVHParams;
43 class BoundBox;
44 class LeafNode;
45 class Object;
46 class Progress;
47
48 #define BVH_ONODE_SIZE           16
49 #define BVH_ONODE_LEAF_SIZE      1
50 #define BVH_UNALIGNED_ONODE_SIZE 28
51
52 /* BVH8
53 *
54 * Octo BVH, with each node having eight children, to use with SIMD instructions.
55 */
56 class BVH8 : public BVH {
57 protected:
58         /* constructor */
59         friend class BVH;
60         BVH8(const BVHParams& params, const vector<Object*>& objects);
61
62         /* Building process. */
63         virtual BVHNode *widen_children_nodes(const BVHNode *root) override;
64
65         /* pack */
66         void pack_nodes(const BVHNode *root) override;
67
68         void pack_leaf(const BVHStackEntry& e, const LeafNode *leaf);
69         void pack_inner(const BVHStackEntry& e, const BVHStackEntry *en, int num);
70
71         void pack_aligned_inner(const BVHStackEntry& e,
72                                 const BVHStackEntry *en,
73                                 int num);
74         void pack_aligned_node(int idx,
75                                const BoundBox *bounds,
76                                const int *child,
77                                const uint visibility,
78                                const float time_from,
79                                const float time_to,
80                                const int num);
81
82         void pack_unaligned_inner(const BVHStackEntry& e,
83                                   const BVHStackEntry *en,
84                                   int num);
85         void pack_unaligned_node(int idx,
86                                  const Transform *aligned_space,
87                                  const BoundBox *bounds,
88                                  const int *child,
89                                  const uint visibility,
90                                  const float time_from,
91                                  const float time_to,
92                                  const int num);
93
94         /* refit */
95         void refit_nodes() override;
96         void refit_node(int idx, bool leaf, BoundBox& bbox, uint& visibility);
97 };
98
99 CCL_NAMESPACE_END
100
101 #endif  /* __BVH8_H__ */