Skip to content

Commit 0aae4dc

Browse files
committed
Refactor
1 parent 3fba762 commit 0aae4dc

File tree

8 files changed

+34
-53
lines changed

8 files changed

+34
-53
lines changed

examples_tests/41.VisibilityBuffer/cull.comp

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,6 @@ layout(set=0, binding=2, std430, column_major) restrict buffer CubeMVPs
1818
mat4 cubeMVPs[];
1919
} cubeMvpBuff;
2020

21-
#define ENABLE_CUBE_COMMAND_BUFFER
22-
#define ENABLE_FRUSTUM_CULLED_COMMAND_BUFFER
23-
#define ENABLE_OCCLUSION_CULLED_COMMAND_BUFFER
24-
#define ENABLE_CUBE_DRAW_GUID_BUFFER
25-
#define ENABLE_OCCLUSION_DISPATCH_INDIRECT_BUFFER
26-
#define ENABLE_VISIBLE_BUFFER
27-
2821
#define CUBE_COMMAND_BUFF_SET 0
2922
#define CUBE_COMMAND_BUFF_BINDING 3
3023
#define FRUSTUM_CULLED_COMMAND_BUFF_SET 0
@@ -47,10 +40,19 @@ layout(push_constant, row_major) uniform PushConstants
4740
#include <nbl/builtin/glsl/utils/culling.glsl>
4841
#include <nbl/builtin/glsl/utils/transform.glsl>
4942

43+
bool unpackFreezeCullFlag(in uint packedVal)
44+
{
45+
return bool(packedVal >> 16u);
46+
}
47+
48+
uint unpackMaxBatchCount(in uint packedVal)
49+
{
50+
return packedVal & 0x0000FFFFu;
51+
}
5052

5153
void main()
5254
{
53-
if (gl_GlobalInvocationID.x >= pc.data.maxBatchCount)
55+
if (gl_GlobalInvocationID.x >= unpackMaxBatchCount(pc.data.freezeCullingAndMaxBatchCountPacked))
5456
return;
5557

5658
mvpBuff.mvps[gl_GlobalInvocationID.x] = pc.data.viewProjMatrix; // no model matrices
@@ -59,7 +61,7 @@ void main()
5961
const uint drawCommandGUID = batchCullData.drawCommandGUID;
6062
occlusionCommandBuff.draws[drawCommandGUID].instanceCount = 0;
6163

62-
if (bool(pc.data.freezeCulling))
64+
if (unpackFreezeCullFlag(pc.data.freezeCullingAndMaxBatchCountPacked))
6365
return;
6466

6567

examples_tests/41.VisibilityBuffer/main.cpp

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,7 @@ int main()
661661
params.CompareEnable = 0;
662662
auto sampler = driver->createGPUSampler(params);
663663

664-
IGPUDescriptorSetLayout::SBinding bindings[6];
664+
IGPUDescriptorSetLayout::SBinding bindings[5];
665665
bindings[0].binding = 0u;
666666
bindings[0].count = 1u;
667667
bindings[0].samplers = &sampler;
@@ -676,7 +676,7 @@ int main()
676676
bindings[1].stageFlags = ISpecializedShader::ESS_COMPUTE;
677677
bindings[1].type = EDT_STORAGE_IMAGE;
678678

679-
for (uint32_t i = 2u; i < 6u; i++)
679+
for (uint32_t i = 2u; i < 5u; i++)
680680
{
681681
bindings[i].binding = i;
682682
bindings[i].count = 1u;
@@ -688,7 +688,7 @@ int main()
688688
shadingDSLayout = driver->createGPUDescriptorSetLayout(bindings, bindings + sizeof(bindings) / sizeof(IGPUDescriptorSetLayout::SBinding));
689689
}
690690
{
691-
IGPUDescriptorSet::SDescriptorInfo infos[6];
691+
IGPUDescriptorSet::SDescriptorInfo infos[5];
692692
infos[0].desc = core::smart_refctd_ptr(visBufferView);
693693
//infos[0].image.imageLayout = ?;
694694
infos[0].image.sampler = nullptr; // used immutable in the layout
@@ -697,24 +697,20 @@ int main()
697697
infos[1].image.sampler = nullptr; // storage image
698698

699699
infos[2].buffer.offset = 0u;
700-
infos[2].buffer.size = sceneData.frustumCulledMdiBuffer->getSize();
701-
infos[2].desc = sceneData.frustumCulledMdiBuffer;
700+
infos[2].buffer.size = cullShaderData.visible->getSize();
701+
infos[2].desc = cullShaderData.visible;
702702

703703
infos[3].buffer.offset = 0u;
704-
infos[3].buffer.size = cullShaderData.visible->getSize();
705-
infos[3].desc = cullShaderData.visible;
704+
infos[3].buffer.size = cullShaderData.cubeCommandBuffer->getSize();
705+
infos[3].desc = cullShaderData.cubeCommandBuffer;
706706

707707
infos[4].buffer.offset = 0u;
708-
infos[4].buffer.size = cullShaderData.cubeCommandBuffer->getSize();
709-
infos[4].desc = cullShaderData.cubeCommandBuffer;
710-
711-
infos[5].buffer.offset = 0u;
712-
infos[5].buffer.size = cullShaderData.dispatchIndirect->getSize();
713-
infos[5].desc = cullShaderData.dispatchIndirect;
708+
infos[4].buffer.size = cullShaderData.dispatchIndirect->getSize();
709+
infos[4].desc = cullShaderData.dispatchIndirect;
714710

715711
sceneData.shadingDS = driver->createGPUDescriptorSet(smart_refctd_ptr(shadingDSLayout));
716-
IGPUDescriptorSet::SWriteDescriptorSet writes[6];
717-
for (auto i = 0u; i < 6u; i++)
712+
IGPUDescriptorSet::SWriteDescriptorSet writes[5];
713+
for (auto i = 0u; i < 5u; i++)
718714
{
719715
writes[i].dstSet = sceneData.shadingDS.get();
720716
writes[i].binding = i;
@@ -727,7 +723,6 @@ int main()
727723
writes[2].descriptorType = EDT_STORAGE_BUFFER;
728724
writes[3].descriptorType = EDT_STORAGE_BUFFER;
729725
writes[4].descriptorType = EDT_STORAGE_BUFFER;
730-
writes[5].descriptorType = EDT_STORAGE_BUFFER;
731726

732727
driver->updateDescriptorSets(sizeof(writes) / sizeof(IGPUDescriptorSet::SWriteDescriptorSet), writes, 0u, nullptr);
733728
}
@@ -1167,12 +1162,11 @@ int main()
11671162
cullPushConstants.worldCamPos.x = camPos.X;
11681163
cullPushConstants.worldCamPos.y = camPos.Y;
11691164
cullPushConstants.worldCamPos.z = camPos.Z;
1170-
cullPushConstants.maxBatchCount = cullShaderData.maxBatchCount;
1171-
cullPushConstants.freezeCulling = static_cast<uint32_t>(freezeCulling);
1165+
cullPushConstants.freezeCullingAndMaxBatchCountPacked = cullShaderData.maxBatchCount | (static_cast<uint32_t>(freezeCulling) << 16u);
11721166

11731167
driver->pushConstants(cullShaderData.cullPipeline->getLayout(), ISpecializedShader::ESS_COMPUTE, 0u, sizeof(CullShaderData_t), &cullPushConstants);
11741168

1175-
const uint32_t cullWorkGroups = (cullPushConstants.maxBatchCount - 1u) / WORKGROUP_SIZE + 1u;
1169+
const uint32_t cullWorkGroups = (cullShaderData.maxBatchCount - 1u) / WORKGROUP_SIZE + 1u;
11761170

11771171
driver->dispatch(cullWorkGroups, 1u, 1u);
11781172
};

examples_tests/41.VisibilityBuffer/occlusionCull.frag

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ layout(early_fragment_tests) in;
55

66
layout(location = 0) in flat uint instanceID;
77

8-
#define ENABLE_VISIBLE_BUFFER
98
#define VISIBLE_BUFF_SET 0
109
#define VISIBLE_BUFF_BINDING 0
1110
#include "occlusionCullingShaderCommon.glsl"

examples_tests/41.VisibilityBuffer/occlusionCull.vert

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#version 460 core
2-
#extension GL_EXT_shader_16bit_storage : require
32

43
layout(location = 0) in vec4 vMatRow0;
54
layout(location = 1) in vec4 vMatRow1;

examples_tests/41.VisibilityBuffer/occlusionCullMap.comp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@
55
#include "cullShaderCommon.h"
66
layout(local_size_x = WORKGROUP_SIZE) in;
77

8-
#define ENABLE_OCCLUSION_CULLED_COMMAND_BUFFER
9-
#define ENABLE_VISIBLE_BUFFER
10-
#define ENABLE_CUBE_DRAW_GUID_BUFFER
11-
#define ENABLE_CUBE_COMMAND_BUFFER
128
#define OCCLUSION_CULLED_COMMAND_BUFF_SET 0
139
#define OCCLUSION_CULLED_COMMAND_BUFF_BINDING 0
1410
#define VISIBLE_BUFF_SET 0

examples_tests/41.VisibilityBuffer/occlusionCullingShaderCommon.glsl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
#include <nbl/builtin/glsl/utils/indirect_commands.glsl>
55

6-
#ifdef ENABLE_CUBE_COMMAND_BUFFER
6+
#ifdef CUBE_COMMAND_BUFF_SET
77

88
layout(set=CUBE_COMMAND_BUFF_SET, binding=CUBE_COMMAND_BUFF_BINDING, std430) restrict coherent buffer CubeIndirectDraw
99
{
@@ -12,7 +12,7 @@ layout(set=CUBE_COMMAND_BUFF_SET, binding=CUBE_COMMAND_BUFF_BINDING, std430) res
1212

1313
#endif
1414

15-
#ifdef ENABLE_FRUSTUM_CULLED_COMMAND_BUFFER
15+
#ifdef FRUSTUM_CULLED_COMMAND_BUFF_SET
1616

1717
layout(set=FRUSTUM_CULLED_COMMAND_BUFF_SET, binding=FRUSTUM_CULLED_COMMAND_BUFF_BINDING, std430) restrict buffer FrustumIndirectDraws
1818
{
@@ -21,7 +21,7 @@ layout(set=FRUSTUM_CULLED_COMMAND_BUFF_SET, binding=FRUSTUM_CULLED_COMMAND_BUFF_
2121

2222
#endif
2323

24-
#ifdef ENABLE_OCCLUSION_CULLED_COMMAND_BUFFER
24+
#ifdef OCCLUSION_CULLED_COMMAND_BUFF_SET
2525

2626
layout(set=OCCLUSION_CULLED_COMMAND_BUFF_SET, binding=OCCLUSION_CULLED_COMMAND_BUFF_BINDING, std430) restrict buffer OcclusionIndirectDraws
2727
{
@@ -30,7 +30,7 @@ layout(set=OCCLUSION_CULLED_COMMAND_BUFF_SET, binding=OCCLUSION_CULLED_COMMAND_B
3030

3131
#endif
3232

33-
#ifdef ENABLE_VISIBLE_BUFFER
33+
#ifdef VISIBLE_BUFF_SET
3434

3535
layout(set = VISIBLE_BUFF_SET, binding = VISIBLE_BUFF_BINDING, std430) restrict buffer VisibleBuff
3636
{
@@ -39,7 +39,7 @@ layout(set = VISIBLE_BUFF_SET, binding = VISIBLE_BUFF_BINDING, std430) restrict
3939

4040
#endif
4141

42-
#ifdef ENABLE_CUBE_DRAW_GUID_BUFFER
42+
#ifdef CUBE_DRAW_GUID_BUFF_SET
4343

4444
layout(set=CUBE_DRAW_GUID_BUFF_SET, binding=CUBE_DRAW_GUID_BUFF_BINDING, std430) restrict buffer CubeDrawGUID
4545
{
@@ -48,7 +48,7 @@ layout(set=CUBE_DRAW_GUID_BUFF_SET, binding=CUBE_DRAW_GUID_BUFF_BINDING, std430)
4848

4949
#endif
5050

51-
#ifdef ENABLE_OCCLUSION_DISPATCH_INDIRECT_BUFFER
51+
#ifdef OCCLUSION_DISPATCH_INDIRECT_BUFF_SET
5252

5353
layout(set=OCCLUSION_DISPATCH_INDIRECT_BUFF_SET, binding=OCCLUSION_DISPATCH_INDIRECT_BUFF_BINDING, std430) restrict coherent buffer OcclusionDispatchIndirectBuffer
5454
{

examples_tests/41.VisibilityBuffer/rasterizationCommon.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ struct CullShaderData_t
77
{
88
mat4 viewProjMatrix;
99
vec3 worldCamPos;
10-
uint maxBatchCount;
11-
uint freezeCulling;
12-
10+
uint freezeCullingAndMaxBatchCountPacked;
1311
};
1412

1513
struct CullData_t

examples_tests/41.VisibilityBuffer/shadeVBuffer.comp

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -114,19 +114,12 @@ vec3 uintIDToColor(uint id)
114114
return vec3(bitfieldExtract(id,0,4),bitfieldExtract(id,4,4),bitfieldExtract(id,8,4))/15.0;
115115
}
116116

117-
#define ENABLE_FRUSTUM_CULLED_COMMAND_BUFFER
118-
#define ENABLE_VISIBLE_BUFFER
119-
#define ENABLE_CUBE_COMMAND_BUFFER
120-
#define ENABLE_OCCLUSION_DISPATCH_INDIRECT_BUFFER
121-
122-
#define FRUSTUM_CULLED_COMMAND_BUFF_SET 3
123-
#define FRUSTUM_CULLED_COMMAND_BUFF_BINDING 2
124117
#define VISIBLE_BUFF_SET 3
125-
#define VISIBLE_BUFF_BINDING 3
118+
#define VISIBLE_BUFF_BINDING 2
126119
#define CUBE_COMMAND_BUFF_SET 3
127-
#define CUBE_COMMAND_BUFF_BINDING 4
120+
#define CUBE_COMMAND_BUFF_BINDING 3
128121
#define OCCLUSION_DISPATCH_INDIRECT_BUFF_SET 3
129-
#define OCCLUSION_DISPATCH_INDIRECT_BUFF_BINDING 5
122+
#define OCCLUSION_DISPATCH_INDIRECT_BUFF_BINDING 4
130123

131124

132125
#include "occlusionCullingShaderCommon.glsl"

0 commit comments

Comments
 (0)