import type { GPUParticleBackendCapabilities } from "./GPUParticleBackend.js";
export interface ParticleBatchDiagnosticsInput {
    readonly name: string;
    readonly particleCount: number;
    readonly drawCalls?: number;
    readonly staticBytesPerParticle?: number;
    readonly dynamicBytesPerParticle?: number;
}
export interface ParticleBatchDiagnosticsOptions {
    readonly updateMode: "static-geometry" | "cpu-dynamic" | "gpu-compute";
    readonly backend?: GPUParticleBackendCapabilities;
    readonly targetFrameMs?: number;
}
export interface ParticleBatchDiagnostics {
    readonly batches: readonly ParticleBatchDiagnosticsInput[];
    readonly totalParticles: number;
    readonly totalDrawCalls: number;
    readonly staticGeometryBytes: number;
    readonly dynamicUploadBytes: number;
    readonly updateMode: ParticleBatchDiagnosticsOptions["updateMode"];
    readonly gpuBackend: GPUParticleBackendCapabilities;
    readonly warnings: readonly string[];
}
export interface ParticleLayerBudgetInput {
    readonly name: string;
    readonly weight: number;
}
export interface ParticleDensityTier<TMode extends string = string> {
    readonly threshold: number;
    readonly label: string;
    readonly mode: TMode;
}
export interface LayeredParticleBudgetOptions<TMode extends string = string> {
    readonly requestedParticles: number;
    readonly defaultParticles?: number;
    readonly minParticles: number;
    readonly maxParticles: number;
    readonly layers: readonly ParticleLayerBudgetInput[];
    readonly densityTiers: readonly ParticleDensityTier<TMode>[];
    readonly nativeGpuComputeDispatches?: number;
}
export interface ParticleLayerBudget {
    readonly name: string;
    readonly weight: number;
    readonly particleCount: number;
}
export interface LayeredParticleBudgetPlan<TMode extends string = string> {
    readonly requestedParticles: number;
    readonly effectiveParticles: number;
    readonly densityTier: string;
    readonly mode: TMode;
    readonly layers: readonly ParticleLayerBudget[];
    readonly nativeGpuComputeDispatches: number;
}
export declare function createParticleBatchDiagnostics(batches: readonly ParticleBatchDiagnosticsInput[], options: ParticleBatchDiagnosticsOptions): ParticleBatchDiagnostics;
export declare function summarizeParticleBatchDiagnostics(diagnostics: ParticleBatchDiagnostics): readonly string[];
export declare function createLayeredParticleBudgetPlan<TMode extends string>(options: LayeredParticleBudgetOptions<TMode>): LayeredParticleBudgetPlan<TMode>;
//# sourceMappingURL=ParticleDiagnostics.d.ts.map