import { Attribute } from '../../../attribute';
import { Conv } from '../../../ops/conv';
import { Tensor } from '../../../tensor';
import { WebGLInferenceHandler } from '../inference-handler';
import { Artifact, ProgramInfo, RunData, TextureLayout, WebGLOperator } from '../types';
import { WebGLConvPacked } from './conv-pack';
export declare class WebGLConv extends Conv {
    unpackedGroupedConvImpl: WebGLUnpackedGroupedConv;
    unpackedConvImpl: WebGLUnpackedConv;
    packedConvImpl: WebGLConvPacked;
    constructor();
    initialize(attributes: Attribute): void;
    run(inferenceHandler: WebGLInferenceHandler, inputs: Tensor[]): Tensor[];
    static calcOutputShape(inputShape: number[], kernelShape: number[], dilations: number[], adjustPads: number[], strides: number[]): number[];
}
export declare class WebGLUnpackedGroupedConv extends Conv implements WebGLOperator {
    run(inferenceHandler: WebGLInferenceHandler, inputs: Tensor[]): Tensor[];
    createProgramInfo(handler: WebGLInferenceHandler, inputs: Tensor[]): ProgramInfo;
    createRunData(handler: WebGLInferenceHandler, programInfo: ProgramInfo, inputs: Tensor[]): RunData;
}
export declare class WebGLUnpackedConv extends Conv {
    run(inferenceHandler: WebGLInferenceHandler, inputs: Tensor[]): Tensor[];
    createProgramInfoArray(inferenceHandler: WebGLInferenceHandler, inputs: Tensor[]): ProgramInfo[];
    createRunDataArray(inferenceHandler: WebGLInferenceHandler, programInfos: ProgramInfo[], inputs: Tensor[]): RunData[];
    createIm2ColProgramInfo(inferenceHandler: WebGLInferenceHandler, inputs: Tensor[], outputShape: number[]): ProgramInfo;
    createDotProductProgramInfo(inferenceHandler: WebGLInferenceHandler, im2colLayout: TextureLayout, inputs: Tensor[], outputShape: number[]): ProgramInfo;
    static prepKernelForDotProduct(shape: number[], group: number, channels: number, kernel: Float32Array): Float32Array;
    static calcIm2ColDims(inputShape: number[], kernelShape: number[], outputShape: number[], channels?: number): number[];
    protected calcSharedDimReadSize(preferredBatchSize: number, sharedDim: number): number;
    protected calcBlockSize(outputLayout: TextureLayout): [number, number] | undefined;
    protected artifacts: Artifact[];
    protected readSize: number;
    protected blockSize: number;
}
