@@ -178,7 +178,7 @@ static inline DispatchInfo_t getDispatchInfo_Convolution(
178
178
179
179
180
180
static inline core::smart_refctd_ptr<video::IGPUPipelineLayout> getPipelineLayout_RemovePadding (video::IVideoDriver* driver) {
181
- static const asset::SPushConstantRange ranges[2 ] =
181
+ static const asset::SPushConstantRange ranges[3 ] =
182
182
{
183
183
{
184
184
ISpecializedShader::ESS_COMPUTE,
@@ -188,6 +188,11 @@ static inline core::smart_refctd_ptr<video::IGPUPipelineLayout> getPipelineLayou
188
188
{
189
189
ISpecializedShader::ESS_COMPUTE,
190
190
sizeof (uint32_t ) * 4 ,
191
+ sizeof (uint32_t ) * 3
192
+ },
193
+ {
194
+ ISpecializedShader::ESS_COMPUTE,
195
+ sizeof (uint32_t ) * 8 ,
191
196
sizeof (uint32_t )
192
197
},
193
198
};
@@ -210,7 +215,7 @@ static inline core::smart_refctd_ptr<video::IGPUPipelineLayout> getPipelineLayou
210
215
},
211
216
};
212
217
213
- core::SRange<const asset::SPushConstantRange> pcRange = {ranges, ranges+2 };
218
+ core::SRange<const asset::SPushConstantRange> pcRange = {ranges, ranges+3 };
214
219
core::SRange<const video::IGPUDescriptorSetLayout::SBinding> bindings = {bnd, bnd+sizeof (bnd)/sizeof (IGPUDescriptorSetLayout::SBinding)};;
215
220
216
221
return driver->createGPUPipelineLayout (
@@ -319,7 +324,7 @@ int main()
319
324
IAssetLoader::SAssetLoadParams lp;
320
325
auto srcImageBundle = am->getAsset (" ../../media/colorexr.exr" , lp);
321
326
auto srcCpuImg = IAsset::castDown<ICPUImage>(srcImageBundle.getContents ().begin ()[0 ]);
322
- auto kerImageBundle = am->getAsset (" ../../media/gaussian_kernel_21x21.exr" , lp);
327
+ auto kerImageBundle = am->getAsset (" ../../media/kernels/ gaussian_kernel_21x21.exr" , lp);
323
328
auto kerCpuImg = IAsset::castDown<ICPUImage>(kerImageBundle.getContents ().begin ()[0 ]);
324
329
325
330
IGPUImage::SCreationParams srcImgInfo;
@@ -329,13 +334,13 @@ int main()
329
334
smart_refctd_ptr<IGPUImageView> outImgView;
330
335
331
336
smart_refctd_ptr<IGPUImageView> srcImageView;
337
+ IGPUImageView::SCreationParams srcImgViewInfo;
332
338
{
333
339
srcImgInfo = srcCpuImg->getCreationParameters ();
334
340
335
341
auto srcGpuImages = driver->getGPUObjectsFromAssets (&srcCpuImg.get (),&srcCpuImg.get ()+1 );
336
342
auto srcGpuImage = srcGpuImages->operator [](0u );
337
343
338
- IGPUImageView::SCreationParams srcImgViewInfo;
339
344
srcImgViewInfo.flags = static_cast <IGPUImageView::E_CREATE_FLAGS>(0u );
340
345
srcImgViewInfo.image = std::move (srcGpuImage);
341
346
srcImgViewInfo.viewType = IGPUImageView::ET_2D;
@@ -346,12 +351,6 @@ int main()
346
351
srcImgViewInfo.subresourceRange .baseArrayLayer = 0 ;
347
352
srcImgViewInfo.subresourceRange .layerCount = 1 ;
348
353
srcImageView = driver->createGPUImageView (IGPUImageView::SCreationParams (srcImgViewInfo));
349
-
350
- outImg = driver->createDeviceLocalGPUImageOnDedMem (std::move (srcImgInfo));
351
-
352
- srcImgViewInfo.image = outImg;
353
- srcImgViewInfo.format = srcImgInfo.format ;
354
- outImgView = driver->createGPUImageView (IGPUImageView::SCreationParams (srcImgViewInfo));
355
354
}
356
355
smart_refctd_ptr<IGPUImageView> kerImageView;
357
356
{
@@ -382,11 +381,22 @@ int main()
382
381
uint32_t srcNumChannels = getFormatChannelCount (srcFormat);
383
382
uint32_t kerNumChannels = getFormatChannelCount (kerFormat);
384
383
assert (srcNumChannels == kerNumChannels); // Just to make sure, because the other case is not handled in this example
385
-
384
+
386
385
VkExtent3D paddedDim = padDimensionToNextPOT (srcDim, kerDim);
387
-
388
386
uint32_t maxPaddedDimensionSize = core::max (core::max (paddedDim.width , paddedDim.height ), paddedDim.depth );
389
387
388
+ VkExtent3D outImageDim = srcDim;
389
+
390
+ // Create Out Image
391
+ {
392
+ srcImgInfo.extent = outImageDim;
393
+ outImg = driver->createDeviceLocalGPUImageOnDedMem (std::move (srcImgInfo));
394
+
395
+ srcImgViewInfo.image = outImg;
396
+ srcImgViewInfo.format = srcImgInfo.format ;
397
+ outImgView = driver->createGPUImageView (IGPUImageView::SCreationParams (srcImgViewInfo));
398
+ }
399
+
390
400
auto fftGPUSpecializedShader_SSBOInput = FFTClass::createShader (driver, FFTClass::DataType::SSBO, maxPaddedDimensionSize);
391
401
auto fftGPUSpecializedShader_ImageInput = FFTClass::createShader (driver, FFTClass::DataType::TEXTURE2D, maxPaddedDimensionSize);
392
402
@@ -445,7 +455,7 @@ int main()
445
455
auto removePaddingPipeline = driver->createGPUComputePipeline (nullptr , core::smart_refctd_ptr (removePaddingPipelineLayout), std::move (removePaddingShader));
446
456
auto removePaddingDescriptorSet = driver->createGPUDescriptorSet (core::smart_refctd_ptr<const IGPUDescriptorSetLayout>(removePaddingPipelineLayout->getDescriptorSetLayout (0u )));
447
457
updateDescriptorSet_RemovePadding (driver, removePaddingDescriptorSet.get (), fftOutputBuffer_2, outImgView);
448
- auto removePaddingDispatchInfo = getDispatchInfo_RemovePadding (srcDim );
458
+ auto removePaddingDispatchInfo = getDispatchInfo_RemovePadding (outImageDim );
449
459
450
460
uint32_t outBufferIx = 0u ;
451
461
auto lastPresentStamp = std::chrono::high_resolution_clock::now ();
@@ -507,7 +517,8 @@ int main()
507
517
driver->bindComputePipeline (removePaddingPipeline.get ());
508
518
driver->bindDescriptorSets (EPBP_COMPUTE, removePaddingPipelineLayout.get (), 0u , 1u , &removePaddingDescriptorSet.get (), nullptr );
509
519
driver->pushConstants (removePaddingPipelineLayout.get (), nbl::video::IGPUSpecializedShader::ESS_COMPUTE, 0u , sizeof (uint32_t ) * 3 , &paddedDim); // pc.numChannels
510
- driver->pushConstants (removePaddingPipelineLayout.get (), nbl::video::IGPUSpecializedShader::ESS_COMPUTE, sizeof (uint32_t ) * 4 , sizeof (uint32_t ), &srcNumChannels); // numSrcChannels
520
+ driver->pushConstants (removePaddingPipelineLayout.get (), nbl::video::IGPUSpecializedShader::ESS_COMPUTE, sizeof (uint32_t ) * 4 , sizeof (uint32_t ) * 3 , &kerDim); // numSrcChannels
521
+ driver->pushConstants (removePaddingPipelineLayout.get (), nbl::video::IGPUSpecializedShader::ESS_COMPUTE, sizeof (uint32_t ) * 8 , sizeof (uint32_t ), &srcNumChannels); // numSrcChannels
511
522
dispatchHelper_RemovePadding (driver, removePaddingDispatchInfo);
512
523
513
524
if (false == savedToFile) {
0 commit comments