[[vk::binding(0, 0)]] StructuredBuffer input; [[vk::binding(1, 0)]] RWStructuredBuffer output; #define PI 3.1415926535897932384626433832795028841971f #define TAU 6.283185307179586476925286766559005768394f [shader("compute")] [numthreads(256, 1, 1)] void brute_force_dft(uint3 globalId : SV_DispatchThreadID) { uint input_len, input_stride; input.GetDimensions(input_len, input_stride); const float k = globalId.x; const float N = input_len; float phase_base = -TAU * k / N; float2 result = float2(0, 0); for (uint n = 0; n < input_len; n++) { float phase = phase_base * n; float re, im; sincos(phase, im, re); float2 x_n = input[n]; result += float2(x_n[0] * re - x_n[1] * im, x_n[0] * im + x_n[1] * re); } output[globalId.x] = result; }