From 489679c71c95967f179b6ee8725f496252bd1619 Mon Sep 17 00:00:00 2001 From: IceSentry Date: Tue, 27 Sep 2022 16:31:01 -0400 Subject: [PATCH 1/3] log pipeline cache errors earlier --- .../src/render_resource/pipeline_cache.rs | 43 +++++++++---------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/crates/bevy_render/src/render_resource/pipeline_cache.rs b/crates/bevy_render/src/render_resource/pipeline_cache.rs index dbcc5ef93efd9..80b05b492687f 100644 --- a/crates/bevy_render/src/render_resource/pipeline_cache.rs +++ b/crates/bevy_render/src/render_resource/pipeline_cache.rs @@ -609,28 +609,8 @@ impl PipelineCache { for id in waiting_pipelines { let pipeline = &mut pipelines[id]; - match &pipeline.state { - CachedPipelineState::Ok(_) => continue, - CachedPipelineState::Queued => {} - CachedPipelineState::Err(err) => { - match err { - PipelineCacheError::ShaderNotLoaded(_) - | PipelineCacheError::ShaderImportNotYetAvailable => { /* retry */ } - // shader could not be processed ... retrying won't help - PipelineCacheError::ProcessShaderError(err) => { - error!("failed to process shader: {}", err); - continue; - } - PipelineCacheError::AsModuleDescriptorError(err, source) => { - log_shader_error(source, err); - continue; - } - PipelineCacheError::CreateShaderModule(description) => { - error!("failed to create shader module: {}", description); - continue; - } - } - } + if let CachedPipelineState::Ok(_) = pipeline.state { + continue; } pipeline.state = match &pipeline.descriptor { @@ -642,7 +622,24 @@ impl PipelineCache { } }; - if let CachedPipelineState::Err(_) = pipeline.state { + if let CachedPipelineState::Err(err) = &pipeline.state { + match err { + PipelineCacheError::ShaderNotLoaded(_) + | PipelineCacheError::ShaderImportNotYetAvailable => { /* retry */ } + // shader could not be processed ... retrying won't help + PipelineCacheError::ProcessShaderError(err) => { + error!("failed to process shader: {}", err); + continue; + } + PipelineCacheError::AsModuleDescriptorError(err, source) => { + log_shader_error(source, err); + continue; + } + PipelineCacheError::CreateShaderModule(description) => { + error!("failed to create shader module: {}", description); + continue; + } + } self.waiting_pipelines.insert(id); } } From e1e24d9b2e15965554ac0b5f9913a9ec2818739f Mon Sep 17 00:00:00 2001 From: IceSentry Date: Tue, 27 Sep 2022 16:39:26 -0400 Subject: [PATCH 2/3] retry in match --- crates/bevy_render/src/render_resource/pipeline_cache.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/bevy_render/src/render_resource/pipeline_cache.rs b/crates/bevy_render/src/render_resource/pipeline_cache.rs index 80b05b492687f..1916206aa726f 100644 --- a/crates/bevy_render/src/render_resource/pipeline_cache.rs +++ b/crates/bevy_render/src/render_resource/pipeline_cache.rs @@ -625,7 +625,10 @@ impl PipelineCache { if let CachedPipelineState::Err(err) = &pipeline.state { match err { PipelineCacheError::ShaderNotLoaded(_) - | PipelineCacheError::ShaderImportNotYetAvailable => { /* retry */ } + | PipelineCacheError::ShaderImportNotYetAvailable => { + // retry + self.waiting_pipelines.insert(id); + } // shader could not be processed ... retrying won't help PipelineCacheError::ProcessShaderError(err) => { error!("failed to process shader: {}", err); @@ -640,7 +643,6 @@ impl PipelineCache { continue; } } - self.waiting_pipelines.insert(id); } } From 467febdb973437280e3ad0bc1853f75c0d06a8ab Mon Sep 17 00:00:00 2001 From: IceSentry Date: Tue, 27 Sep 2022 18:39:16 -0400 Subject: [PATCH 3/3] use matches! --- crates/bevy_render/src/render_resource/pipeline_cache.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_render/src/render_resource/pipeline_cache.rs b/crates/bevy_render/src/render_resource/pipeline_cache.rs index 1916206aa726f..48603edefe7a2 100644 --- a/crates/bevy_render/src/render_resource/pipeline_cache.rs +++ b/crates/bevy_render/src/render_resource/pipeline_cache.rs @@ -609,7 +609,7 @@ impl PipelineCache { for id in waiting_pipelines { let pipeline = &mut pipelines[id]; - if let CachedPipelineState::Ok(_) = pipeline.state { + if matches!(pipeline.state, CachedPipelineState::Ok(_)) { continue; }