Helpers to check pipeline cache status (#5796)
# Objective - In WASM, creating a pipeline can easily take 2 seconds, freezing the game while doing so - Preloading pipelines can be done during a "loading" state, but it is not trivial to know which pipeline to preload, or when it's done ## Solution - Add a log with shaders being loaded and their shader defs - add a function on `PipelineCache` to return the number of ready pipelines
This commit is contained in:
parent
e8041150ee
commit
480b3baa44
@ -12,7 +12,11 @@ use crate::{
|
|||||||
use bevy_asset::{AssetEvent, Assets, Handle};
|
use bevy_asset::{AssetEvent, Assets, Handle};
|
||||||
use bevy_ecs::system::{Res, ResMut};
|
use bevy_ecs::system::{Res, ResMut};
|
||||||
use bevy_ecs::{event::EventReader, system::Resource};
|
use bevy_ecs::{event::EventReader, system::Resource};
|
||||||
use bevy_utils::{default, tracing::error, Entry, HashMap, HashSet};
|
use bevy_utils::{
|
||||||
|
default,
|
||||||
|
tracing::{debug, error},
|
||||||
|
Entry, HashMap, HashSet,
|
||||||
|
};
|
||||||
use std::{hash::Hash, iter::FusedIterator, mem, ops::Deref, sync::Arc};
|
use std::{hash::Hash, iter::FusedIterator, mem, ops::Deref, sync::Arc};
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
use wgpu::{
|
use wgpu::{
|
||||||
@ -20,7 +24,7 @@ use wgpu::{
|
|||||||
VertexBufferLayout as RawVertexBufferLayout,
|
VertexBufferLayout as RawVertexBufferLayout,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum PipelineDescriptor {
|
pub enum PipelineDescriptor {
|
||||||
RenderPipelineDescriptor(Box<RenderPipelineDescriptor>),
|
RenderPipelineDescriptor(Box<RenderPipelineDescriptor>),
|
||||||
ComputePipelineDescriptor(Box<ComputePipelineDescriptor>),
|
ComputePipelineDescriptor(Box<ComputePipelineDescriptor>),
|
||||||
}
|
}
|
||||||
@ -47,9 +51,9 @@ impl CachedComputePipelineId {
|
|||||||
pub const INVALID: Self = CachedComputePipelineId(usize::MAX);
|
pub const INVALID: Self = CachedComputePipelineId(usize::MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct CachedPipeline {
|
pub struct CachedPipeline {
|
||||||
descriptor: PipelineDescriptor,
|
pub descriptor: PipelineDescriptor,
|
||||||
state: CachedPipelineState,
|
pub state: CachedPipelineState,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@ -137,6 +141,10 @@ impl ShaderCache {
|
|||||||
shader_defs.push(String::from("NO_STORAGE_BUFFERS_SUPPORT"));
|
shader_defs.push(String::from("NO_STORAGE_BUFFERS_SUPPORT"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
debug!(
|
||||||
|
"processing shader {:?}, with shader defs {:?}",
|
||||||
|
handle, shader_defs
|
||||||
|
);
|
||||||
let processed = self.processor.process(
|
let processed = self.processor.process(
|
||||||
shader,
|
shader,
|
||||||
&shader_defs,
|
&shader_defs,
|
||||||
@ -273,6 +281,10 @@ pub struct PipelineCache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl PipelineCache {
|
impl PipelineCache {
|
||||||
|
pub fn pipelines(&self) -> impl Iterator<Item = &CachedPipeline> {
|
||||||
|
self.pipelines.iter()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn new(device: RenderDevice) -> Self {
|
pub fn new(device: RenderDevice) -> Self {
|
||||||
Self {
|
Self {
|
||||||
device,
|
device,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user