@@ -27,11 +27,11 @@ struct MemoryAdaptor
27
27
template<typename Scalar>
28
28
void get (const uint ix, NBL_REF_ARG (Scalar) value) { accessor.get (ix, value);}
29
29
template<typename Scalar>
30
- void get (const uint ix, NBL_REF_ARG (vector <Scalar, 2 >) value) { accessor.get (ix, value.x), accessor.get (ix + _NBL_HLSL_WORKGROUP_SIZE_ , value.y);}
30
+ void get (const uint ix, NBL_REF_ARG (vector <Scalar, 2 >) value) { accessor.get (ix, value.x), accessor.get (ix + Stride , value.y);}
31
31
template<typename Scalar>
32
- void get (const uint ix, NBL_REF_ARG (vector <Scalar, 3 >) value) { accessor.get (ix, value.x), accessor.get (ix + _NBL_HLSL_WORKGROUP_SIZE_ , value.y), accessor.get (ix + 2 * _NBL_HLSL_WORKGROUP_SIZE_ , value.z);}
32
+ void get (const uint ix, NBL_REF_ARG (vector <Scalar, 3 >) value) { accessor.get (ix, value.x), accessor.get (ix + Stride , value.y), accessor.get (ix + 2 * Stride , value.z);}
33
33
template<typename Scalar>
34
- void get (const uint ix, NBL_REF_ARG (vector <Scalar, 4 >) value) { accessor.get (ix, value.x), accessor.get (ix + _NBL_HLSL_WORKGROUP_SIZE_ , value.y), accessor.get (ix + 2 * _NBL_HLSL_WORKGROUP_SIZE_ , value.z), accessor.get (ix + 3 * _NBL_HLSL_WORKGROUP_SIZE_ , value.w);}
34
+ void get (const uint ix, NBL_REF_ARG (vector <Scalar, 4 >) value) { accessor.get (ix, value.x), accessor.get (ix + Stride , value.y), accessor.get (ix + 2 * Stride , value.z), accessor.get (ix + 3 * Stride , value.w);}
35
35
36
36
template<typename Scalar>
37
37
void set (const uint ix, const Scalar value) {accessor.set (ix, value);}
@@ -41,13 +41,13 @@ struct MemoryAdaptor
41
41
accessor.set (ix + Stride, value.y);
42
42
}
43
43
template<typename Scalar>
44
- void set (const uint ix, const <Scalar, 3 > value) {
44
+ void set (const uint ix, const vector <Scalar, 3 > value) {
45
45
accessor.set (ix, value.x);
46
46
accessor.set (ix + Stride, value.y);
47
47
accessor.set (ix + 2 * Stride, value.z);
48
48
}
49
49
template<typename Scalar>
50
- void set (const uint ix, const <Scalar, 4 > value) {
50
+ void set (const uint ix, const vector <Scalar, 4 > value) {
51
51
accessor.set (ix, value.x);
52
52
accessor.set (ix + Stride, value.y);
53
53
accessor.set (ix + 2 * Stride, value.z);
@@ -109,75 +109,37 @@ struct MemoryAdaptor<BaseAccessor, 0>
109
109
{
110
110
BaseAccessor accessor;
111
111
uint32_t stride;
112
-
113
- // TODO: template all get,set, atomic... then add static_asserts of `has_method<BaseAccessor,signature>::value`, do vectors and matrices in terms of each other
114
- uint get (const uint ix) { return accessor.get (ix); }
115
- void get (const uint ix, NBL_REF_ARG (uint ) value) { value = accessor.get (ix);}
116
- void get (const uint ix, NBL_REF_ARG (uint2 ) value) { value = uint2 (accessor.get (ix), accessor.get (ix + stride));}
117
- void get (const uint ix, NBL_REF_ARG (uint3 ) value) { value = uint3 (accessor.get (ix), accessor.get (ix + stride), accessor.get (ix + 2 * stride));}
118
- void get (const uint ix, NBL_REF_ARG (uint4 ) value) { value = uint4 (accessor.get (ix), accessor.get (ix + stride), accessor.get (ix + 2 * stride), accessor.get (ix + 3 * stride));}
119
-
120
- void get (const uint ix, NBL_REF_ARG (int ) value) { value = asint (accessor.get (ix));}
121
- void get (const uint ix, NBL_REF_ARG (int2 ) value) { value = asint (uint2 (accessor.get (ix), accessor.get (ix + stride)));}
122
- void get (const uint ix, NBL_REF_ARG (int3 ) value) { value = asint (uint3 (accessor.get (ix), accessor.get (ix + stride), accessor.get (ix + 2 * stride)));}
123
- void get (const uint ix, NBL_REF_ARG (int4 ) value) { value = asint (uint4 (accessor.get (ix), accessor.get (ix + stride), accessor.get (ix + 2 * stride), accessor.get (ix + 3 * stride)));}
124
-
125
- void get (const uint ix, NBL_REF_ARG (float ) value) { value = asfloat (accessor.get (ix));}
126
- void get (const uint ix, NBL_REF_ARG (float2 ) value) { value = asfloat (uint2 (accessor.get (ix), accessor.get (ix + stride)));}
127
- void get (const uint ix, NBL_REF_ARG (float3 ) value) { value = asfloat (uint3 (accessor.get (ix), accessor.get (ix + stride), accessor.get (ix + 2 * stride)));}
128
- void get (const uint ix, NBL_REF_ARG (float4 ) value) { value = asfloat (uint4 (accessor.get (ix), accessor.get (ix + stride), accessor.get (ix + 2 * stride), accessor.get (ix + 3 * stride)));}
112
+
113
+ template<typename Scalar>
114
+ void get (const uint ix, NBL_REF_ARG (Scalar) value) { accessor.get (ix, value);}
115
+ template<typename Scalar>
116
+ void get (const uint ix, NBL_REF_ARG (vector <Scalar, 2 >) value) { accessor.get (ix, value.x), accessor.get (ix + stride, value.y);}
117
+ template<typename Scalar>
118
+ void get (const uint ix, NBL_REF_ARG (vector <Scalar, 3 >) value) { accessor.get (ix, value.x), accessor.get (ix + stride, value.y), accessor.get (ix + 2 * stride, value.z);}
119
+ template<typename Scalar>
120
+ void get (const uint ix, NBL_REF_ARG (vector <Scalar, 4 >) value) { accessor.get (ix, value.x), accessor.get (ix + stride, value.y), accessor.get (ix + 2 * stride, value.z), accessor.get (ix + 3 * stride, value.w);}
129
121
130
- void set (const uint ix, const uint value) {accessor.set (ix, value);}
131
- void set (const uint ix, const uint2 value) {
122
+ template<typename Scalar>
123
+ void set (const uint ix, const Scalar value) {accessor.set (ix, value);}
124
+ template<typename Scalar>
125
+ void set (const uint ix, const vector <Scalar, 2 > value) {
132
126
accessor.set (ix, value.x);
133
127
accessor.set (ix + stride, value.y);
134
128
}
135
- void set (const uint ix, const uint3 value) {
129
+ template<typename Scalar>
130
+ void set (const uint ix, const vector <Scalar, 3 > value) {
136
131
accessor.set (ix, value.x);
137
132
accessor.set (ix + stride, value.y);
138
133
accessor.set (ix + 2 * stride, value.z);
139
134
}
140
- void set (const uint ix, const uint4 value) {
135
+ template<typename Scalar>
136
+ void set (const uint ix, const vector <Scalar, 4 > value) {
141
137
accessor.set (ix, value.x);
142
138
accessor.set (ix + stride, value.y);
143
139
accessor.set (ix + 2 * stride, value.z);
144
140
accessor.set (ix + 3 * stride, value.w);
145
141
}
146
142
147
- void set (const uint ix, const int value) {accessor.set (ix, asuint (value));}
148
- void set (const uint ix, const int2 value) {
149
- accessor.set (ix, asuint (value.x));
150
- accessor.set (ix + stride, asuint (value.y));
151
- }
152
- void set (const uint ix, const int3 value) {
153
- accessor.set (ix, asuint (value.x));
154
- accessor.set (ix + stride, asuint (value.y));
155
- accessor.set (ix + 2 * stride, asuint (value.z));
156
- }
157
- void set (const uint ix, const int4 value) {
158
- accessor.set (ix, asuint (value.x));
159
- accessor.set (ix + stride, asuint (value.y));
160
- accessor.set (ix + 2 * stride, asuint (value.z));
161
- accessor.set (ix + 3 * stride, asuint (value.w));
162
- }
163
-
164
- void set (const uint ix, const float value) {accessor.set (ix, asuint (value));}
165
- void set (const uint ix, const float2 value) {
166
- accessor.set (ix, asuint (value.x));
167
- accessor.set (ix + stride, asuint (value.y));
168
- }
169
- void set (const uint ix, const float3 value) {
170
- accessor.set (ix, asuint (value.x));
171
- accessor.set (ix + stride, asuint (value.y));
172
- accessor.set (ix + 2 * stride, asuint (value.z));
173
- }
174
- void set (const uint ix, const float4 value) {
175
- accessor.set (ix, asuint (value.x));
176
- accessor.set (ix + stride, asuint (value.y));
177
- accessor.set (ix + 2 * stride, asuint (value.z));
178
- accessor.set (ix + 3 * stride, asuint (value.w));
179
- }
180
-
181
143
void atomicAnd (const uint ix, const uint value, NBL_REF_ARG (uint ) orig) {
182
144
orig = accessor.atomicAnd (ix, value);
183
145
}
@@ -229,29 +191,33 @@ struct MemoryAdaptor<BaseAccessor, 0>
229
191
230
192
// ---------------------------------------------- Offset Accessor ----------------------------------------------------
231
193
232
- template<class BaseAccessor, class AccessorType, uint32_t Offset>
194
+ template<class BaseAccessor, uint32_t Offset>
233
195
struct OffsetAccessor
234
196
{
235
197
BaseAccessor accessor;
236
198
237
- void set (uint32_t idx, NBL_REF_ARG (AccessorType) x) {accessor.set (idx + Offset, x);}
199
+ template <typename T>
200
+ void set (uint32_t idx, T value) {accessor.set (idx + Offset, value);}
238
201
239
- AccessorType get (uint32_t idx) {return accessor.get (idx + Offset);}
202
+ template <typename T>
203
+ void get (uint32_t idx, NBL_REF_ARG (T) value) {accessor.get (idx + Offset, value);}
240
204
241
205
// TODO: figure out the `enable_if` syntax for this
242
206
void workgroupExecutionAndMemoryBarrier () {accessor.workgroupExecutionAndMemoryBarrier ();}
243
207
};
244
208
245
209
// Dynamic offset version
246
- template<class BaseAccessor, class AccessorType >
210
+ template<class BaseAccessor>
247
211
struct DynamicOffsetAccessor
248
212
{
249
213
BaseAccessor accessor;
250
214
uint32_t offset;
251
215
252
- void set (uint32_t idx, NBL_REF_ARG (AccessorType) x) {accessor.set (idx + offset, x);}
216
+ template <typename T>
217
+ void set (uint32_t idx, T value) {accessor.set (idx + offset, value);}
253
218
254
- AccessorType get (uint32_t idx) {return accessor.get (idx + offset);}
219
+ template <typename T>
220
+ void get (uint32_t idx, NBL_REF_ARG (T) value) {accessor.get (idx + offset, value);}
255
221
256
222
// TODO: figure out the `enable_if` syntax for this
257
223
void workgroupExecutionAndMemoryBarrier () {accessor.workgroupExecutionAndMemoryBarrier ();}
0 commit comments