Skip to content

Commit 24e82c4

Browse files
committed
Merge branch 'raytracing' of https://github.com/Devsh-Graphics-Programming/Nabla into spirv-optimizer
2 parents 86c62fe + 9f5d027 commit 24e82c4

File tree

22 files changed

+409
-460
lines changed

22 files changed

+409
-460
lines changed

examples_tests/22.RaytracedAO/common.glsl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
{
2020
float x,y,z;
2121
};
22+
#define vec4 nbl::core::vectorSIMDf
2223
#define mat4 nbl::core::matrix4SIMD
2324
#define mat4x3 nbl::core::matrix3x4SIMD
2425
#endif

examples_tests/22.RaytracedAO/cull.comp

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,18 @@
44
#include "drawCommon.glsl"
55
layout(local_size_x = WORKGROUP_SIZE) in;
66

7+
#include <nbl/builtin/glsl/ext/MitsubaLoader/instance_data_descriptor.glsl>
78

89
#include <nbl/builtin/glsl/utils/indirect_commands.glsl>
9-
layout(set=1, binding=0, std430, row_major) restrict readonly buffer PerInstanceStatic
10-
{
11-
ObjectStaticData_t staticData[];
12-
};
13-
layout(set=1, binding=1, row_major) writeonly restrict buffer PerInstancePerCamera
10+
layout(set=1, binding=0, row_major) writeonly restrict buffer PerInstancePerCamera
1411
{
1512
DrawData_t data[];
1613
} instanceDataPerCamera;
17-
layout(set=1, binding=2, std430, row_major) restrict readonly buffer PerInstanceCull
14+
layout(set=1, binding=1, std430, row_major) restrict readonly buffer PerInstanceCull
1815
{
1916
CullData_t cullData[];
2017
};
21-
layout(set=1, binding=3, std430) restrict coherent buffer IndirectDraws
18+
layout(set=1, binding=2, std430) restrict coherent buffer IndirectDraws
2219
{
2320
nbl_glsl_DrawElementsIndirectCommand_t draws[];
2421
} commandBuff[2];
@@ -40,33 +37,36 @@ layout(push_constant, row_major) uniform PushConstants
4037
// we just do atomic add on the instance count
4138
void main()
4239
{
43-
uint globalObjectID = gl_GlobalInvocationID.x;
44-
if (globalObjectID>=pc.data.maxObjectCount)
40+
if (gl_GlobalInvocationID.x<pc.data.maxDrawCount)
41+
commandBuff[pc.data.currentCommandBufferIx^0x1u].draws[gl_GlobalInvocationID.x].instanceCount = 0u;
42+
43+
uint instanceMeshBufferID = gl_GlobalInvocationID.x;
44+
if (instanceMeshBufferID>=pc.data.maxObjectCount)
4545
return;
4646

47-
const mat4x3 worldMatrix = cullData[globalObjectID].worldMatrix;
48-
const uint drawID = cullData[globalObjectID].drawID;
47+
// fetch instance data
48+
const CullData_t instanceMeshBufferData = cullData[instanceMeshBufferID];
49+
const uint globalObjectID = instanceMeshBufferData.globalObjectID;
4950

50-
// clear drawcount for next buffer
51-
commandBuff[pc.data.currentCommandBufferIx^0x1u].draws[drawID].instanceCount = 0u;
51+
const mat4x3 worldMatrix = InstData.data[globalObjectID].tform;
52+
const mat4 MVP = nbl_glsl_pseudoMul4x4with4x3(pc.data.viewProjMatrix,worldMatrix);
5253

5354
// cull
54-
const mat4 MVP = nbl_glsl_pseudoMul4x4with4x3(pc.data.viewProjMatrix,worldMatrix);
55-
bool notCulled = true;
56-
if (false)
55+
bool notCulled;
5756
{
58-
mat2x3 bbox;
59-
bbox[0] = cullData[globalObjectID].aabbMinEdge;
60-
bbox[1] = cullData[globalObjectID].aabbMaxEdge;
57+
const mat2x3 bbox = mat2x3(instanceMeshBufferData.aabbMinEdge,instanceMeshBufferData.aabbMaxEdge);
6158
notCulled = nbl_glsl_couldBeVisible(MVP,bbox);
6259
}
6360

61+
// set up MDI
6462
if (notCulled)
6563
{
66-
const uint instanceID = atomicAdd(commandBuff[pc.data.currentCommandBufferIx].draws[drawID].instanceCount,1u)+cullData[globalObjectID].baseInstance;
64+
const uint drawID = instanceMeshBufferData.drawID;
65+
const uint drawInstanceID = atomicAdd(commandBuff[pc.data.currentCommandBufferIx].draws[drawID].instanceCount,1u)
66+
+commandBuff[pc.data.currentCommandBufferIx].draws[drawID].baseInstance;
6767

68-
instanceDataPerCamera.data[instanceID].MVP = MVP;
69-
instanceDataPerCamera.data[instanceID].detMVP = pc.data.viewProjDeterminant*staticData[globalObjectID].detWorldMatrix;
70-
instanceDataPerCamera.data[instanceID].objectID = globalObjectID;
68+
instanceDataPerCamera.data[drawInstanceID].MVP = MVP;
69+
float detMVP = pc.data.viewProjDeterminant*InstData.data[globalObjectID].determinant;
70+
instanceDataPerCamera.data[drawInstanceID].backfacingBit_objectID = globalObjectID|(floatBitsToUint(detMVP)&0x80000000u); // use MSB to denote if face orientation should be flipped
7171
}
7272
}

0 commit comments

Comments
 (0)