You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Differentiate concepts for FFT based on ElementsPerInvocationLog2,
this allows the offset accessor passed in the bigger FFTs to pass the
concept requirements
- Minor change to the offset accessor, I think it follows the original
intent
Copy file name to clipboardExpand all lines: include/nbl/builtin/hlsl/workgroup/fft.hlsl
+8-9Lines changed: 8 additions & 9 deletions
Original file line number
Diff line number
Diff line change
@@ -274,19 +274,18 @@ template<bool Inverse, typename consteval_params_t, class device_capabilities=vo
274
274
struct FFT;
275
275
276
276
// For the FFT methods below, we assume:
277
-
// - Accessor is an accessor to an array fitting 2 * WorkgroupSize elements of type complex_t<Scalar>, used to get inputs / set outputs of the FFT,
278
-
// that is, one "lo" and one "hi" complex numbers per thread, essentially 4 Scalars per thread. If `ConstevalParameters::ElementsPerInvocationLog2 == 1`,
279
-
// the arrays it accesses with `get` and `set` can optionally be different, if you don't want the FFT to be done in-place. Otherwise, you MUST make it in-place
280
-
// (this is because if using more than 2 elements per invocation, we use the same array to store intermediate operations).
277
+
// - Accessor is an accessor to an array fitting ElementsPerInvocation * WorkgroupSize elements of type complex_t<Scalar>, used to get inputs / set outputs of the FFT.
278
+
// If `ConstevalParameters::ElementsPerInvocationLog2 == 1`, the arrays it accesses with `get` and `set` can optionally be different,
279
+
// if you don't want the FFT to be done in-place. Otherwise, you MUST make it in-place.
281
280
// The Accessor MUST provide the following methods:
// * void set(uint32_t index, in complex_t<Scalar> value);
284
283
// * void memoryBarrier();
285
284
// For it to work correctly, this memory barrier must use `AcquireRelease` semantics, with the proper flags set for the memory type.
286
-
// If using `ConstevalParameters::ElementsPerInvocationLog2 == 1` or otherwise not needing it (such as when using preloaded accessors) we still require the method to exist
287
-
// but you can just make it do nothing.
285
+
// If using `ConstevalParameters::ElementsPerInvocationLog2 == 1` the Accessor IS ALLOWED TO not provide this last method.
286
+
// If not needing it (such as when using preloaded accessors) we still require the method to exist but you can just make it do nothing.
288
287
289
-
// - SharedMemoryAccessor accesses a workgroup-shared memory array of size `2 * sizeof(Scalar) * WorkgroupSize`.
288
+
// - SharedMemoryAccessor accesses a workgroup-shared memory array of size `WorkgroupSize` elements of type complex_t<Scalar>.
290
289
// The SharedMemoryAccessor MUST provide the following methods:
0 commit comments