Skip to content

Commit fc3479e

Browse files
committed
Folder Path for Kernels + Corrected Padding
1 parent 5ae2db9 commit fc3479e

File tree

3 files changed

+30
-18
lines changed

3 files changed

+30
-18
lines changed

examples_tests/49.ComputeFFT/main.cpp

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ static inline DispatchInfo_t getDispatchInfo_Convolution(
178178

179179

180180
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] =
182182
{
183183
{
184184
ISpecializedShader::ESS_COMPUTE,
@@ -188,6 +188,11 @@ static inline core::smart_refctd_ptr<video::IGPUPipelineLayout> getPipelineLayou
188188
{
189189
ISpecializedShader::ESS_COMPUTE,
190190
sizeof(uint32_t) * 4,
191+
sizeof(uint32_t) * 3
192+
},
193+
{
194+
ISpecializedShader::ESS_COMPUTE,
195+
sizeof(uint32_t) * 8,
191196
sizeof(uint32_t)
192197
},
193198
};
@@ -210,7 +215,7 @@ static inline core::smart_refctd_ptr<video::IGPUPipelineLayout> getPipelineLayou
210215
},
211216
};
212217

213-
core::SRange<const asset::SPushConstantRange> pcRange = {ranges, ranges+2};
218+
core::SRange<const asset::SPushConstantRange> pcRange = {ranges, ranges+3};
214219
core::SRange<const video::IGPUDescriptorSetLayout::SBinding> bindings = {bnd, bnd+sizeof(bnd)/sizeof(IGPUDescriptorSetLayout::SBinding)};;
215220

216221
return driver->createGPUPipelineLayout(
@@ -319,7 +324,7 @@ int main()
319324
IAssetLoader::SAssetLoadParams lp;
320325
auto srcImageBundle = am->getAsset("../../media/colorexr.exr", lp);
321326
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);
323328
auto kerCpuImg = IAsset::castDown<ICPUImage>(kerImageBundle.getContents().begin()[0]);
324329

325330
IGPUImage::SCreationParams srcImgInfo;
@@ -329,13 +334,13 @@ int main()
329334
smart_refctd_ptr<IGPUImageView> outImgView;
330335

331336
smart_refctd_ptr<IGPUImageView> srcImageView;
337+
IGPUImageView::SCreationParams srcImgViewInfo;
332338
{
333339
srcImgInfo = srcCpuImg->getCreationParameters();
334340

335341
auto srcGpuImages = driver->getGPUObjectsFromAssets(&srcCpuImg.get(),&srcCpuImg.get()+1);
336342
auto srcGpuImage = srcGpuImages->operator[](0u);
337343

338-
IGPUImageView::SCreationParams srcImgViewInfo;
339344
srcImgViewInfo.flags = static_cast<IGPUImageView::E_CREATE_FLAGS>(0u);
340345
srcImgViewInfo.image = std::move(srcGpuImage);
341346
srcImgViewInfo.viewType = IGPUImageView::ET_2D;
@@ -346,12 +351,6 @@ int main()
346351
srcImgViewInfo.subresourceRange.baseArrayLayer = 0;
347352
srcImgViewInfo.subresourceRange.layerCount = 1;
348353
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));
355354
}
356355
smart_refctd_ptr<IGPUImageView> kerImageView;
357356
{
@@ -382,11 +381,22 @@ int main()
382381
uint32_t srcNumChannels = getFormatChannelCount(srcFormat);
383382
uint32_t kerNumChannels = getFormatChannelCount(kerFormat);
384383
assert(srcNumChannels == kerNumChannels); // Just to make sure, because the other case is not handled in this example
385-
384+
386385
VkExtent3D paddedDim = padDimensionToNextPOT(srcDim, kerDim);
387-
388386
uint32_t maxPaddedDimensionSize = core::max(core::max(paddedDim.width, paddedDim.height), paddedDim.depth);
389387

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+
390400
auto fftGPUSpecializedShader_SSBOInput = FFTClass::createShader(driver, FFTClass::DataType::SSBO, maxPaddedDimensionSize);
391401
auto fftGPUSpecializedShader_ImageInput = FFTClass::createShader(driver, FFTClass::DataType::TEXTURE2D, maxPaddedDimensionSize);
392402

@@ -445,7 +455,7 @@ int main()
445455
auto removePaddingPipeline = driver->createGPUComputePipeline(nullptr, core::smart_refctd_ptr(removePaddingPipelineLayout), std::move(removePaddingShader));
446456
auto removePaddingDescriptorSet = driver->createGPUDescriptorSet(core::smart_refctd_ptr<const IGPUDescriptorSetLayout>(removePaddingPipelineLayout->getDescriptorSetLayout(0u)));
447457
updateDescriptorSet_RemovePadding(driver, removePaddingDescriptorSet.get(), fftOutputBuffer_2, outImgView);
448-
auto removePaddingDispatchInfo = getDispatchInfo_RemovePadding(srcDim);
458+
auto removePaddingDispatchInfo = getDispatchInfo_RemovePadding(outImageDim);
449459

450460
uint32_t outBufferIx = 0u;
451461
auto lastPresentStamp = std::chrono::high_resolution_clock::now();
@@ -507,7 +517,8 @@ int main()
507517
driver->bindComputePipeline(removePaddingPipeline.get());
508518
driver->bindDescriptorSets(EPBP_COMPUTE, removePaddingPipelineLayout.get(), 0u, 1u, &removePaddingDescriptorSet.get(), nullptr);
509519
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
511522
dispatchHelper_RemovePadding(driver, removePaddingDispatchInfo);
512523

513524
if(false == savedToFile) {

examples_tests/49.ComputeFFT/remove_padding.comp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,19 @@ layout(set=0, binding=1, rgba16f) uniform image2D outImage;
2121
layout(push_constant) uniform PushConstants
2222
{
2323
layout (offset = 0) uvec3 padded_dimension;
24-
layout (offset = 16) uint numChannels;
24+
layout (offset = 16) uvec3 kernel_dimension;
25+
layout (offset = 32) uint numChannels;
2526
} pc;
2627

2728
void main()
2829
{
2930
uvec2 dimension = imageSize(outImage);
3031
uvec2 padded_dimension = pc.padded_dimension.xy;
3132

32-
uint pad_left = (padded_dimension.x - dimension.x) / 2;
33-
uint pad_top = (padded_dimension.y - dimension.y) / 2;
33+
uint pad_left = pc.kernel_dimension.x / 2;
34+
uint pad_top = pc.kernel_dimension.y / 2;
3435
ivec2 coords = ivec2(gl_GlobalInvocationID.x, gl_GlobalInvocationID.y);
35-
ivec2 padded_coords = ivec2(gl_GlobalInvocationID.x, gl_GlobalInvocationID.y);
36+
ivec2 padded_coords = ivec2(pad_left + gl_GlobalInvocationID.x, pad_top + gl_GlobalInvocationID.y);
3637

3738
vec4 color_value = vec4(0, 0, 0, 0);
3839
for(uint c = 0; c < pc.numChannels; ++c) {

0 commit comments

Comments
 (0)