Restructure A

This commit is contained in:
mcrcortex
2024-07-13 10:47:11 +10:00
parent 86f1770af3
commit 3cec8b281c
21 changed files with 394 additions and 162 deletions

View File

@@ -1,8 +1,9 @@
#define SCENE_UNIFORM_INDEX 0
#define NODE_DATA_INDEX 1
#define REQUEST_QUEUE_INDEX 2
#define RENDER_QUEUE_INDEX 3
#define TRANSFORM_ARRAY_INDEX 4
#define NODE_QUEUE_INDEX 2
#define REQUEST_QUEUE_INDEX 3
#define RENDER_QUEUE_INDEX 4
#define TRANSFORM_ARRAY_INDEX 5
//Samplers
#define HIZ_BINDING_INDEX 0

View File

@@ -25,12 +25,12 @@ struct UnpackedNode {
uint childPtr;
};
#define NULL_NODE ((1<<25)-1)
#define NULL_NODE ((1<<24)-1)
#define NULL_MESH ((1<<24)-1)
void unpackNode(inout UnpackedNode node, uint nodeId) {
node.nodeId = nodeId;
void unpackNode(out UnpackedNode node, uint nodeId) {
uvec4 compactedNode = nodes[nodeId];
node.nodeId = nodeId;
node.lodLevel = compactedNode.x >> 28;
{
@@ -40,13 +40,12 @@ void unpackNode(inout UnpackedNode node, uint nodeId) {
z |= int(compactedNode.y>>28);
z <<= 8;
z >>= 8;
node.pos = ivec3(x, y, z);
}
node.meshPtr = compactedNode.z&0xFFFFFFu;
node.childPtr = compactedNode.w&0x1FFFFFFu;
node.flags = (compactedNode.z>>24) | ((compactedNode.w>>23)<<8);
node.childPtr = compactedNode.w&0xFFFFFFu;
node.flags = ((compactedNode.z>>24)&0xFFu) | (((compactedNode.w>>24)&0xFFu)<<8);
}
bool hasMesh(in UnpackedNode node) {
@@ -89,5 +88,5 @@ void markRequested(inout UnpackedNode node) {
}
void debugDumpNode(in UnpackedNode node) {
printf("Node %d, %d@[%d,%d,%d], flags: %d, mesh: %d, ChildPtr: %d", node.nodeId, node.lodLevel, node.pos.x, node.pos.z, node.pos.z, node.flags, node.meshPtr, node.childPtr);
printf("Node %d, %d@[%d,%d,%d], flags: %d, mesh: %d, ChildPtr: %d", node.nodeId, node.lodLevel, node.pos.x, node.pos.y, node.pos.z, node.flags, node.meshPtr, node.childPtr);
}

View File

@@ -25,6 +25,11 @@ layout(binding = SCENE_UNIFORM_INDEX, std140) uniform SceneUniform {
uint renderQueueMaxSize;
};
layout(binding = NODE_QUEUE_INDEX, std430) restrict buffer NodeQueue {
uint nodeQueueSize;
uint[] nodeQueue;
};
layout(binding = REQUEST_QUEUE_INDEX, std430) restrict buffer RequestQueue {
uint requestQueueIndex;
uint[] requestQueue;
@@ -35,6 +40,7 @@ layout(binding = RENDER_QUEUE_INDEX, std430) restrict buffer RenderQueue {
uint[] renderQueue;
};
/*
layout(binding = 2, std430) restrict buffer QueueData {
uint tail;
@@ -83,11 +89,11 @@ void addRequest(inout UnpackedNode node) {
}
void enqueueChildren(in UnpackedNode node) {
printf("children");
//printf("children");
}
void enqueueSelfForRender(in UnpackedNode node) {
printf("render");
//printf("render");
if (renderQueueIndex < renderQueueMaxSize) {
renderQueue[atomicAdd(renderQueueIndex, 1)] = getMesh(node);
}
@@ -98,17 +104,17 @@ void main() {
UnpackedNode node;
//Setup/unpack the node
unpackNode(node, gl_GlobalInvocationID.x);
unpackNode(node, nodeQueue[gl_GlobalInvocationID.x]);
//TODO: check the node is OK first??? maybe?
//Compute screenspace
setupScreenspace(node);
debugDumpNode(node);
//debugDumpNode(node);
if (isCulledByHiz()) {
printf("HizCulled");
//printf("HizCulled");
//We are done here, dont do any more, the issue is the shader barriers maybe
// its culled, maybe just mark it as culled?
} else {