Skip to content

Commit 1ea023d

Browse files
committed
Last Changes :
+ FFT Inputs Channel and No for loop over channel in fft algorithm. + static function for padding in FFTClass + removed unused function
1 parent c94bbcb commit 1ea023d

File tree

9 files changed

+176
-229
lines changed

9 files changed

+176
-229
lines changed

examples_tests/49.ComputeFFT/fft_convolve_ifft.comp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,13 +98,20 @@ void convolve()
9898

9999
void main()
100100
{
101-
nbl_glsl_ext_FFT(nbl_glsl_ext_FFT_Parameters_t_getIsInverse()); // inoutData->inoutData
101+
const uint numChannels = nbl_glsl_ext_FFT_Parameters_t_getNumChannels();
102+
for(uint ch = 0u; ch < numChannels; ++ch)
103+
{
104+
nbl_glsl_ext_FFT(nbl_glsl_ext_FFT_Parameters_t_getIsInverse(), ch);
105+
}
102106

103107
barrier();
104108

105109
convolve(); // inoutData+kerData->inoutData
106110

107111
barrier();
108112

109-
nbl_glsl_ext_FFT(!nbl_glsl_ext_FFT_Parameters_t_getIsInverse()); // inoutData->inoutData
113+
for(uint ch = 0u; ch < numChannels; ++ch)
114+
{
115+
nbl_glsl_ext_FFT(!nbl_glsl_ext_FFT_Parameters_t_getIsInverse(), ch); // inoutData->inoutData
116+
}
110117
}

examples_tests/49.ComputeFFT/last_fft.comp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,11 @@ nbl_glsl_complex nbl_glsl_ext_FFT_getPaddedData(in uvec3 coordinate, in uint cha
8080

8181
void main()
8282
{
83-
nbl_glsl_ext_FFT(nbl_glsl_ext_FFT_Parameters_t_getIsInverse());
83+
const uint numChannels = nbl_glsl_ext_FFT_Parameters_t_getNumChannels();
84+
for(uint ch = 0u; ch < numChannels; ++ch)
85+
{
86+
nbl_glsl_ext_FFT(nbl_glsl_ext_FFT_Parameters_t_getIsInverse(), ch);
87+
}
8488
}
8589

8690
#endif

examples_tests/49.ComputeFFT/main.cpp

Lines changed: 10 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,6 @@ using namespace nbl::video;
2121
#include "nbl/core/math/intutil.h"
2222
#include "nbl/core/math/glslFunctions.h"
2323

24-
VkExtent3D padDimensionToNextPOT(VkExtent3D const & dimension, VkExtent3D const & minimum_dimension = VkExtent3D{ 0, 0, 0 }) {
25-
VkExtent3D ret = {};
26-
VkExtent3D extendedDim = dimension;
27-
28-
if(dimension.width < minimum_dimension.width) {
29-
extendedDim.width = minimum_dimension.width;
30-
}
31-
if(dimension.height < minimum_dimension.height) {
32-
extendedDim.height = minimum_dimension.height;
33-
}
34-
if(dimension.depth < minimum_dimension.depth) {
35-
extendedDim.depth = minimum_dimension.depth;
36-
}
37-
38-
ret.width = roundUpToPoT(extendedDim.width);
39-
ret.height = roundUpToPoT(extendedDim.height);
40-
ret.depth = roundUpToPoT(extendedDim.depth);
41-
42-
return ret;
43-
}
44-
4524
struct DispatchInfo_t
4625
{
4726
uint32_t workGroupDims[3];
@@ -86,8 +65,7 @@ static inline core::smart_refctd_ptr<video::IGPUPipelineLayout> getPipelineLayou
8665
static inline core::smart_refctd_ptr<video::IGPUSpecializedShader> createShader_Convolution(
8766
video::IVideoDriver* driver,
8867
IAssetManager* am,
89-
uint32_t maxDimensionSize,
90-
uint32_t maxNumChannels)
68+
uint32_t maxDimensionSize)
9169
{
9270
uint32_t const maxPaddedDimensionSize = core::roundUpToPoT(maxDimensionSize);
9371

@@ -97,7 +75,6 @@ R"===(#version 430 core
9775
#define _NBL_GLSL_EXT_FFT_WORKGROUP_SIZE_ %u
9876
#define _NBL_GLSL_EXT_FFT_MAX_DIM_SIZE_ %u
9977
#define _NBL_GLSL_EXT_FFT_MAX_ITEMS_PER_THREAD %u
100-
#define _NBL_GLSL_EXT_FFT_MAX_CHANNELS %u
10178
10279
#include "../fft_convolve_ifft.comp"
10380
@@ -112,8 +89,7 @@ R"===(#version 430 core
11289
reinterpret_cast<char*>(shader->getPointer()),shader->getSize(), sourceFmt,
11390
DEFAULT_WORK_GROUP_SIZE,
11491
maxPaddedDimensionSize,
115-
maxItemsPerThread,
116-
maxNumChannels
92+
maxItemsPerThread
11793
);
11894

11995
auto cpuSpecializedShader = core::make_smart_refctd_ptr<ICPUSpecializedShader>(
@@ -211,8 +187,7 @@ static inline core::smart_refctd_ptr<video::IGPUPipelineLayout> getPipelineLayou
211187
static inline core::smart_refctd_ptr<video::IGPUSpecializedShader> createShader_LastFFT(
212188
video::IVideoDriver* driver,
213189
IAssetManager* am,
214-
uint32_t maxDimensionSize,
215-
uint32_t maxNumChannels) {
190+
uint32_t maxDimensionSize) {
216191

217192
uint32_t const maxPaddedDimensionSize = core::roundUpToPoT(maxDimensionSize);
218193

@@ -222,8 +197,7 @@ R"===(#version 430 core
222197
#define _NBL_GLSL_EXT_FFT_WORKGROUP_SIZE_ %u
223198
#define _NBL_GLSL_EXT_FFT_MAX_DIM_SIZE_ %u
224199
#define _NBL_GLSL_EXT_FFT_MAX_ITEMS_PER_THREAD %u
225-
#define _NBL_GLSL_EXT_FFT_MAX_CHANNELS %u
226-
200+
227201
#include "../last_fft.comp"
228202
229203
)===";
@@ -237,8 +211,7 @@ R"===(#version 430 core
237211
reinterpret_cast<char*>(shader->getPointer()),shader->getSize(), sourceFmt,
238212
DEFAULT_WORK_GROUP_SIZE,
239213
maxPaddedDimensionSize,
240-
maxItemsPerThread,
241-
maxNumChannels
214+
maxItemsPerThread
242215
);
243216

244217
auto cpuSpecializedShader = core::make_smart_refctd_ptr<ICPUSpecializedShader>(
@@ -374,7 +347,7 @@ int main()
374347
uint32_t kerNumChannels = getFormatChannelCount(kerFormat);
375348
assert(srcNumChannels == kerNumChannels); // Just to make sure, because the other case is not handled in this example
376349

377-
VkExtent3D paddedDim = padDimensionToNextPOT(srcDim, kerDim);
350+
VkExtent3D paddedDim = FFTClass::padDimensionToNextPOT(srcDim, kerDim);
378351
uint32_t maxPaddedDimensionSize = core::max(core::max(paddedDim.width, paddedDim.height), paddedDim.depth);
379352

380353
VkExtent3D outImageDim = srcDim;
@@ -389,8 +362,8 @@ int main()
389362
outImgView = driver->createGPUImageView(IGPUImageView::SCreationParams(srcImgViewInfo));
390363
}
391364

392-
auto fftGPUSpecializedShader_SSBOInput = FFTClass::createShader(driver, FFTClass::DataType::SSBO, maxPaddedDimensionSize, srcNumChannels);
393-
auto fftGPUSpecializedShader_ImageInput = FFTClass::createShader(driver, FFTClass::DataType::TEXTURE2D, maxPaddedDimensionSize, srcNumChannels);
365+
auto fftGPUSpecializedShader_SSBOInput = FFTClass::createShader(driver, FFTClass::DataType::SSBO, maxPaddedDimensionSize);
366+
auto fftGPUSpecializedShader_ImageInput = FFTClass::createShader(driver, FFTClass::DataType::TEXTURE2D, maxPaddedDimensionSize);
394367
auto fftGPUSpecializedShader_KernelNormalization = FFTClass::createKernelNormalizationShader(driver, am);
395368

396369
auto fftPipelineLayout_SSBOInput = FFTClass::getDefaultPipelineLayout(driver, FFTClass::DataType::SSBO);
@@ -404,11 +377,11 @@ int main()
404377
auto fftDispatchInfo_Horizontal = FFTClass::buildParameters(paddedDim, FFTClass::Direction::X);
405378
auto fftDispatchInfo_Vertical = FFTClass::buildParameters(paddedDim, FFTClass::Direction::Y);
406379

407-
auto convolveShader = createShader_Convolution(driver, am, maxPaddedDimensionSize, srcNumChannels);
380+
auto convolveShader = createShader_Convolution(driver, am, maxPaddedDimensionSize);
408381
auto convolvePipelineLayout = getPipelineLayout_Convolution(driver);
409382
auto convolvePipeline = driver->createGPUComputePipeline(nullptr, core::smart_refctd_ptr(convolvePipelineLayout), std::move(convolveShader));
410383

411-
auto lastFFTShader = createShader_LastFFT(driver, am, maxPaddedDimensionSize, srcNumChannels);
384+
auto lastFFTShader = createShader_LastFFT(driver, am, maxPaddedDimensionSize);
412385
auto lastFFTPipelineLayout = getPipelineLayout_LastFFT(driver);
413386
auto lastFFTPipeline = driver->createGPUComputePipeline(nullptr, core::smart_refctd_ptr(lastFFTPipelineLayout), std::move(lastFFTShader));
414387

examples_tests/49.ComputeFFT/remove_padding.comp

Lines changed: 0 additions & 41 deletions
This file was deleted.

include/nbl/builtin/glsl/ext/FFT/default_compute_fft.comp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,11 @@ nbl_glsl_complex nbl_glsl_ext_FFT_getPaddedData(in uvec3 coordinate, in uint cha
124124

125125
void main()
126126
{
127-
nbl_glsl_ext_FFT(nbl_glsl_ext_FFT_Parameters_t_getIsInverse());
127+
const uint numChannels = nbl_glsl_ext_FFT_Parameters_t_getNumChannels();
128+
for(uint ch = 0u; ch < numChannels; ++ch)
129+
{
130+
nbl_glsl_ext_FFT(nbl_glsl_ext_FFT_Parameters_t_getIsInverse(), ch);
131+
}
128132
}
129133

130134
#endif

0 commit comments

Comments
 (0)