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