blob: de6b70be1b27859d1ee214d0f8aa6cd8632bc12e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
// Copyright 2009-2021 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
#pragma once
#include "../common/ray.h"
#include "../common/geometry.h"
namespace embree
{
namespace isa
{
struct CurvePrecalculations1
{
float depth_scale;
LinearSpace3fa ray_space;
__forceinline CurvePrecalculations1() {}
__forceinline CurvePrecalculations1(const Ray& ray, const void* ptr)
{
depth_scale = rsqrt(dot(ray.dir,ray.dir));
LinearSpace3fa space = frame(depth_scale*ray.dir);
space.vz *= depth_scale;
ray_space = space.transposed();
}
};
template<int K>
struct CurvePrecalculationsK
{
vfloat<K> depth_scale;
LinearSpace3fa ray_space[K];
__forceinline CurvePrecalculationsK(const vbool<K>& valid, const RayK<K>& ray)
{
size_t mask = movemask(valid);
depth_scale = rsqrt(dot(ray.dir,ray.dir));
while (mask) {
size_t k = bscf(mask);
Vec3fa ray_dir_k = Vec3fa(ray.dir.x[k],ray.dir.y[k],ray.dir.z[k]);
LinearSpace3fa ray_space_k = frame(depth_scale[k]*ray_dir_k);
ray_space_k.vz *= depth_scale[k];
ray_space[k] = ray_space_k.transposed();
}
}
};
}
}
|