Fully respecialise on pipeline recompile
This commit is contained in:
@@ -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(),
|
||||
|
||||
@@ -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
|
||||
);
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user