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( .send(WorkItem::RecompilePipelines(
csg.clone(), csg.clone(),
self.device.clone(), self.device.clone(),
self.trace_module.clone(),
self.normals_module.clone(),
rcx.render_pass.clone(), rcx.render_pass.clone(),
self.pipeline_cache.clone(), self.pipeline_cache.clone(),
rcx.shader_modules.clone(), rcx.shader_modules.clone(),
@@ -1507,6 +1509,8 @@ impl App {
.send(WorkItem::RecompilePipelines( .send(WorkItem::RecompilePipelines(
csg.clone(), csg.clone(),
self.device.clone(), self.device.clone(),
self.trace_module.clone(),
self.normals_module.clone(),
rcx.render_pass.clone(), rcx.render_pass.clone(),
self.pipeline_cache.clone(), self.pipeline_cache.clone(),
rcx.shader_modules.clone(), rcx.shader_modules.clone(),
+24
View File
@@ -78,6 +78,8 @@ pub enum WorkItem {
RecompilePipelines( RecompilePipelines(
Arc<RwLock<CSG>>, Arc<RwLock<CSG>>,
Arc<Device>, Arc<Device>,
Module,
Module,
Arc<RenderPass>, Arc<RenderPass>,
Arc<PipelineCache>, Arc<PipelineCache>,
ShaderModules, ShaderModules,
@@ -261,13 +263,29 @@ pub fn thread_loop(recv: mpmc::Receiver<WorkItem>, send: mpsc::SyncSender<WorkCo
WorkItem::RecompilePipelines( WorkItem::RecompilePipelines(
csg, csg,
device, device,
trace_module,
normals_module,
render_pass, render_pass,
cache, cache,
modules, modules,
debug, debug,
index, index,
) => { ) => {
let csg_start = Instant::now();
let mut csg = csg.write().unwrap(); 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( (csg.trace_pipeline, csg.normals_pipeline) = deferred_pipelines_recompile(
device, device,
render_pass, render_pass,
@@ -279,6 +297,12 @@ pub fn thread_loop(recv: mpmc::Receiver<WorkItem>, send: mpsc::SyncSender<WorkCo
); );
csg.new_pipelines_needed = false; csg.new_pipelines_needed = false;
send.send(WorkComplete::RecompilePipelines(index)).unwrap(); 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
);
}, },
} }
} }