diff --git a/crates/bevy_render/src/render_resource/pipeline_cache.rs b/crates/bevy_render/src/render_resource/pipeline_cache.rs index dbcc5ef93efd9..48603edefe7a2 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 matches!(pipeline.state, CachedPipelineState::Ok(_)) { + continue; } pipeline.state = match &pipeline.descriptor { @@ -642,8 +622,27 @@ impl PipelineCache { } }; - if let CachedPipelineState::Err(_) = pipeline.state { - self.waiting_pipelines.insert(id); + if let CachedPipelineState::Err(err) = &pipeline.state { + match err { + PipelineCacheError::ShaderNotLoaded(_) + | 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); + continue; + } + PipelineCacheError::AsModuleDescriptorError(err, source) => { + log_shader_error(source, err); + continue; + } + PipelineCacheError::CreateShaderModule(description) => { + error!("failed to create shader module: {}", description); + continue; + } + } } }