🔍 Module Scanned
(automated audit scan)
📝 Summary
The and functions perform O(n) linear scans through a hashmap's entries to find a chunk by its coordinates. For a buffer supporting up to 16,384 chunks, this causes significant performance degradation during GPU meshing operations where neighbor chunk slots are queried repeatedly.
📍 Location
- File:
- Function/Scope: (line 131) and (line 99)
🔴 Severity: Medium
- Medium: Performance degradation, missing error handling, suboptimal patterns
💥 Impact
During GPU compute meshing in , four neighbor chunk slots are queried per chunk via . Each query performs a full linear scan through up to 16,384 hashmap entries. With hundreds of chunks per frame, this creates a measurable bottleneck in the meshing pipeline.
🔎 Evidence
The underlying storage is which stores as the value. To find a slot by chunk coordinates requires iterating all entries - even though the hashmap is already indexed by slot (a simple usize).
Compare with at line 151 which correctly uses the hashmap's built-in lookup:
🛠️ Proposed Fix
Replace the with two hashmaps:
-
- keep as-is (maps slot → chunk coords)
-
- NEW (maps chunk coords → slot)
Then in :
And in :
And in total used free shared buff/cache available
Mem: 16373460 1459352 7665044 51264 7655004 14914108
Swap: 3145724 0 3145724:
✅ Acceptance Criteria
📚 References
- defined in with proper hash/eq implementation
- in Zig standard library provides O(1) average-case lookup
- GPU meshing occurs in where neighbor slot lookups are frequent
🔍 Module Scanned
(automated audit scan)
📝 Summary
The and functions perform O(n) linear scans through a hashmap's entries to find a chunk by its coordinates. For a buffer supporting up to 16,384 chunks, this causes significant performance degradation during GPU meshing operations where neighbor chunk slots are queried repeatedly.
📍 Location
🔴 Severity: Medium
💥 Impact
During GPU compute meshing in , four neighbor chunk slots are queried per chunk via . Each query performs a full linear scan through up to 16,384 hashmap entries. With hundreds of chunks per frame, this creates a measurable bottleneck in the meshing pipeline.
🔎 Evidence
The underlying storage is which stores as the value. To find a slot by chunk coordinates requires iterating all entries - even though the hashmap is already indexed by slot (a simple usize).
Compare with at line 151 which correctly uses the hashmap's built-in lookup:
🛠️ Proposed Fix
Replace the with two hashmaps:
Then in :
And in :
And in total used free shared buff/cache available
Mem: 16373460 1459352 7665044 51264 7655004 14914108
Swap: 3145724 0 3145724:
✅ Acceptance Criteria
Compiler: 0.16.0
assets/shaders/vulkan/ui.frag
assets/shaders/vulkan/shadow.frag
assets/shaders/vulkan/ssao_blur.frag
assets/shaders/vulkan/ui_tex.vert
assets/shaders/vulkan/lpv_inject.comp
assets/shaders/vulkan/taa.frag
assets/shaders/vulkan/ui_tex.frag
assets/shaders/vulkan/bloom_downsample.vert
assets/shaders/vulkan/bloom_upsample.vert
assets/shaders/vulkan/debug_shadow.vert
assets/shaders/vulkan/fxaa.vert
assets/shaders/vulkan/post_process.vert
assets/shaders/vulkan/shadow.vert
assets/shaders/vulkan/sky.vert
assets/shaders/vulkan/ssao.vert
assets/shaders/vulkan/taa.vert
assets/shaders/vulkan/terrain.vert
assets/shaders/vulkan/ui.vert
assets/shaders/vulkan/ui_tex.vert
assets/shaders/vulkan/water.vert
assets/shaders/vulkan/bloom_downsample.frag
assets/shaders/vulkan/bloom_upsample.frag
assets/shaders/vulkan/debug_shadow.frag
assets/shaders/vulkan/fxaa.frag
assets/shaders/vulkan/g_pass.frag
assets/shaders/vulkan/post_process.frag
assets/shaders/vulkan/shadow.frag
assets/shaders/vulkan/sky.frag
assets/shaders/vulkan/ssao.frag
assets/shaders/vulkan/ssao_blur.frag
assets/shaders/vulkan/taa.frag
assets/shaders/vulkan/terrain.frag
assets/shaders/vulkan/terrain_debug.frag
assets/shaders/vulkan/ui.frag
assets/shaders/vulkan/ui_tex.frag
assets/shaders/vulkan/water.frag
assets/shaders/vulkan/culling.comp
assets/shaders/vulkan/depth_pyramid.comp
assets/shaders/vulkan/lpv_inject.comp
assets/shaders/vulkan/lpv_propagate.comp
assets/shaders/vulkan/mesh.comp
assets/shaders/vulkan/ssao.frag
assets/shaders/vulkan/ssao.vert
assets/shaders/vulkan/taa.vert
assets/shaders/vulkan/sky.frag
assets/shaders/vulkan/water.vert
assets/shaders/vulkan/debug_shadow.vert
assets/shaders/vulkan/debug_shadow.frag
assets/shaders/vulkan/culling.comp
assets/shaders/vulkan/depth_pyramid.comp
assets/shaders/vulkan/shadow.vert
assets/shaders/vulkan/g_pass.frag
assets/shaders/vulkan/sky.vert
assets/shaders/vulkan/terrain.vert
assets/shaders/vulkan/ui.vert
assets/shaders/vulkan/water.frag
assets/shaders/vulkan/lpv_propagate.comp
assets/shaders/vulkan/mesh.comp
assets/shaders/vulkan/terrain.frag
📚 References