From 6ba56a133e7eda8762e9384a60047bd2d9c74ecf Mon Sep 17 00:00:00 2001 From: mcrcortex <{ID}+{username}@users.noreply.github.com> Date: Thu, 11 Jul 2024 19:55:19 +1000 Subject: [PATCH] Small change --- .../rendering/hierarchical/NodeManager2.java | 12 +++++++++- .../lod/hierarchial/binding_points.glsl | 7 +++--- .../shaders/lod/hierarchial/traversal.comp | 22 +++++++++---------- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/hierarchical/NodeManager2.java b/src/main/java/me/cortex/voxy/client/core/rendering/hierarchical/NodeManager2.java index dfcb8d35..ae3cadaa 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/hierarchical/NodeManager2.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/hierarchical/NodeManager2.java @@ -2,6 +2,7 @@ package me.cortex.voxy.client.core.rendering.hierarchical; import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap; import me.cortex.voxy.client.core.rendering.building.BuiltSection; +import me.cortex.voxy.client.core.rendering.util.DownloadStream; import me.cortex.voxy.client.core.rendering.util.MarkedObjectList; import me.cortex.voxy.common.util.HierarchicalBitSet; import me.cortex.voxy.common.world.WorldEngine; @@ -341,7 +342,16 @@ public class NodeManager2 { private void pushNode(int node) { } - public void nodeUpload() { + + private void writeNode(long dst, int id) { + + } + + //2 parts upload and download + + private void download() { + //Download the request queue then clear the counter (first 4 bytes) + DownloadStream.INSTANCE.download(this.); } diff --git a/src/main/resources/assets/voxy/shaders/lod/hierarchial/binding_points.glsl b/src/main/resources/assets/voxy/shaders/lod/hierarchial/binding_points.glsl index 1f8f5377..49006100 100644 --- a/src/main/resources/assets/voxy/shaders/lod/hierarchial/binding_points.glsl +++ b/src/main/resources/assets/voxy/shaders/lod/hierarchial/binding_points.glsl @@ -1,9 +1,8 @@ #define SCENE_UNIFORM_INDEX 0 #define NODE_DATA_INDEX 1 -#define ATOMIC_DATA_INDEX 2 -#define REQUEST_QUEUE_INDEX 3 -#define RENDER_QUEUE_INDEX 4 -#define TRANSFORM_ARRAY_INDEX 5 +#define REQUEST_QUEUE_INDEX 2 +#define RENDER_QUEUE_INDEX 3 +#define TRANSFORM_ARRAY_INDEX 4 //Samplers #define HIZ_BINDING_INDEX 0 diff --git a/src/main/resources/assets/voxy/shaders/lod/hierarchial/traversal.comp b/src/main/resources/assets/voxy/shaders/lod/hierarchial/traversal.comp index ba18ddfe..fb19fd31 100644 --- a/src/main/resources/assets/voxy/shaders/lod/hierarchial/traversal.comp +++ b/src/main/resources/assets/voxy/shaders/lod/hierarchial/traversal.comp @@ -21,21 +21,17 @@ layout(binding = SCENE_UNIFORM_INDEX, std140) uniform SceneUniform { uint screenW; vec3 camSubSecPos; uint screenH; + uint requestQueueMaxSize; + uint renderQueueMaxSize; }; -layout(binding = ATOMIC_DATA_INDEX, std430) restrict buffer Atomics { +layout(binding = REQUEST_QUEUE_INDEX, std430) restrict buffer RequestQueue { uint requestQueueIndex; - uint requestQueueMaxSize; - - uint renderQueueIndex; - uint renderQueueMaxSize; -} atomics; - -layout(binding = REQUEST_QUEUE_INDEX, std430) restrict writeonly buffer RequestQueue { uint[] requestQueue; }; -layout(binding = RENDER_QUEUE_INDEX, std430) restrict writeonly buffer RenderQueue { +layout(binding = RENDER_QUEUE_INDEX, std430) restrict buffer RenderQueue { + uint renderQueueIndex; uint[] renderQueue; }; @@ -77,9 +73,9 @@ layout(binding = 2, std430) restrict buffer QueueData { void addRequest(inout UnpackedNode node) { if (!hasRequested(node)) { //TODO: maybe try using only 1 variable and it being <0 being bad - if (atomics.requestQueueIndex < atomics.requestQueueMaxSize) { + if (requestQueueIndex < requestQueueMaxSize) { //Mark node as having a request submitted to prevent duplicate submissions - requestQueue[atomicAdd(atomics.requestQueueIndex, 1)] = getId(node); + requestQueue[atomicAdd(requestQueueIndex, 1)] = getId(node); markRequested(node); } } @@ -90,7 +86,9 @@ void enqueueChildren(in UnpackedNode node) { } void enqueueSelfForRender(in UnpackedNode node) { - renderQueue[atomicAdd(atomics.renderQueueIndex, 1)] = getMesh(node); + if (renderQueueIndex < renderQueueMaxSize) { + renderQueue[atomicAdd(renderQueueIndex, 1)] = getMesh(node); + } } //TODO: need to add an empty mesh, as a parent node might not have anything to render but the children do??