@@ -71,35 +71,42 @@ R"===(#version 430 core
71
71
inline void updateDescriptorSet_Convolution (
72
72
video::IVideoDriver * driver,
73
73
video::IGPUDescriptorSet * set,
74
- core::smart_refctd_ptr<video::IGPUBuffer> inputOutputBufferDescriptor,
74
+ core::smart_refctd_ptr<video::IGPUBuffer> inputBufferDescriptor,
75
+ core::smart_refctd_ptr<video::IGPUBuffer> outputBufferDescriptor,
75
76
const core::smart_refctd_ptr<video::IGPUImageView>* kernelNormalizedSpectrumImageDescriptors)
76
77
{
77
- constexpr uint32_t descCount = 2u ;
78
- video::IGPUDescriptorSet::SDescriptorInfo pInfos[1u +channelCountOverride];
78
+ constexpr uint32_t descCount = 3u ;
79
+ video::IGPUDescriptorSet::SDescriptorInfo pInfos[descCount- 1u +channelCountOverride];
79
80
video::IGPUDescriptorSet::SWriteDescriptorSet pWrites[descCount];
80
81
81
82
for (auto i = 0 ; i < descCount; i++)
82
83
{
84
+ pWrites[i].binding = i;
83
85
pWrites[i].dstSet = set;
84
86
pWrites[i].arrayElement = 0u ;
85
87
pWrites[i].info = pInfos+i;
86
88
}
87
89
88
- // InputOutput Buffer
89
- pWrites[0 ].binding = 0 ;
90
+ // Input Buffer
90
91
pWrites[0 ].descriptorType = asset::EDT_STORAGE_BUFFER;
91
92
pWrites[0 ].count = 1 ;
92
- pInfos[0 ].desc = inputOutputBufferDescriptor ;
93
- pInfos[0 ].buffer .size = inputOutputBufferDescriptor ->getSize ();
93
+ pInfos[0 ].desc = inputBufferDescriptor ;
94
+ pInfos[0 ].buffer .size = inputBufferDescriptor ->getSize ();
94
95
pInfos[0 ].buffer .offset = 0u ;
96
+
97
+ //
98
+ pWrites[1 ].descriptorType = asset::EDT_STORAGE_BUFFER;
99
+ pWrites[1 ].count = 1 ;
100
+ pInfos[1 ].desc = outputBufferDescriptor;
101
+ pInfos[1 ].buffer .size = outputBufferDescriptor->getSize ();
102
+ pInfos[1 ].buffer .offset = 0u ;
95
103
96
104
// Kernel Buffer
97
- pWrites[1 ].binding = 1 ;
98
- pWrites[1 ].descriptorType = asset::EDT_COMBINED_IMAGE_SAMPLER;
99
- pWrites[1 ].count = channelCountOverride;
105
+ pWrites[2 ].descriptorType = asset::EDT_COMBINED_IMAGE_SAMPLER;
106
+ pWrites[2 ].count = channelCountOverride;
100
107
for (uint32_t i=0u ; i<channelCountOverride; i++)
101
108
{
102
- auto & info = pInfos[1u +i];
109
+ auto & info = pInfos[2u +i];
103
110
info.desc = kernelNormalizedSpectrumImageDescriptors[i];
104
111
// info.image.imageLayout = ;
105
112
info.image .sampler = nullptr ;
@@ -330,6 +337,13 @@ int main()
330
337
},
331
338
{
332
339
1u ,
340
+ EDT_STORAGE_BUFFER,
341
+ 1u ,
342
+ ISpecializedShader::ESS_COMPUTE,
343
+ nullptr
344
+ },
345
+ {
346
+ 2u ,
333
347
EDT_COMBINED_IMAGE_SAMPLER,
334
348
channelCountOverride,
335
349
ISpecializedShader::ESS_COMPUTE,
@@ -579,11 +593,11 @@ int main()
579
593
580
594
// Convolution
581
595
auto convolveDescriptorSet = driver->createGPUDescriptorSet (core::smart_refctd_ptr<const IGPUDescriptorSetLayout>(convolvePipeline->getLayout ()->getDescriptorSetLayout (0u )));
582
- updateDescriptorSet_Convolution (driver, convolveDescriptorSet.get (), fftOutputBuffer_0, kernelNormalizedSpectrums);
596
+ updateDescriptorSet_Convolution (driver, convolveDescriptorSet.get (), fftOutputBuffer_0, fftOutputBuffer_1, kernelNormalizedSpectrums);
583
597
584
598
// Last IFFTX
585
599
auto lastFFTDescriptorSet = driver->createGPUDescriptorSet (core::smart_refctd_ptr<const IGPUDescriptorSetLayout>(lastFFTPipeline->getLayout ()->getDescriptorSetLayout (0u )));
586
- updateDescriptorSet_LastFFT (driver, lastFFTDescriptorSet.get (), fftOutputBuffer_0 , outImgView);
600
+ updateDescriptorSet_LastFFT (driver, lastFFTDescriptorSet.get (), fftOutputBuffer_1 , outImgView);
587
601
588
602
uint32_t outBufferIx = 0u ;
589
603
auto lastPresentStamp = std::chrono::high_resolution_clock::now ();
@@ -601,7 +615,9 @@ int main()
601
615
const auto passes = FFTClass::buildParameters (false ,srcNumChannels,srcDim,fftPushConstants,fftDispatchInfo,fftPadding,paddedSrcDim);
602
616
{
603
617
fftPushConstants[1 ].input_dimensions .x = 2048u ;
604
- fftPushConstants[1 ].output_strides = fftPushConstants[1 ].input_strides ;
618
+ fftPushConstants[1 ].input_strides = fftPushConstants[0 ].output_strides ;
619
+ fftPushConstants[1 ].output_strides .x = 2048u ;
620
+ fftPushConstants[1 ].output_strides .y = 1u ;
605
621
fftPushConstants[2 ] = fftPushConstants[0 ];
606
622
fftPushConstants[2 ].input_dimensions .x = 2048u ;
607
623
fftPushConstants[2 ].input_dimensions .y = 2048u ;
0 commit comments