Fully respecialise on pipeline recompile

This commit is contained in:
2025-12-01 19:58:09 +00:00
parent 5afecc2c08
commit 3d994908ad
2 changed files with 28 additions and 0 deletions
+4
View File
@@ -1471,6 +1471,8 @@ impl App {
.send(WorkItem::RecompilePipelines(
csg.clone(),
self.device.clone(),
self.trace_module.clone(),
self.normals_module.clone(),
rcx.render_pass.clone(),
self.pipeline_cache.clone(),
rcx.shader_modules.clone(),
@@ -1507,6 +1509,8 @@ impl App {
.send(WorkItem::RecompilePipelines(
csg.clone(),
self.device.clone(),
self.trace_module.clone(),
self.normals_module.clone(),
rcx.render_pass.clone(),
self.pipeline_cache.clone(),
rcx.shader_modules.clone(),
+24
View File
@@ -78,6 +78,8 @@ pub enum WorkItem {
RecompilePipelines(
Arc<RwLock<CSG>>,
Arc<Device>,
Module,
Module,
Arc<RenderPass>,
Arc<PipelineCache>,
ShaderModules,
@@ -261,13 +263,29 @@ pub fn thread_loop(recv: mpmc::Receiver<WorkItem>, send: mpsc::SyncSender<WorkCo
WorkItem::RecompilePipelines(
csg,
device,
trace_module,
normals_module,
render_pass,
cache,
modules,
debug,
index,
) => {
let csg_start = Instant::now();
let mut csg = csg.write().unwrap();
csg.trace_shader_module = sdf_specialize_module(
device.clone(),
&csg.parts,
trace_module,
&format!("trace"),
);
csg.normals_shader_module = sdf_specialize_module(
device.clone(),
&csg.parts,
normals_module,
&format!("normals"),
);
(csg.trace_pipeline, csg.normals_pipeline) = deferred_pipelines_recompile(
device,
render_pass,
@@ -279,6 +297,12 @@ pub fn thread_loop(recv: mpmc::Receiver<WorkItem>, send: mpsc::SyncSender<WorkCo
);
csg.new_pipelines_needed = false;
send.send(WorkComplete::RecompilePipelines(index)).unwrap();
let csg_end = Instant::now();
info!(
"CSG recompile took {} milliseconds",
(csg_end - csg_start).as_secs_f64() * 1000.0
);
},
}
}