More node

This commit is contained in:
mcrcortex
2024-09-22 11:09:25 +10:00
parent b875d5fc25
commit 78d5c224a8
5 changed files with 88 additions and 35 deletions

View File

@@ -16,6 +16,8 @@ layout(binding = NODE_DATA_BINDING, std430) restrict buffer NodeData {
struct UnpackedNode {
uint nodeId;
uvec2 rawPos;
ivec3 pos;
uint lodLevel;
@@ -32,7 +34,7 @@ void unpackNode(out UnpackedNode node, uint nodeId) {
uvec4 compactedNode = nodes[nodeId];
node.nodeId = nodeId;
node.lodLevel = compactedNode.x >> 28;
node.rawPos = compactedNode.xy;
{
int y = ((int(compactedNode.x)<<4)>>24);
int x = (int(compactedNode.y)<<4)>>8;
@@ -84,6 +86,10 @@ uint getChildPtr(in UnpackedNode node) {
return node.childPtr;
}
uvec2 getRawPos(in UnpackedNode node) {
return node.rawPos;
}
/*
uint getTransformIndex(in UnpackedNode node) {
return (node.flags >> 5)&31u;

View File

@@ -49,9 +49,7 @@ void pushNode(uint nodeId) {
nodeQueueSink[nodePushIndex++] = nodeId;
}
#define SIMPLE_QUEUE(name, bindingIndex) layout(binding = bindingIndex, std430) restrict buffer name##Struct { \
uint name##Index; \
uint[] name; \
#define SIMPLE_QUEUE(type, name, bindingIndex) layout(binding = bindingIndex, std430) restrict buffer name##Struct { \
type name##Index; \
type##[] name; \
};

View File

@@ -20,15 +20,15 @@ layout(binding = SCENE_UNIFORM_BINDING, std140) uniform SceneUniform {
#import <voxy:lod/hierarchical/node.glsl>
#import <voxy:lod/hierarchical/screenspace.glsl>
SIMPLE_QUEUE(requestQueue, REQUEST_QUEUE_BINDING);
SIMPLE_QUEUE(renderQueue, RENDER_QUEUE_BINDING);
SIMPLE_QUEUE(uvec2, requestQueue, REQUEST_QUEUE_BINDING);
SIMPLE_QUEUE(uint, renderQueue, RENDER_QUEUE_BINDING);
void addRequest(inout UnpackedNode node) {
printf("Put node decend request");
if (!hasRequested(node)) {
if (requestQueueIndex < requestQueueMaxSize) {
if (requestQueueIndex.x < requestQueueMaxSize) {
//Mark node as having a request submitted to prevent duplicate submissions
requestQueue[atomicAdd(requestQueueIndex, 1)] = getId(node);
requestQueue[atomicAdd(requestQueueIndex.x, 1)] = getRawPos(node);
markRequested(node);
}
}