Skip to content

Commit 73e2537

Browse files
Use push constants for convoluton
1 parent ad5b850 commit 73e2537

File tree

3 files changed

+25
-12
lines changed

3 files changed

+25
-12
lines changed

examples_tests/49.ComputeFFT/convolve_parameters.glsl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
#include "nbl/builtin/glsl/ext/FFT/parameters_struct.glsl"
66
struct convolve_parameters_t
77
{
8-
nbl_glsl_ext_FFT_Parameters_t fft_params;
9-
vec2 bitreversed_to_normalized;
8+
nbl_glsl_ext_FFT_Parameters_t fft;
109
vec2 kernel_half_pixel_size;
1110
};

examples_tests/49.ComputeFFT/fft_convolve_ifft.comp

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,17 @@ layout(set=0, binding=0) buffer restrict InputOutputBuffer
1313
layout(set=0, binding=1) uniform sampler2D NormalizedKernel[3];
1414

1515
#include "convolve_parameters.glsl"
16+
layout(push_constant) uniform PushConstants
17+
{
18+
convolve_parameters_t params;
19+
} pc;
20+
#define _NBL_GLSL_EXT_FFT_PUSH_CONSTANTS_DEFINED_
21+
22+
nbl_glsl_ext_FFT_Parameters_t nbl_glsl_ext_FFT_getParameters()
23+
{
24+
return pc.params.fft;
25+
}
26+
#define _NBL_GLSL_EXT_FFT_GET_PARAMETERS_DEFINED_
1627

1728
#define inData inoutData
1829
#define outData inoutData
@@ -26,14 +37,11 @@ void convolve(in uint item_per_thread_count, in uint ch)
2637
{
2738
const uint tid = _NBL_GLSL_WORKGROUP_SIZE_*t+gl_LocalInvocationIndex;
2839

29-
// TODO: do push constants here
30-
uvec3 coords = nbl_glsl_ext_FFT_getCoordinates(tid);
31-
const uvec3 log2_size = uvec3(11u, 10u, 0u);
32-
coords = bitfieldReverse(coords)>>(uvec3(32u)-log2_size); // reverse_shifts
33-
3440
nbl_glsl_complex sourceSpectrum = nbl_glsl_ext_FFT_impl_values[t];
35-
36-
vec2 uv = (vec2(coords.xy))/vec2(uvec2(1u)<<log2_size.xy)+vec2(0.5f)/vec2(textureSize(NormalizedKernel[ch],0)); //kernel_half_pixel_size
41+
42+
// TODO: do push constants here
43+
const uvec3 coords = nbl_glsl_ext_FFT_getCoordinates(tid);
44+
vec2 uv = vec2(bitfieldReverse(coords.xy))/vec2(4294967296.f)+pc.params.kernel_half_pixel_size;
3745
//
3846
nbl_glsl_complex convSpectrum = textureLod(NormalizedKernel[ch],uv,0).xy;
3947
nbl_glsl_ext_FFT_impl_values[t] = nbl_glsl_complex_mul(sourceSpectrum,convSpectrum);

examples_tests/49.ComputeFFT/main.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -339,12 +339,11 @@ int main()
339339
}
340340
};
341341

342-
using FFTClass = ext::FFT::FFT;
343-
core::SRange<const asset::SPushConstantRange> pcRange = FFTClass::getDefaultPushConstantRanges();
342+
const asset::SPushConstantRange pcRange = {ISpecializedShader::ESS_COMPUTE,0u,sizeof(convolve_parameters_t)};
344343
core::SRange<const video::IGPUDescriptorSetLayout::SBinding> bindings = {bnd,bnd+sizeof(bnd)/sizeof(IGPUDescriptorSetLayout::SBinding)};
345344

346345
return driver->createGPUPipelineLayout(
347-
pcRange.begin(),pcRange.end(),
346+
&pcRange,&pcRange+1,
348347
driver->createGPUDescriptorSetLayout(bindings.begin(),bindings.end()),nullptr,nullptr,nullptr
349348
);
350349
}();
@@ -618,6 +617,13 @@ int main()
618617
// Src Image FFT Y + Convolution + Convolved IFFT Y
619618
driver->bindComputePipeline(convolvePipeline.get());
620619
driver->bindDescriptorSets(EPBP_COMPUTE, convolvePipeline->getLayout(), 0u, 1u, &convolveDescriptorSet.get(), nullptr);
620+
{
621+
const auto& kernelImgExtent = kernelNormalizedSpectrums[0]->getCreationParameters().image->getCreationParameters().extent;
622+
vec2 kernel_half_pixel_size{0.5f,0.5f};
623+
kernel_half_pixel_size.x /= kernelImgExtent.width;
624+
kernel_half_pixel_size.y /= kernelImgExtent.height;
625+
driver->pushConstants(convolvePipeline->getLayout(),ISpecializedShader::ESS_COMPUTE,offsetof(convolve_parameters_t,kernel_half_pixel_size),sizeof(convolve_parameters_t::kernel_half_pixel_size),&kernel_half_pixel_size);
626+
}
621627
FFTClass::dispatchHelper(driver, convolvePipeline->getLayout(), fftPushConstants[1], fftDispatchInfo[1]);
622628

623629
// Last FFT Padding and Copy to GPU Image

0 commit comments

Comments
 (0)