import { type A3DColorManagementPolicy, type A3DColorSpace, type A3DTextureSemantic } from "./ColorManagement";
import { type BloomOptions, type ChromaticAberrationOptions, type ColorGradeOptions, type ContactShadowPostProcessOptions, type DepthOfFieldOptions, type FXAAOptions, type FilmGrainOptions, type MotionBlurOptions, type OutlineOptions, type PostProcessColorSpace, type SSAOOptions, type SSROptions, type TAAOptions, type ToneMappingCalibration, type ToneMappingOperator, type ToneMappingOptions, type ToneMappingPresetName } from "./PostProcessPass";
import { type RendererPostprocessExecutionMode, type RendererPostprocessPlanDiagnostics } from "./RendererPostprocessPlan";
import type { RenderDevice, RenderDeviceCapability, RenderDeviceDiagnostics, RenderTargetDescriptor } from "./RenderDevice";
export type RendererVisualPipelineStatus = "supported" | "partial" | "unsupported";
export type RendererVisualTargetFormat = Extract<RenderTargetDescriptor["format"], "rgba8" | "rgba16f" | "rgba32f">;
export type RendererVisualPostprocessPassName = "tone-mapping" | "color-grade" | "bloom" | "chromatic-aberration" | "film-grain" | "depth-of-field" | "motion-blur" | "contact-shadow" | "ssao" | "ssr" | "taa" | "outline" | "fxaa";
export type RendererUnsupportedVisualCapability = "display-p3-output" | "rec2020-output" | "hdr-display-swapchain" | "automatic-png-color-profile";
export interface RendererVisualPostprocessDescriptor {
    readonly targetFormat?: RendererVisualTargetFormat;
    readonly toneMapping?: ToneMappingOptions | false;
    readonly colorGrade?: ColorGradeOptions | boolean;
    readonly bloom?: BloomOptions | boolean;
    readonly chromaticAberration?: ChromaticAberrationOptions | boolean;
    readonly filmGrain?: FilmGrainOptions | boolean;
    readonly depthOfField?: DepthOfFieldOptions | false;
    readonly motionBlur?: MotionBlurOptions | false;
    readonly contactShadow?: ContactShadowPostProcessOptions | false;
    readonly ssao?: SSAOOptions | false;
    readonly ssr?: SSROptions | false;
    readonly taa?: TAAOptions | false;
    readonly outline?: OutlineOptions | boolean;
    readonly fxaa?: FXAAOptions | boolean;
}
export interface RendererCanvasBackingInput {
    readonly cssWidth: number;
    readonly cssHeight: number;
    readonly devicePixelRatio: number;
    readonly actualWidth?: number;
    readonly actualHeight?: number;
}
export interface RendererCanvasBackingReport {
    readonly status: RendererVisualPipelineStatus;
    readonly cssWidth: number;
    readonly cssHeight: number;
    readonly devicePixelRatio: number;
    readonly expectedWidth: number;
    readonly expectedHeight: number;
    readonly actualWidth?: number;
    readonly actualHeight?: number;
    readonly effectiveDevicePixelRatio?: number;
    readonly backingStoreMatchesDisplay: boolean;
    readonly warnings: readonly string[];
}
export interface RendererScreenshotConsistencyInput {
    readonly width: number;
    readonly height: number;
    readonly byteLength: number;
    readonly expectedWidth: number;
    readonly expectedHeight: number;
    readonly expectedByteLength?: number;
    readonly colorSpace?: A3DColorSpace;
}
export interface RendererScreenshotConsistencyReport {
    readonly status: RendererVisualPipelineStatus;
    readonly width: number;
    readonly height: number;
    readonly byteLength: number;
    readonly expectedWidth: number;
    readonly expectedHeight: number;
    readonly expectedByteLength: number;
    readonly colorSpace: A3DColorSpace;
    readonly pixelFormat: "rgba8";
    readonly readbackMatchesBackingStore: boolean;
    readonly colorProfileEmbedded: false;
    readonly warnings: readonly string[];
}
export interface RendererCaptureQualityInput {
    readonly cssWidth: number;
    readonly cssHeight: number;
    readonly backingWidth: number;
    readonly backingHeight: number;
    readonly screenshotWidth: number;
    readonly screenshotHeight: number;
    readonly captureCssWidth?: number;
    readonly captureCssHeight?: number;
    readonly devicePixelRatio?: number;
    readonly minimumEffectiveDpr?: number;
    readonly label?: string;
}
export interface RendererCaptureQualityReport {
    readonly status: RendererVisualPipelineStatus;
    readonly label?: string;
    readonly cssWidth: number;
    readonly cssHeight: number;
    readonly backingWidth: number;
    readonly backingHeight: number;
    readonly screenshotWidth: number;
    readonly screenshotHeight: number;
    readonly captureCssWidth: number;
    readonly captureCssHeight: number;
    readonly devicePixelRatio?: number;
    readonly minimumEffectiveDpr: number;
    readonly effectiveBackingDprX: number;
    readonly effectiveBackingDprY: number;
    readonly effectiveCaptureDprX: number;
    readonly effectiveCaptureDprY: number;
    readonly captureToBackingScaleX: number;
    readonly captureToBackingScaleY: number;
    readonly capturesFullCanvas: boolean;
    readonly fullCanvasPixelMatch: boolean;
    readonly captureDownsamplesCanvas: boolean;
    readonly captureUpscalesCanvas: boolean;
    readonly meetsMinimumEffectiveDpr: boolean;
    readonly warnings: readonly string[];
}
export interface RendererFrameCadenceInput {
    readonly targetFrameMs?: number;
    readonly renderMs?: number;
    readonly loopMs?: number;
    readonly frameIntervalMs?: number;
    readonly readbackMs?: number;
    readonly screenshotCaptureOverheadMs?: number;
    readonly sampleCount?: number;
}
export interface RendererFrameCadenceReport {
    readonly status: RendererVisualPipelineStatus;
    readonly targetFrameMs: number;
    readonly renderMs?: number;
    readonly loopMs?: number;
    readonly frameIntervalMs?: number;
    readonly readbackMs?: number;
    readonly screenshotCaptureOverheadMs?: number;
    readonly sampleCount?: number;
    readonly renderBudgetRatio?: number;
    readonly loopBudgetRatio?: number;
    readonly frameIntervalBudgetRatio?: number;
    readonly readbackBudgetRatio?: number;
    readonly captureOverheadFrames?: number;
    readonly loopHeadroomMs?: number;
    readonly stableForCapture: boolean;
    readonly warnings: readonly string[];
}
export interface RendererVisualPipelineReportOptions {
    readonly device: RenderDevice;
    readonly width: number;
    readonly height: number;
    readonly postprocess?: RendererVisualPostprocessDescriptor | boolean;
    readonly colorManagement?: A3DColorManagementPolicy;
    readonly canvas?: RendererCanvasBackingInput;
    readonly screenshot?: Omit<RendererScreenshotConsistencyInput, "expectedWidth" | "expectedHeight" | "colorSpace"> & {
        readonly colorSpace?: A3DColorSpace;
    };
    readonly capture?: RendererCaptureQualityInput;
    readonly frameCadence?: RendererFrameCadenceInput;
    readonly diagnostics?: RenderDeviceDiagnostics;
}
export interface RendererVisualColorReport {
    readonly lightingColorSpace: "linear";
    readonly outputColorSpace: A3DColorSpace;
    readonly supportedOutputColorSpaces: readonly A3DColorSpace[];
    readonly unsupportedOutputColorSpaces: readonly ["display-p3", "rec2020"];
    readonly texturePolicy: Readonly<Record<A3DTextureSemantic, A3DColorSpace>>;
    readonly ldrFallbackAllowed: boolean;
    readonly fallbackBehavior: string;
}
export interface RendererVisualToneMappingReport {
    readonly status: RendererVisualPipelineStatus;
    readonly enabled: boolean;
    readonly operator?: ToneMappingOperator;
    readonly exposure?: number;
    readonly whitePoint?: number;
    readonly gamma?: number;
    readonly inputColorSpace?: PostProcessColorSpace;
    readonly outputColorSpace?: PostProcessColorSpace;
    readonly calibration?: ToneMappingCalibration;
    readonly availablePresets: readonly ToneMappingPresetName[];
    readonly warnings: readonly string[];
}
export interface RendererVisualPostprocessReport {
    readonly status: RendererVisualPipelineStatus;
    readonly enabled: boolean;
    readonly passNames: readonly RendererVisualPostprocessPassName[];
    readonly targetFormat: RendererVisualTargetFormat;
    readonly sourceTargetFormat: RendererVisualTargetFormat;
    readonly executionMode: RendererPostprocessExecutionMode;
    readonly nativePresentation: boolean;
    readonly usesReadback: boolean;
    readonly missingInputs: readonly string[];
    readonly readbackPassNames: readonly RendererVisualPostprocessPassName[];
    readonly rendererOwnedPassNames: readonly RendererVisualPostprocessPassName[];
    readonly clarityWarnings: readonly string[];
    readonly forwardOutputColorSpace: PostProcessColorSpace;
    readonly presentationColorSpace: A3DColorSpace;
    readonly renderTargetWidth: number;
    readonly renderTargetHeight: number;
    readonly plan?: RendererPostprocessPlanDiagnostics;
    readonly warnings: readonly string[];
}
export interface RendererVisualHdrTargetReport {
    readonly status: RendererVisualPipelineStatus;
    readonly requested: boolean;
    readonly supportedByBackend: boolean;
    readonly capabilityAdvertised: boolean;
    readonly targetFormat: RendererVisualTargetFormat;
    readonly fallbackFormat?: "rgba8";
    readonly toneMappingRequired: boolean;
    readonly warnings: readonly string[];
}
export interface RendererVisualPipelineReport {
    readonly status: RendererVisualPipelineStatus;
    readonly backend: RenderDevice["kind"];
    readonly renderer: string;
    readonly width: number;
    readonly height: number;
    readonly capabilities: readonly RenderDeviceCapability[];
    readonly color: RendererVisualColorReport;
    readonly toneMapping: RendererVisualToneMappingReport;
    readonly hdrTarget: RendererVisualHdrTargetReport;
    readonly postprocess: RendererVisualPostprocessReport;
    readonly canvas?: RendererCanvasBackingReport;
    readonly screenshot?: RendererScreenshotConsistencyReport;
    readonly capture?: RendererCaptureQualityReport;
    readonly frameCadence?: RendererFrameCadenceReport;
    readonly diagnostics?: RenderDeviceDiagnostics;
    readonly unsupportedCapabilities: Readonly<Record<RendererUnsupportedVisualCapability, string>>;
    readonly warnings: readonly string[];
}
export declare function createRendererVisualPipelineReport(options: RendererVisualPipelineReportOptions): RendererVisualPipelineReport;
export declare function evaluateRendererCanvasBacking(input: RendererCanvasBackingInput): RendererCanvasBackingReport;
export declare function evaluateRendererScreenshotConsistency(input: RendererScreenshotConsistencyInput): RendererScreenshotConsistencyReport;
export declare function evaluateRendererCaptureQuality(input: RendererCaptureQualityInput): RendererCaptureQualityReport;
export declare function evaluateRendererFrameCadence(input: RendererFrameCadenceInput): RendererFrameCadenceReport;
//# sourceMappingURL=RendererVisualPipelineReport.d.ts.map