VulkanFFT
VulkanFFT copied to clipboard
Clarification question on "void planVulkanFFTAxis(VulkanFFTPlan* vulkanFFTPlan, uint32_t axis)"
Hi Lichtso,
May I ask what the codes below are for?
void planVulkanFFTAxis(VulkanFFTPlan* vulkanFFTPlan, uint32_t axis) {
VulkanFFTAxis* vulkanFFTAxis = &vulkanFFTPlan->axes[axis];
{
vulkanFFTAxis->stageCount = 31-__builtin_clz(vulkanFFTAxis->sampleCount); // Logarithm of base 2
vulkanFFTAxis->stageRadix = (uint32_t*)malloc(sizeof(uint32_t) * vulkanFFTAxis->stageCount);
uint32_t stageSize = vulkanFFTAxis->sampleCount;
vulkanFFTAxis->stageCount = 0;
while(stageSize > 1) {
uint32_t radixIndex = SUPPORTED_RADIX_LEVELS;
do {
assert(radixIndex > 0);
--radixIndex;
vulkanFFTAxis->stageRadix[vulkanFFTAxis->stageCount] = 2<<radixIndex;
} while(stageSize % vulkanFFTAxis->stageRadix[vulkanFFTAxis->stageCount] > 0);
stageSize /= vulkanFFTAxis->stageRadix[vulkanFFTAxis->stageCount];
++vulkanFFTAxis->stageCount;
}
}
Thank you!
It takes uint32_t axis and vulkanFFTPlan->axes[axis].sampleCount as input and then calculates stageCount and stageRadix[] from that.
The "stages" refer to the iterations in this algorithm: https://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm