Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/embree/kernels/geometry/instance_array_intersector.h
9905 views
1
// Copyright 2009-2021 Intel Corporation
2
// SPDX-License-Identifier: Apache-2.0
3
4
#pragma once
5
6
#include "instance_array.h"
7
#include "../common/ray.h"
8
#include "../common/point_query.h"
9
#include "../common/scene.h"
10
11
namespace embree
12
{
13
namespace isa
14
{
15
struct InstanceArrayIntersector1
16
{
17
typedef InstanceArrayPrimitive Primitive;
18
19
struct Precalculations {
20
__forceinline Precalculations (const Ray& ray, const void *ptr) {}
21
};
22
23
static void intersect(const Precalculations& pre, RayHit& ray, RayQueryContext* context, const Primitive& prim);
24
static bool occluded(const Precalculations& pre, Ray& ray, RayQueryContext* context, const Primitive& prim);
25
static bool pointQuery(PointQuery* query, PointQueryContext* context, const Primitive& prim);
26
};
27
28
struct InstanceArrayIntersector1MB
29
{
30
typedef InstanceArrayPrimitive Primitive;
31
32
struct Precalculations {
33
__forceinline Precalculations (const Ray& ray, const void *ptr) {}
34
};
35
36
static void intersect(const Precalculations& pre, RayHit& ray, RayQueryContext* context, const Primitive& prim);
37
static bool occluded(const Precalculations& pre, Ray& ray, RayQueryContext* context, const Primitive& prim);
38
static bool pointQuery(PointQuery* query, PointQueryContext* context, const Primitive& prim);
39
};
40
41
template<int K>
42
struct InstanceArrayIntersectorK
43
{
44
typedef InstanceArrayPrimitive Primitive;
45
46
struct Precalculations {
47
__forceinline Precalculations (const vbool<K>& valid, const RayK<K>& ray) {}
48
};
49
50
static void intersect(const vbool<K>& valid_i, const Precalculations& pre, RayHitK<K>& ray, RayQueryContext* context, const Primitive& prim);
51
static vbool<K> occluded(const vbool<K>& valid_i, const Precalculations& pre, RayK<K>& ray, RayQueryContext* context, const Primitive& prim);
52
53
static __forceinline void intersect(Precalculations& pre, RayHitK<K>& ray, size_t k, RayQueryContext* context, const Primitive& prim) {
54
intersect(vbool<K>(1<<int(k)),pre,ray,context,prim);
55
}
56
57
static __forceinline bool occluded(Precalculations& pre, RayK<K>& ray, size_t k, RayQueryContext* context, const Primitive& prim) {
58
occluded(vbool<K>(1<<int(k)),pre,ray,context,prim);
59
return ray.tfar[k] < 0.0f;
60
}
61
};
62
63
template<int K>
64
struct InstanceArrayIntersectorKMB
65
{
66
typedef InstanceArrayPrimitive Primitive;
67
68
struct Precalculations {
69
__forceinline Precalculations (const vbool<K>& valid, const RayK<K>& ray) {}
70
};
71
72
static void intersect(const vbool<K>& valid_i, const Precalculations& pre, RayHitK<K>& ray, RayQueryContext* context, const Primitive& prim);
73
static vbool<K> occluded(const vbool<K>& valid_i, const Precalculations& pre, RayK<K>& ray, RayQueryContext* context, const Primitive& prim);
74
75
static __forceinline void intersect(Precalculations& pre, RayHitK<K>& ray, size_t k, RayQueryContext* context, const Primitive& prim) {
76
intersect(vbool<K>(1<<int(k)),pre,ray,context,prim);
77
}
78
79
static __forceinline bool occluded(Precalculations& pre, RayK<K>& ray, size_t k, RayQueryContext* context, const Primitive& prim) {
80
occluded(vbool<K>(1<<int(k)),pre,ray,context,prim);
81
return ray.tfar[k] < 0.0f;
82
}
83
};
84
}
85
}
86
87