Skip to content

Commit 92709c5

Browse files
committed
Params packed
1 parent 2bba3b1 commit 92709c5

File tree

5 files changed

+54
-31
lines changed

5 files changed

+54
-31
lines changed

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

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,24 +65,26 @@ layout(set=_NBL_GLSL_EXT_FFT_OUTPUT_SET_DEFINED_, binding=_NBL_GLSL_EXT_FFT_OUTP
6565
//TODO: investigate why putting this uint between the 2 other uvec3's don't work
6666
layout(push_constant) uniform PushConstants
6767
{
68-
layout (offset = 0) uvec3 dimension;
69-
layout (offset = 16) uvec3 padded_dimension;
70-
layout (offset = 32) uint direction_isInverse_paddingType; // packed into a uint
68+
layout (offset = 0) nbl_glsl_ext_FFT_Parameters_t params;
69+
// layout (offset = 0) uvec3 dimension;
70+
// layout (offset = 16) uvec3 padded_dimension;
71+
// layout (offset = 32) uint direction_isInverse_paddingType; // packed into a uint
7172
} pc;
7273

7374
nbl_glsl_ext_FFT_Parameters_t nbl_glsl_ext_FFT_getParameters() {
7475
nbl_glsl_ext_FFT_Parameters_t ret;
75-
ret.dimension = pc.dimension;
76-
ret.direction_isInverse_paddingType = pc.direction_isInverse_paddingType;
77-
ret.padded_dimension = pc.padded_dimension;
76+
ret = pc.params;
77+
// ret.dimension = pc.dimension;
78+
// ret.direction_isInverse_paddingType = pc.direction_isInverse_paddingType;
79+
// ret.padded_dimension = pc.padded_dimension;
7880
return ret;
7981
}
8082

8183
nbl_glsl_complex nbl_glsl_ext_FFT_getData(in uvec3 coordinate, in uint channel)
8284
{
8385
nbl_glsl_complex retValue = nbl_glsl_complex(0, 0);
8486
#if USE_SSBO_FOR_INPUT > 0
85-
uvec3 dimension = pc.dimension;
87+
uvec3 dimension = nbl_glsl_ext_FFT_getDimensions();
8688
uint index = channel * (dimension.x * dimension.y * dimension.z) + coordinate.z * (dimension.x * dimension.y) + coordinate.y * (dimension.x) + coordinate.x;
8789
retValue = inData[index];
8890
#else
@@ -94,14 +96,14 @@ nbl_glsl_complex nbl_glsl_ext_FFT_getData(in uvec3 coordinate, in uint channel)
9496

9597
void nbl_glsl_ext_FFT_setData(in uvec3 coordinate, in uint channel, in nbl_glsl_complex complex_value)
9698
{
97-
uvec3 dimension = pc.padded_dimension;
99+
uvec3 dimension = nbl_glsl_ext_FFT_getPaddedDimensions();
98100
uint index = channel * (dimension.x * dimension.y * dimension.z) + coordinate.z * (dimension.x * dimension.y) + coordinate.y * (dimension.x) + coordinate.x;
99101
outData[index] = complex_value;
100102
}
101103

102104
nbl_glsl_complex nbl_glsl_ext_FFT_getPaddedData(in uvec3 coordinate, in uint channel) {
103105

104-
uvec3 max_coord = pc.dimension - uvec3(1u);
106+
uvec3 max_coord = nbl_glsl_ext_FFT_getDimensions() - uvec3(1u);
105107
uvec3 clamped_coord = min(coordinate, max_coord);
106108

107109
bool is_out_of_range = any(bvec3(coordinate!=clamped_coord));

include/nbl/builtin/glsl/ext/FFT/fft.glsl

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,17 +97,25 @@ nbl_glsl_complex nbl_glsl_ext_FFT_twiddleInverse(in uint threadId, in uint itera
9797
return nbl_glsl_complex_conjugate(nbl_glsl_ext_FFT_twiddle(threadId, iteration, logTwoN));
9898
}
9999

100+
uvec3 nbl_glsl_ext_FFT_getPaddedDimensions() {
101+
nbl_glsl_ext_FFT_Parameters_t params = nbl_glsl_ext_FFT_getParameters();
102+
return (params.padded_dimension.xyz);
103+
}
104+
uvec3 nbl_glsl_ext_FFT_getDimensions() {
105+
nbl_glsl_ext_FFT_Parameters_t params = nbl_glsl_ext_FFT_getParameters();
106+
return (params.dimension.xyz);
107+
}
100108
uint nbl_glsl_ext_FFT_getDirection() {
101109
nbl_glsl_ext_FFT_Parameters_t params = nbl_glsl_ext_FFT_getParameters();
102-
return (params.direction_isInverse_paddingType >> 16) & 0x000000ff;
110+
return (params.dimension.w >> 16) & 0x000000ff;
103111
}
104112
bool nbl_glsl_ext_FFT_getIsInverse() {
105113
nbl_glsl_ext_FFT_Parameters_t params = nbl_glsl_ext_FFT_getParameters();
106-
return bool((params.direction_isInverse_paddingType >> 8) & 0x000000ff);
114+
return bool((params.dimension.w >> 8) & 0x000000ff);
107115
}
108116
uint nbl_glsl_ext_FFT_getPaddingType() {
109117
nbl_glsl_ext_FFT_Parameters_t params = nbl_glsl_ext_FFT_getParameters();
110-
return (params.direction_isInverse_paddingType) & 0x000000ff;
118+
return (params.dimension.w) & 0x000000ff;
111119
}
112120

113121
uint nbl_glsl_ext_FFT_getChannel()
@@ -143,7 +151,7 @@ void nbl_glsl_ext_FFT()
143151
{
144152
nbl_glsl_ext_FFT_Parameters_t params = nbl_glsl_ext_FFT_getParameters();
145153
// Virtual Threads Calculation
146-
uint dataLength = nbl_glsl_ext_FFT_getDimLength(params.padded_dimension);
154+
uint dataLength = nbl_glsl_ext_FFT_getDimLength(nbl_glsl_ext_FFT_getPaddedDimensions());
147155
uint num_virtual_threads = (dataLength-1u)/(_NBL_GLSL_EXT_FFT_BLOCK_SIZE_X_DEFINED_)+1u;
148156
uint thread_offset = gl_LocalInvocationIndex;
149157

include/nbl/builtin/glsl/ext/FFT/parameters.glsl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77

88
struct nbl_glsl_ext_FFT_Parameters_t
99
{
10-
uvec3 dimension;
11-
uint direction_isInverse_paddingType; // packed into a uint
10+
uvec4 dimension; // settings packed into the w component
1211
uvec3 padded_dimension;
1312
};
1413

include/nbl/ext/FFT/FFT.h

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,29 @@
99
#include "nbl/video/IGPUShader.h"
1010
#include "nbl/asset/ICPUShader.h"
1111

12+
1213
namespace nbl
1314
{
1415
namespace ext
1516
{
1617
namespace FFT
1718
{
1819

20+
typedef uint32_t uint;
21+
struct uvec3 {
22+
uint x,y,z;
23+
};
24+
struct uvec4 {
25+
uint x,y,z,w;
26+
};
27+
#include "nbl/builtin/glsl/ext/FFT/parameters.glsl";
28+
1929
class FFT : public core::TotalInterface
2030
{
2131
public:
32+
struct Parameters_t : nbl_glsl_ext_FFT_Parameters_t {
33+
34+
};
2235

2336
enum class Direction : uint8_t {
2437
X = 0,
@@ -208,9 +221,20 @@ class FFT : public core::TotalInterface
208221

209222
uint32_t packed = (direction_u8 << 16u) | (isInverse_u8 << 8u) | paddingType_u8;
210223

211-
driver->pushConstants(pipelineLayout, nbl::video::IGPUSpecializedShader::ESS_COMPUTE, 0u, sizeof(uint32_t) * 3, &inputDimension);
212-
driver->pushConstants(pipelineLayout, nbl::video::IGPUSpecializedShader::ESS_COMPUTE, sizeof(uint32_t) * 4, sizeof(uint32_t) * 3, &paddedInputDimension);
213-
driver->pushConstants(pipelineLayout, nbl::video::IGPUSpecializedShader::ESS_COMPUTE, sizeof(uint32_t) * 8, sizeof(uint32_t), &packed);
224+
Parameters_t params = {};
225+
params.dimension.x = inputDimension.width;
226+
params.dimension.y = inputDimension.height;
227+
params.dimension.z = inputDimension.depth;
228+
params.dimension.w = packed;
229+
// params.direction_isInverse_paddingType = packed;
230+
params.padded_dimension.x = paddedInputDimension.width;
231+
params.padded_dimension.y = paddedInputDimension.height;
232+
params.padded_dimension.z = paddedInputDimension.depth;
233+
234+
driver->pushConstants(pipelineLayout, nbl::video::IGPUSpecializedShader::ESS_COMPUTE, 0u, sizeof(Parameters_t), &params);
235+
// driver->pushConstants(pipelineLayout, nbl::video::IGPUSpecializedShader::ESS_COMPUTE, 0u, sizeof(uint32_t) * 3, &inputDimension);
236+
// driver->pushConstants(pipelineLayout, nbl::video::IGPUSpecializedShader::ESS_COMPUTE, sizeof(uint32_t) * 4, sizeof(uint32_t) * 3, &paddedInputDimension);
237+
// driver->pushConstants(pipelineLayout, nbl::video::IGPUSpecializedShader::ESS_COMPUTE, sizeof(uint32_t) * 8, sizeof(uint32_t), &packed);
214238
}
215239

216240
// Kernel Normalization

src/nbl/ext/FFT/FFT.cpp

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,15 @@ using namespace ext::FFT;
1414

1515
core::SRange<const asset::SPushConstantRange> FFT::getDefaultPushConstantRanges()
1616
{
17-
static const asset::SPushConstantRange ranges[3] =
17+
static const asset::SPushConstantRange ranges[1] =
1818
{
1919
{
2020
ISpecializedShader::ESS_COMPUTE,
2121
0u,
22-
sizeof(uint32_t) * 3
23-
},
24-
{
25-
ISpecializedShader::ESS_COMPUTE,
26-
sizeof(uint32_t) * 4,
27-
sizeof(uint32_t) * 3
28-
},
29-
{
30-
ISpecializedShader::ESS_COMPUTE,
31-
sizeof(uint32_t) * 8,
32-
sizeof(uint32_t)
22+
sizeof(Parameters_t)
3323
},
3424
};
35-
return {ranges, ranges+3};
25+
return {ranges, ranges+1};
3626
}
3727

3828
core::SRange<const video::IGPUDescriptorSetLayout::SBinding> FFT::getDefaultBindings(video::IVideoDriver* driver, DataType inputType)

0 commit comments

Comments
 (0)