Skip to content

Commit 2e56fc9

Browse files
committed
Added Vector and Matrix concepts
1 parent 19c30e5 commit 2e56fc9

File tree

4 files changed

+89
-4
lines changed

4 files changed

+89
-4
lines changed

include/nbl/builtin/hlsl/concepts.hlsl

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,6 @@ concept any_of = (same_as<T, Ts> || ...);
118118
template <typename T>
119119
concept scalar = floating_point<T> || integral<T>;
120120

121-
template <typename T>
122-
concept matricial = is_matrix<T>::value;
123-
124121
#else
125122

126123

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Copyright (C) 2024-2025 - DevSH Graphics Programming Sp. z O.O.
2+
// This file is part of the "Nabla Engine".
3+
// For conditions of distribution and use, see copyright notice in nabla.h
4+
#ifndef _NBL_BUILTIN_HLSL_CONCEPTS_MATRIX_INCLUDED_
5+
#define _NBL_BUILTIN_HLSL_CONCEPTS_MATRIX_INCLUDED_
6+
7+
8+
#include <nbl/builtin/hlsl/concepts.hlsl>
9+
#include <nbl/builtin/hlsl/matrix_utils/matrix_traits.hlsl>
10+
11+
namespace nbl
12+
{
13+
namespace hlsl
14+
{
15+
namespace concepts
16+
{
17+
18+
template<typename T>
19+
NBL_BOOL_CONCEPT Matrix = is_matrix<T>::value;
20+
21+
#define NBL_CONCEPT_NAME Matricial
22+
#define NBL_CONCEPT_TPLT_PRM_KINDS (typename)
23+
#define NBL_CONCEPT_TPLT_PRM_NAMES (T)
24+
NBL_CONCEPT_BEGIN(0)
25+
NBL_CONCEPT_END(
26+
((NBL_CONCEPT_REQ_TYPE)(matrix_traits<T>::scalar_type))
27+
((NBL_CONCEPT_REQ_TYPE)(matrix_traits<T>::row_type))
28+
((NBL_CONCEPT_REQ_TYPE)(matrix_traits<T>::transposed_type))
29+
((NBL_CONCEPT_REQ_EXPR_RET_TYPE)((matrix_traits<T>::RowCount), ::nbl::hlsl::is_integral_v))
30+
((NBL_CONCEPT_REQ_EXPR_RET_TYPE)((matrix_traits<T>::ColumnCount), ::nbl::hlsl::is_integral_v))
31+
((NBL_CONCEPT_REQ_EXPR_RET_TYPE)((matrix_traits<T>::Square), ::nbl::hlsl::is_same_v, bool))
32+
);
33+
#include <nbl/builtin/hlsl/concepts/__end.hlsl>
34+
35+
}
36+
}
37+
}
38+
#endif
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// Copyright (C) 2024-2025 - DevSH Graphics Programming Sp. z O.O.
2+
// This file is part of the "Nabla Engine".
3+
// For conditions of distribution and use, see copyright notice in nabla.h
4+
#ifndef _NBL_BUILTIN_HLSL_CONCEPTS_VECTOR_INCLUDED_
5+
#define _NBL_BUILTIN_HLSL_CONCEPTS_VECTOR_INCLUDED_
6+
7+
8+
#include <nbl/builtin/hlsl/concepts.hlsl>
9+
#include <nbl/builtin/hlsl/vector_utils/vector_traits.hlsl>
10+
#include <nbl/builtin/hlsl/type_traits.hlsl>
11+
12+
namespace nbl
13+
{
14+
namespace hlsl
15+
{
16+
namespace concepts
17+
{
18+
19+
template<typename T>
20+
NBL_BOOL_CONCEPT Vector = is_vector<T>::value;
21+
22+
// declare concept
23+
#define NBL_CONCEPT_NAME Vectorial
24+
#define NBL_CONCEPT_TPLT_PRM_KINDS (typename)
25+
#define NBL_CONCEPT_TPLT_PRM_NAMES (T)
26+
27+
NBL_CONCEPT_BEGIN(0)
28+
NBL_CONCEPT_END
29+
(
30+
((NBL_CONCEPT_REQ_TYPE)(vector_traits<T>::scalar_type))
31+
((NBL_CONCEPT_REQ_EXPR_RET_TYPE)((vector_traits<T>::Dimension), ::nbl::hlsl::is_integral_v))
32+
);
33+
34+
#include <nbl/builtin/hlsl/concepts/__end.hlsl>
35+
36+
}
37+
}
38+
}
39+
#endif

include/nbl/builtin/hlsl/matrix_utils/matrix_traits.hlsl

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,21 @@ struct matrix_traits<matrix<T, ROW_COUNT, COLUMN_COUNT> > \
2525
NBL_CONSTEXPR_STATIC_INLINE bool Square = RowCount == ColumnCount; \
2626
};
2727

28+
DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION(1, 2)
29+
DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION(1, 3)
30+
DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION(1, 4)
31+
DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION(2, 1)
2832
DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION(2, 2)
33+
DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION(2, 3)
34+
DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION(2, 4)
35+
DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION(3, 1)
36+
DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION(3, 2)
2937
DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION(3, 3)
30-
DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION(4, 4)
3138
DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION(3, 4)
39+
DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION(4, 1)
40+
DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION(4, 2)
41+
DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION(4, 3)
42+
DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION(4, 4)
3243

3344
#undef DEFINE_MATRIX_TRAITS_TEMPLATE_SPECIALIZATION
3445

0 commit comments

Comments
 (0)