blob: e1da028d213b0acfd0b349ffe13f38cfcd63bdb9 [file] [log] [blame]
Nicolas Capens68a82382018-10-02 13:16:55 -04001// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#ifndef sw_ShaderCore_hpp
16#define sw_ShaderCore_hpp
17
Nicolas Capens68a82382018-10-02 13:16:55 -040018#include "Reactor/Reactor.hpp"
Chris Forbesebe5f7f2019-01-16 10:38:34 -080019#include "Vulkan/VkDebug.hpp"
Nicolas Capens68a82382018-10-02 13:16:55 -040020
21namespace sw
22{
Nicolas Capens48461502018-08-06 14:20:45 -040023 using namespace rr;
24
Nicolas Capens68a82382018-10-02 13:16:55 -040025 class Vector4s
26 {
27 public:
28 Vector4s();
29 Vector4s(unsigned short x, unsigned short y, unsigned short z, unsigned short w);
30 Vector4s(const Vector4s &rhs);
31
32 Short4 &operator[](int i);
33 Vector4s &operator=(const Vector4s &rhs);
34
35 Short4 x;
36 Short4 y;
37 Short4 z;
38 Short4 w;
39 };
40
41 class Vector4f
42 {
43 public:
44 Vector4f();
45 Vector4f(float x, float y, float z, float w);
46 Vector4f(const Vector4f &rhs);
47
48 Float4 &operator[](int i);
49 Vector4f &operator=(const Vector4f &rhs);
50
51 Float4 x;
52 Float4 y;
53 Float4 z;
54 Float4 w;
55 };
56
57 Float4 exponential2(RValue<Float4> x, bool pp = false);
58 Float4 logarithm2(RValue<Float4> x, bool abs, bool pp = false);
59 Float4 exponential(RValue<Float4> x, bool pp = false);
60 Float4 logarithm(RValue<Float4> x, bool abs, bool pp = false);
61 Float4 power(RValue<Float4> x, RValue<Float4> y, bool pp = false);
62 Float4 reciprocal(RValue<Float4> x, bool pp = false, bool finite = false, bool exactAtPow2 = false);
63 Float4 reciprocalSquareRoot(RValue<Float4> x, bool abs, bool pp = false);
64 Float4 modulo(RValue<Float4> x, RValue<Float4> y);
65 Float4 sine_pi(RValue<Float4> x, bool pp = false); // limited to [-pi, pi] range
66 Float4 cosine_pi(RValue<Float4> x, bool pp = false); // limited to [-pi, pi] range
67 Float4 sine(RValue<Float4> x, bool pp = false);
68 Float4 cosine(RValue<Float4> x, bool pp = false);
69 Float4 tangent(RValue<Float4> x, bool pp = false);
70 Float4 arccos(RValue<Float4> x, bool pp = false);
71 Float4 arcsin(RValue<Float4> x, bool pp = false);
72 Float4 arctan(RValue<Float4> x, bool pp = false);
73 Float4 arctan(RValue<Float4> y, RValue<Float4> x, bool pp = false);
74 Float4 sineh(RValue<Float4> x, bool pp = false);
75 Float4 cosineh(RValue<Float4> x, bool pp = false);
76 Float4 tangenth(RValue<Float4> x, bool pp = false);
77 Float4 arccosh(RValue<Float4> x, bool pp = false); // Limited to x >= 1
78 Float4 arcsinh(RValue<Float4> x, bool pp = false);
79 Float4 arctanh(RValue<Float4> x, bool pp = false); // Limited to ]-1, 1[ range
80
81 Float4 dot2(const Vector4f &v0, const Vector4f &v1);
82 Float4 dot3(const Vector4f &v0, const Vector4f &v1);
83 Float4 dot4(const Vector4f &v0, const Vector4f &v1);
84
85 void transpose4x4(Short4 &row0, Short4 &row1, Short4 &row2, Short4 &row3);
86 void transpose4x3(Short4 &row0, Short4 &row1, Short4 &row2, Short4 &row3);
87 void transpose4x4(Float4 &row0, Float4 &row1, Float4 &row2, Float4 &row3);
88 void transpose4x3(Float4 &row0, Float4 &row1, Float4 &row2, Float4 &row3);
89 void transpose4x2(Float4 &row0, Float4 &row1, Float4 &row2, Float4 &row3);
90 void transpose4x1(Float4 &row0, Float4 &row1, Float4 &row2, Float4 &row3);
91 void transpose2x4(Float4 &row0, Float4 &row1, Float4 &row2, Float4 &row3);
92 void transpose4xN(Float4 &row0, Float4 &row1, Float4 &row2, Float4 &row3, int N);
Chris Forbesd3546952019-04-30 19:32:19 -070093
94 UInt4 halfToFloatBits(UInt4 halfBits);
Nicolas Capens68a82382018-10-02 13:16:55 -040095}
96
97#endif // sw_ShaderCore_hpp