pub fn queue_shadows<M>(
    shadow_draw_functions: Res<'_, DrawFunctions<Shadow>>,
    prepass_pipeline: Res<'_, PrepassPipeline<M>>,
    render_meshes: Res<'_, RenderAssets<Mesh>>,
    render_mesh_instances: ResMut<'_, RenderMeshInstances>,
    render_materials: Res<'_, RenderMaterials<M>>,
    render_material_instances: Res<'_, ExtractedInstances<AssetId<M>>>,
    pipelines: ResMut<'_, SpecializedMeshPipelines<PrepassPipeline<M>>>,
    pipeline_cache: Res<'_, PipelineCache>,
    render_lightmaps: Res<'_, RenderLightmaps>,
    view_lights: Query<'_, '_, (Entity, &ViewLightEntities)>,
    view_light_shadow_phases: Query<'_, '_, (&LightEntity, &mut RenderPhase<Shadow>)>,
    point_light_entities: Query<'_, '_, &CubemapVisibleEntities, With<ExtractedPointLight>>,
    directional_light_entities: Query<'_, '_, &CascadesVisibleEntities, With<ExtractedDirectionalLight>>,
    spot_light_entities: Query<'_, '_, &VisibleEntities, With<ExtractedPointLight>>
)
where M: Material, <M as AsBindGroup>::Data: PartialEq + Eq + Hash + Clone,