Skip to content

Commit 06f12fd

Browse files
Fix wrapping
A) Nvidia has a driver bug with fallthroughs in switches B) proper % operator does not exist in GLSL
1 parent 1101988 commit 06f12fd

File tree

4 files changed

+22
-12
lines changed

4 files changed

+22
-12
lines changed

examples_tests/49.ComputeFFT/fft_convolve_ifft.comp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ void main()
5050
{
5151
const uint tid = (t<<_NBL_GLSL_WORKGROUP_SIZE_LOG2_)|gl_LocalInvocationIndex;
5252
const uint trueDim = nbl_glsl_ext_FFT_Parameters_t_getDimensions()[nbl_glsl_ext_FFT_Parameters_t_getDirection()];
53-
nbl_glsl_ext_FFT_impl_values[t] = nbl_glsl_ext_FFT_getPaddedData(ivec3(nbl_glsl_ext_FFT_getCoordinates(tid)),ch);
53+
nbl_glsl_ext_FFT_impl_values[t] = nbl_glsl_ext_FFT_getPaddedData(nbl_glsl_ext_FFT_getPaddedCoordinates(tid,log2FFTSize,trueDim),ch);
5454
}
5555
nbl_glsl_ext_FFT_preloaded(false,log2FFTSize);
5656
barrier();

examples_tests/49.ComputeFFT/last_fft.comp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ layout(set=0, binding=1, rgba16f) uniform image2D outImage;
88
void nbl_glsl_ext_FFT_setData(in uvec3 coordinate, in uint channel, in nbl_glsl_complex complex_value)
99
{
1010
// TODO PC
11-
const ivec2 padding = imageSize(outImage).x!=512u ? ivec2(384,/*664*/0):ivec2(0);
11+
const ivec2 padding = imageSize(outImage).x!=512u ? ivec2(384,664):ivec2(0);
1212
const ivec2 coords = ivec2(coordinate.xy)-padding;
1313

1414
if (all(lessThanEqual(ivec2(0),coords))&&all(greaterThan(imageSize(outImage),coords)))

examples_tests/49.ComputeFFT/main.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,12 +615,14 @@ int main()
615615
const auto passes = FFTClass::buildParameters(false,srcNumChannels,srcDim,fftPushConstants,fftDispatchInfo,fftPadding,paddedSrcDim);
616616
{
617617
fftPushConstants[2].input_dimensions = fftPushConstants[1].input_dimensions;
618+
fftPushConstants[2].input_dimensions.y = 2048u;
618619
{
619620
fftPushConstants[2].input_dimensions.w = fftPushConstants[0].input_dimensions.w^0x80000000u;
620621
fftPushConstants[2].input_strides = fftPushConstants[1].output_strides;
621622
fftPushConstants[2].output_strides = fftPushConstants[0].input_strides;
622623
}
623624
fftDispatchInfo[2] = fftDispatchInfo[0];
625+
fftDispatchInfo[2].workGroupCount[1] = 2048;
624626
}
625627
assert(passes==2);
626628

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

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -78,25 +78,33 @@ nbl_glsl_complex nbl_glsl_ext_FFT_getPaddedData(ivec3 coordinate, in uint channe
7878
const ivec3 max_coord = dimensions-ivec3(1u);
7979

8080
const ivec3 clamped_coord = clamp(coordinate,ivec3(0),max_coord);
81-
81+
8282
const uint paddingType = nbl_glsl_ext_FFT_Parameters_t_getPaddingType();
8383
switch (paddingType)
8484
{
85-
case _NBL_GLSL_EXT_FFT_PAD_CLAMP_TO_EDGE_:
86-
coordinate = clamped_coord;
87-
break;
8885
case _NBL_GLSL_EXT_FFT_PAD_CLAMP_TO_BORDER_:
8986
if (any(bvec3(coordinate!=clamped_coord)))
9087
return nbl_glsl_complex(0,0);
9188
coordinate = clamped_coord;
9289
break;
93-
case _NBL_GLSL_EXT_FFT_PAD_MIRROR_:
94-
const bvec3 flip = bvec3((coordinate/dimensions)&0x1u);
95-
coordinate %= dimensions;
96-
coordinate = mix(coordinate,max_coord-coordinate,flip);
90+
case _NBL_GLSL_EXT_FFT_PAD_CLAMP_TO_EDGE_:
91+
coordinate = clamped_coord;
9792
break;
98-
default:
99-
coordinate %= dimensions;
93+
case _NBL_GLSL_EXT_FFT_PAD_REPEAT_:
94+
{
95+
const ivec3 negMask = coordinate>>31u;
96+
const ivec3 d = ((coordinate^negMask)/dimensions)^negMask;
97+
coordinate = coordinate-d*dimensions;
98+
}
99+
break;
100+
case _NBL_GLSL_EXT_FFT_PAD_MIRROR_:
101+
{
102+
const ivec3 negMask = coordinate>>31u;
103+
const ivec3 d = ((coordinate^negMask)/dimensions)^negMask;
104+
coordinate = coordinate-d*dimensions;
105+
const bvec3 flip = bvec3(d&0x1);
106+
coordinate = mix(coordinate,max_coord-coordinate,flip);
107+
}
100108
break;
101109
}
102110

0 commit comments

Comments
 (0)