allow dumping AABB

This commit is contained in:
2026-01-31 17:35:10 +00:00
parent 9ef20de508
commit 1acafae017
2 changed files with 63 additions and 5 deletions
+35 -3
View File
@@ -8,6 +8,7 @@ const IGNORE_STENCIL: bool = true;
const VSYNC: bool = true;
const COMPUTE_FUZZING: bool = false;
const ROBUST: bool = false;
const DUMP_AABBS: bool = false;
const DEFAULT_SUBDIVISION: u32 = 16;
const MAXIMUM_SUBDIVISION: u32 = 64;
@@ -31,7 +32,7 @@ use bytemuck::{Pod, Zeroable};
use egui_winit_vulkano::{Gui, GuiConfig};
use foldhash::{HashMap, HashMapExt, HashSet};
use glam::{self, EulerRot, Mat3, Mat4, Vec3, vec3};
use log::{error, info, trace};
use log::{error, info, trace, warn};
use notify::{RecommendedWatcher, Watcher};
use rspirv::dr::Module;
use simplelog::{CombinedLogger, Config, TermLogger, WriteLogger};
@@ -94,7 +95,9 @@ use vulkano::{
PresentMode, Surface, SurfaceInfo, Swapchain, SwapchainCreateInfo, SwapchainPresentInfo,
acquire_next_image,
},
sync::{self, GpuFuture, PipelineStage, future::FenceSignalFuture},
sync::{
self, AccessConflict, GpuFuture, HostAccessError, PipelineStage, future::FenceSignalFuture,
},
};
#[cfg(target_os = "linux")]
use winit::platform::x11::EventLoopBuilderExtX11;
@@ -593,7 +596,11 @@ impl App {
SubbufferAllocatorCreateInfo {
buffer_usage: BufferUsage::STORAGE_BUFFER
| BufferUsage::ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY,
memory_type_filter: MemoryTypeFilter::PREFER_DEVICE,
memory_type_filter: if DUMP_AABBS {
MemoryTypeFilter::HOST_RANDOM_ACCESS
} else {
MemoryTypeFilter::PREFER_DEVICE
},
..Default::default()
},
)));
@@ -2629,6 +2636,31 @@ impl App {
}
}
if DUMP_AABBS {
for future in rcx.previous_frame_end.iter_mut().flatten() {
future.wait(None).unwrap();
future.cleanup_finished();
}
for csg in self.gstate.csg.iter() {
let csg = csg.read().unwrap();
let mut reader = csg.aabb_buffer[image_index].read();
'writerloop: loop {
match reader {
Err(HostAccessError::AccessConflict(AccessConflict::DeviceRead))
| Err(HostAccessError::AccessConflict(AccessConflict::DeviceWrite)) => {
warn!("WAITING FOR HOST BUFFER FREE");
thread::yield_now();
reader = csg.aabb_buffer[image_index].read();
},
_ => break 'writerloop,
}
}
let reader = reader.unwrap();
info!("AABBS: {:?}", &reader[..1024]);
}
}
for work in work_for_later {
self.handle_work_complete(work);
}
@@ -2,8 +2,23 @@
#extension GL_GOOGLE_include_directive:require
#include "compute_prepass_include.glsl"
struct AABB {
float min_x;
float min_y;
float min_z;
float max_x;
float max_y;
float max_z;
};
layout(set = 1, binding = 1, std430) restrict writeonly buffer AABBS {
AABB aabbs[];
} aabbs;
layout(local_size_x = 8, local_size_y = 8, local_size_z = 8) in;
const float NAN = 0.0 / 0.0;
void main() {
if (SPEC_BRUTE_FORCE || SPEC_USE_CPU_ENABLE_GEN) {
return;
@@ -34,6 +49,17 @@ void main() {
bool enable = (interval.x < 0) && (interval.y > 0);
if (enable) {
aabbs.aabbs[base_index].min_x = low_corner.x;
aabbs.aabbs[base_index].min_y = low_corner.y;
aabbs.aabbs[base_index].min_z = low_corner.z;
aabbs.aabbs[base_index].max_x = high_corner.x;
aabbs.aabbs[base_index].max_y = high_corner.y;
aabbs.aabbs[base_index].max_z = high_corner.z;
} else {
aabbs.aabbs[base_index].min_x = NAN;
}
switch ((base_index >> 5) & 3) {
default:
case 0: