@@ -21,13 +21,11 @@ template<uint16_t _WorkgroupSizeLog2, uint16_t _SubgroupSizeLog2>
21
21
struct virtual_wg_size_log2
22
22
{
23
23
#define DEFINE_ASSIGN (TYPE,ID,...) NBL_CONSTEXPR_STATIC_INLINE TYPE ID = __VA_ARGS__;
24
- #define DEFINE_VIRTUAL_WG_T (ID) ID
25
- #define DEFINE_MPL_MAX_V (TYPE,ARG1,ARG2) mpl::max_v<TYPE, ARG1, ARG2>
26
- #define DEFINE_COND_VAL (TYPE,COND,TRUE_VAL,FALSE_VAL) conditional_value<COND,TYPE,TRUE_VAL,FALSE_VAL>::value
24
+ #define MAX (TYPE,ARG1,ARG2) mpl::max_v<TYPE, ARG1, ARG2>
25
+ #define SELECT (TYPE,COND,TRUE_VAL,FALSE_VAL) conditional_value<COND,TYPE,TRUE_VAL,FALSE_VAL>::value
27
26
#include "impl/virtual_wg_size_def.hlsl"
28
- #undef DEFINE_COND_VAL
29
- #undef DEFINE_MPL_MAX_V
30
- #undef DEFINE_VIRTUAL_WG_T
27
+ #undef SELECT
28
+ #undef MAX
31
29
#undef DEFINE_ASSIGN
32
30
33
31
// must have at least enough level 0 outputs to feed a single subgroup
@@ -39,17 +37,15 @@ template<class VirtualWorkgroup, uint16_t BaseItemsPerInvocation>
39
37
struct items_per_invocation
40
38
{
41
39
#define DEFINE_ASSIGN (TYPE,ID,...) NBL_CONSTEXPR_STATIC_INLINE TYPE ID = __VA_ARGS__;
42
- #define DEFINE_VIRTUAL_WG_T (ID) VirtualWorkgroup::ID
43
- #define DEFINE_ITEMS_INVOC_T (ID) ID
44
- #define DEFINE_MPL_MIN_V (TYPE,ARG1,ARG2) mpl::min_v<TYPE, ARG1, ARG2>
45
- #define DEFINE_MPL_MAX_V (TYPE,ARG1,ARG2) mpl::max_v<TYPE, ARG1, ARG2>
46
- #define DEFINE_COND_VAL (TYPE,COND,TRUE_VAL,FALSE_VAL) conditional_value<COND,TYPE,TRUE_VAL,FALSE_VAL>::value
40
+ #define VIRTUAL_WG_SIZE VirtualWorkgroup::
41
+ #define MIN (TYPE,ARG1,ARG2) mpl::min_v<TYPE, ARG1, ARG2>
42
+ #define MAX (TYPE,ARG1,ARG2) mpl::max_v<TYPE, ARG1, ARG2>
43
+ #define SELECT (TYPE,COND,TRUE_VAL,FALSE_VAL) conditional_value<COND,TYPE,TRUE_VAL,FALSE_VAL>::value
47
44
#include "impl/items_per_invoc_def.hlsl"
48
- #undef DEFINE_COND_VAL
49
- #undef DEFINE_MPL_MAX_V
50
- #undef DEFINE_MPL_MIN_V
51
- #undef DEFINE_ITEMS_INVOC_T
52
- #undef DEFINE_VIRTUAL_WG_T
45
+ #undef SELECT
46
+ #undef MAX
47
+ #undef MIN
48
+ #undef VIRTUAL_WG_SIZE
53
49
#undef DEFINE_ASSIGN
54
50
55
51
using ItemsPerInvocation = tuple<integral_constant<uint16_t,value0>,integral_constant<uint16_t,value1>,integral_constant<uint16_t,value2> >;
@@ -64,17 +60,15 @@ struct ArithmeticConfiguration
64
60
using ItemsPerInvocation = typename items_per_invoc_t::ItemsPerInvocation;
65
61
66
62
#define DEFINE_ASSIGN (TYPE,ID,...) NBL_CONSTEXPR_STATIC_INLINE TYPE ID = __VA_ARGS__;
67
- #define DEFINE_VIRTUAL_WG_T (ID) virtual_wg_t::ID
68
- #define DEFINE_ITEMS_INVOC_T (ID) items_per_invoc_t::ID
69
- #define DEFINE_CONFIG_T (ID) ID
70
- #define DEFINE_MPL_MAX_V (TYPE,ARG1,ARG2) mpl::max_v<TYPE, ARG1, ARG2>
71
- #define DEFINE_COND_VAL (TYPE,COND,TRUE_VAL,FALSE_VAL) conditional_value<COND,TYPE,TRUE_VAL,FALSE_VAL>::value
63
+ #define VIRTUAL_WG_SIZE virtual_wg_t::
64
+ #define ITEMS_PER_INVOC items_per_invoc_t::
65
+ #define MAX (TYPE,ARG1,ARG2) mpl::max_v<TYPE, ARG1, ARG2>
66
+ #define SELECT (TYPE,COND,TRUE_VAL,FALSE_VAL) conditional_value<COND,TYPE,TRUE_VAL,FALSE_VAL>::value
72
67
#include "impl/arithmetic_config_def.hlsl"
73
- #undef DEFINE_COND_VAL
74
- #undef DEFINE_MPL_MAX_V
75
- #undef DEFINE_CONFIG_T
76
- #undef DEFINE_ITEMS_INVOC_T
77
- #undef DEFINE_VIRTUAL_WG_T
68
+ #undef SELECT
69
+ #undef MAX
70
+ #undef ITEMS_PER_INVOC
71
+ #undef VIRTUAL_WG_SIZE
78
72
#undef DEFINE_ASSIGN
79
73
80
74
using ChannelStride = tuple<integral_constant<uint16_t,__padding>,integral_constant<uint16_t,__channelStride_1>,integral_constant<uint16_t,__channelStride_2> >; // we don't use stride 0
@@ -148,19 +142,15 @@ namespace impl
148
142
{
149
143
struct SVirtualWGSizeLog2
150
144
{
151
- static SVirtualWGSizeLog2 create (const uint16_t _WorkgroupSizeLog2, const uint16_t _SubgroupSizeLog2)
145
+ void init (const uint16_t _WorkgroupSizeLog2, const uint16_t _SubgroupSizeLog2)
152
146
{
153
- SVirtualWGSizeLog2 retval;
154
- #define DEFINE_ASSIGN (TYPE,ID,...) retval.ID = __VA_ARGS__;
155
- #define DEFINE_VIRTUAL_WG_T (ID) retval.ID
156
- #define DEFINE_MPL_MAX_V (TYPE,ARG1,ARG2) hlsl::max <TYPE>(ARG1, ARG2)
157
- #define DEFINE_COND_VAL (TYPE,COND,TRUE_VAL,FALSE_VAL) (COND ? TRUE_VAL : FALSE_VAL)
147
+ #define DEFINE_ASSIGN (TYPE,ID,...) ID = __VA_ARGS__;
148
+ #define MAX (TYPE,ARG1,ARG2) hlsl::max <TYPE>(ARG1, ARG2)
149
+ #define SELECT (TYPE,COND,TRUE_VAL,FALSE_VAL) (COND ? TRUE_VAL : FALSE_VAL)
158
150
#include "impl/virtual_wg_size_def.hlsl"
159
- #undef DEFINE_COND_VAL
160
- #undef DEFINE_MPL_MAX_V
161
- #undef DEFINE_VIRTUAL_WG_T
151
+ #undef SELECT
152
+ #undef MAX
162
153
#undef DEFINE_ASSIGN
163
- return retval;
164
154
}
165
155
166
156
#define DEFINE_ASSIGN (TYPE,ID,...) TYPE ID;
@@ -170,23 +160,19 @@ struct SVirtualWGSizeLog2
170
160
171
161
struct SItemsPerInvoc
172
162
{
173
- static SItemsPerInvoc create (const SVirtualWGSizeLog2 virtualWgSizeLog2, const uint16_t BaseItemsPerInvocation)
163
+ void init (const SVirtualWGSizeLog2 virtualWgSizeLog2, const uint16_t BaseItemsPerInvocation)
174
164
{
175
- SItemsPerInvoc retval;
176
- #define DEFINE_ASSIGN (TYPE,ID,...) retval.ID = __VA_ARGS__;
177
- #define DEFINE_VIRTUAL_WG_T (ID) virtualWgSizeLog2.ID
178
- #define DEFINE_ITEMS_INVOC_T (ID) retval.ID
179
- #define DEFINE_MPL_MIN_V (TYPE,ARG1,ARG2) hlsl::min <TYPE>(ARG1, ARG2)
180
- #define DEFINE_MPL_MAX_V (TYPE,ARG1,ARG2) hlsl::max <TYPE>(ARG1, ARG2)
181
- #define DEFINE_COND_VAL (TYPE,COND,TRUE_VAL,FALSE_VAL) (COND ? TRUE_VAL : FALSE_VAL)
165
+ #define DEFINE_ASSIGN (TYPE,ID,...) ID = __VA_ARGS__;
166
+ #define VIRTUAL_WG_SIZE virtualWgSizeLog2.
167
+ #define MIN (TYPE,ARG1,ARG2) hlsl::min <TYPE>(ARG1, ARG2)
168
+ #define MAX (TYPE,ARG1,ARG2) hlsl::max <TYPE>(ARG1, ARG2)
169
+ #define SELECT (TYPE,COND,TRUE_VAL,FALSE_VAL) (COND ? TRUE_VAL : FALSE_VAL)
182
170
#include "impl/items_per_invoc_def.hlsl"
183
- #undef DEFINE_COND_VAL
184
- #undef DEFINE_MPL_MAX_V
185
- #undef DEFINE_MPL_MIN_V
186
- #undef DEFINE_ITEMS_INVOC_T
187
- #undef DEFINE_VIRTUAL_WG_T
171
+ #undef SELECT
172
+ #undef MAX
173
+ #undef MIN
174
+ #undef VIRTUAL_WG_SIZE
188
175
#undef DEFINE_ASSIGN
189
- return retval;
190
176
}
191
177
192
178
#define DEFINE_ASSIGN (TYPE,ID,...) TYPE ID;
@@ -197,26 +183,24 @@ struct SItemsPerInvoc
197
183
198
184
struct SArithmeticConfiguration
199
185
{
200
- static SArithmeticConfiguration create (const uint16_t _WorkgroupSizeLog2, const uint16_t _SubgroupSizeLog2, const uint16_t _ItemsPerInvocation)
186
+ void init (const uint16_t _WorkgroupSizeLog2, const uint16_t _SubgroupSizeLog2, const uint16_t _ItemsPerInvocation)
201
187
{
202
- impl::SVirtualWGSizeLog2 virtualWgSizeLog2 = impl::SVirtualWGSizeLog2:: create (_WorkgroupSizeLog2, _SubgroupSizeLog2) ;
203
- impl::SItemsPerInvoc itemsPerInvoc = impl::SItemsPerInvoc:: create ( virtualWgSizeLog2, _ItemsPerInvocation );
204
-
205
- SArithmeticConfiguration retval ;
206
- #define DEFINE_ASSIGN (TYPE,ID,...) retval.ID = __VA_ARGS__;
207
- #define DEFINE_VIRTUAL_WG_T (ID) virtualWgSizeLog2.ID
208
- #define DEFINE_ITEMS_INVOC_T (ID) itemsPerInvoc.ID
209
- #define DEFINE_CONFIG_T (ID) retval.ID
210
- #define DEFINE_MPL_MAX_V (TYPE,ARG1,ARG2) hlsl::max <TYPE>(ARG1, ARG2)
211
- #define DEFINE_COND_VAL (TYPE,COND,TRUE_VAL,FALSE_VAL) (COND ? TRUE_VAL : FALSE_VAL)
188
+ impl::SVirtualWGSizeLog2 virtualWgSizeLog2;
189
+ virtualWgSizeLog2. init (_WorkgroupSizeLog2, _SubgroupSizeLog2 );
190
+ impl::SItemsPerInvoc itemsPerInvoc;
191
+ itemsPerInvoc. init (virtualWgSizeLog2, _ItemsPerInvocation) ;
192
+
193
+ #define DEFINE_ASSIGN (TYPE,ID,...) ID = __VA_ARGS__;
194
+ #define VIRTUAL_WG_SIZE virtualWgSizeLog2.
195
+ #define ITEMS_PER_INVOC itemsPerInvoc.
196
+ #define MAX (TYPE,ARG1,ARG2) hlsl::max <TYPE>(ARG1, ARG2)
197
+ #define SELECT (TYPE,COND,TRUE_VAL,FALSE_VAL) (COND ? TRUE_VAL : FALSE_VAL)
212
198
#include "impl/arithmetic_config_def.hlsl"
213
- #undef DEFINE_COND_VAL
214
- #undef DEFINE_MPL_MAX_V
215
- #undef DEFINE_CONFIG_T
216
- #undef DEFINE_ITEMS_INVOC_T
217
- #undef DEFINE_VIRTUAL_WG_T
199
+ #undef SELECT
200
+ #undef MAX
201
+ #undef ITEMS_PER_INVOC
202
+ #undef VIRTUAL_WG_SIZE
218
203
#undef DEFINE_ASSIGN
219
- return retval;
220
204
}
221
205
222
206
#define DEFINE_ASSIGN (TYPE,ID,...) TYPE ID;
0 commit comments