allow dumping AABB
This commit is contained in:
+35
-3
@@ -8,6 +8,7 @@ const IGNORE_STENCIL: bool = true;
|
|||||||
const VSYNC: bool = true;
|
const VSYNC: bool = true;
|
||||||
const COMPUTE_FUZZING: bool = false;
|
const COMPUTE_FUZZING: bool = false;
|
||||||
const ROBUST: bool = false;
|
const ROBUST: bool = false;
|
||||||
|
const DUMP_AABBS: bool = false;
|
||||||
|
|
||||||
const DEFAULT_SUBDIVISION: u32 = 16;
|
const DEFAULT_SUBDIVISION: u32 = 16;
|
||||||
const MAXIMUM_SUBDIVISION: u32 = 64;
|
const MAXIMUM_SUBDIVISION: u32 = 64;
|
||||||
@@ -31,7 +32,7 @@ use bytemuck::{Pod, Zeroable};
|
|||||||
use egui_winit_vulkano::{Gui, GuiConfig};
|
use egui_winit_vulkano::{Gui, GuiConfig};
|
||||||
use foldhash::{HashMap, HashMapExt, HashSet};
|
use foldhash::{HashMap, HashMapExt, HashSet};
|
||||||
use glam::{self, EulerRot, Mat3, Mat4, Vec3, vec3};
|
use glam::{self, EulerRot, Mat3, Mat4, Vec3, vec3};
|
||||||
use log::{error, info, trace};
|
use log::{error, info, trace, warn};
|
||||||
use notify::{RecommendedWatcher, Watcher};
|
use notify::{RecommendedWatcher, Watcher};
|
||||||
use rspirv::dr::Module;
|
use rspirv::dr::Module;
|
||||||
use simplelog::{CombinedLogger, Config, TermLogger, WriteLogger};
|
use simplelog::{CombinedLogger, Config, TermLogger, WriteLogger};
|
||||||
@@ -94,7 +95,9 @@ use vulkano::{
|
|||||||
PresentMode, Surface, SurfaceInfo, Swapchain, SwapchainCreateInfo, SwapchainPresentInfo,
|
PresentMode, Surface, SurfaceInfo, Swapchain, SwapchainCreateInfo, SwapchainPresentInfo,
|
||||||
acquire_next_image,
|
acquire_next_image,
|
||||||
},
|
},
|
||||||
sync::{self, GpuFuture, PipelineStage, future::FenceSignalFuture},
|
sync::{
|
||||||
|
self, AccessConflict, GpuFuture, HostAccessError, PipelineStage, future::FenceSignalFuture,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
use winit::platform::x11::EventLoopBuilderExtX11;
|
use winit::platform::x11::EventLoopBuilderExtX11;
|
||||||
@@ -593,7 +596,11 @@ impl App {
|
|||||||
SubbufferAllocatorCreateInfo {
|
SubbufferAllocatorCreateInfo {
|
||||||
buffer_usage: BufferUsage::STORAGE_BUFFER
|
buffer_usage: BufferUsage::STORAGE_BUFFER
|
||||||
| BufferUsage::ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY,
|
| 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()
|
..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 {
|
for work in work_for_later {
|
||||||
self.handle_work_complete(work);
|
self.handle_work_complete(work);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,23 @@
|
|||||||
#extension GL_GOOGLE_include_directive:require
|
#extension GL_GOOGLE_include_directive:require
|
||||||
#include "compute_prepass_include.glsl"
|
#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;
|
layout(local_size_x = 8, local_size_y = 8, local_size_z = 8) in;
|
||||||
|
|
||||||
|
const float NAN = 0.0 / 0.0;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
if (SPEC_BRUTE_FORCE || SPEC_USE_CPU_ENABLE_GEN) {
|
if (SPEC_BRUTE_FORCE || SPEC_USE_CPU_ENABLE_GEN) {
|
||||||
return;
|
return;
|
||||||
@@ -23,9 +38,9 @@ void main() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
vec3 low_corner = (((vec3(0.0) / float(1 << object_uniforms.subdivision_log2)) + internal_pos)
|
vec3 low_corner = (((vec3(0.0) / float(1 << object_uniforms.subdivision_log2)) + internal_pos)
|
||||||
* object_uniforms.dimensions) + object_uniforms.lowest_corner;
|
* object_uniforms.dimensions) + object_uniforms.lowest_corner;
|
||||||
vec3 high_corner = (((vec3(1.0) / float(1 << object_uniforms.subdivision_log2)) + internal_pos)
|
vec3 high_corner = (((vec3(1.0) / float(1 << object_uniforms.subdivision_log2)) + internal_pos)
|
||||||
* object_uniforms.dimensions) + object_uniforms.lowest_corner;
|
* object_uniforms.dimensions) + object_uniforms.lowest_corner;
|
||||||
|
|
||||||
vec2 interval = interval_scene(
|
vec2 interval = interval_scene(
|
||||||
vec4(low_corner, camera_uniforms.campos_and_time.w),
|
vec4(low_corner, camera_uniforms.campos_and_time.w),
|
||||||
@@ -34,6 +49,17 @@ void main() {
|
|||||||
|
|
||||||
bool enable = (interval.x < 0) && (interval.y > 0);
|
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) {
|
switch ((base_index >> 5) & 3) {
|
||||||
default:
|
default:
|
||||||
case 0:
|
case 0:
|
||||||
|
|||||||
Reference in New Issue
Block a user