Skip to content

Commit 5fd3934

Browse files
committed
Added constraints to the floor function
1 parent 7e1edae commit 5fd3934

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

include/nbl/builtin/hlsl/tgmath.hlsl

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
#include <nbl/builtin/hlsl/spirv_intrinsics/glsl.std.450.hlsl>
88
#include <nbl/builtin/hlsl/impl/tgmath_impl.hlsl>
9+
#include <nbl/builtin/hlsl/type_traits.hlsl>
10+
#include <nbl/builtin/hlsl/vector_utils/vector_traits.hlsl>
911
// C++ headers
1012
#ifndef __HLSL_VERSION
1113
#include <algorithm>
@@ -83,17 +85,31 @@ inline FloatingPoint erfInv(FloatingPoint _x)
8385
return p*x;
8486
}
8587

86-
template<typename T>
87-
inline T floor(NBL_CONST_REF_ARG(T) val)
88+
template<typename Scalar NBL_FUNC_REQUIRES(hlsl::is_floating_point_v<Scalar> && hlsl::is_scalar_v<Scalar>)
89+
inline Scalar floor(NBL_CONST_REF_ARG(Scalar) val)
8890
{
8991
#ifdef __HLSL_VERSION
90-
return spirv::floor<T>(val);
92+
return spirv::floor<Scalar>(val);
9193
#else
92-
return glm::floor(val);
94+
return std::floor<Scalar>(val);
9395
#endif
94-
9596
}
9697

98+
template<typename Vector NBL_FUNC_REQUIRES(hlsl::is_floating_point_v<Vector>&& hlsl::is_vector_v<Vector>)
99+
inline Vector floor(NBL_CONST_REF_ARG(Vector) vec)
100+
{
101+
#ifdef __HLSL_VERSION
102+
return spirv::floor<Vector>(vec);
103+
#else
104+
Vector output;
105+
for (int32_t i = 0; i < hlsl::vector_traits<Vector>::Dimension; ++i)
106+
output[i] = std::floor(vec[i]);
107+
108+
return output;
109+
#endif
110+
}
111+
112+
97113
template<typename T, typename U>
98114
inline T lerp(NBL_CONST_REF_ARG(T) x, NBL_CONST_REF_ARG(T) y, NBL_CONST_REF_ARG(U) a)
99115
{

0 commit comments

Comments
 (0)