import '../../../../../assert/js/assert.js';
import '../../../../../globals.js';
/**
 * A raked scan implementation capable of non-commutable cases, where:
 *
 * 1. All threads load state into workgroup memory in a coalesced fashion
 * 2. All threads perform an inclusive sequential scan on their data (of grainSize elements)
 * 3. All threads perform an inclusive scan of the "reuced" values for each thread (Hillis-Steele)
 * 4. The remaining values are filled in with the previous scanned value.workgroup
 * 5. The workgroup memory is written to the main output in a coalesced fashion
 *
 * Based on the described coarsened scan in "Programming Massively Parallel Processors" by Hwu, Kirk and Hajj, chap11.
 *
 * Additionally, reductions can be stored in a separate array (for use in multi-level scans), AND/OR
 * scanned reductions can be added into final results (also for use in multi-level scans).
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import { BinaryOp, BufferSlot, RakedSizable, scanComprehensiveWGSLOptions, WGSLMainModule } from '../../../imports.js';
type SelfOptions<T> = {
    binaryOp: BinaryOp<T>;
    inPlace?: boolean;
    storeReduction?: boolean;
    addScannedReduction?: boolean;
    addScannedDoubleReduction?: boolean;
    areScannedReductionsExclusive?: boolean;
    input?: BufferSlot<T[]> | null;
    output?: BufferSlot<T[]> | null;
    data?: BufferSlot<T[]> | null;
    reduction?: BufferSlot<T[]> | null;
    scannedReduction?: BufferSlot<T[]> | null;
    scannedDoubleReduction?: BufferSlot<T[]> | null;
    getAddedValue?: scanComprehensiveWGSLOptions<T>['getAddedValue'];
} & RakedSizable;
export type mainScanWGSLOptions<T> = SelfOptions<T> & Pick<scanComprehensiveWGSLOptions<T>, 'exclusive' | 'lengthExpression' | 'inputOrder' | 'inputAccessOrder' | 'factorOutSubexpressions' | 'stripeReducedOutput'>;
export declare const MAIN_SCAN_DEFAULTS: {
    readonly inPlace: false;
    readonly storeReduction: false;
    readonly addScannedReduction: false;
    readonly addScannedDoubleReduction: false;
    readonly areScannedReductionsExclusive: false;
    readonly input: null;
    readonly output: null;
    readonly data: null;
    readonly reduction: null;
    readonly scannedReduction: null;
    readonly scannedDoubleReduction: null;
    readonly getAddedValue: null;
};
declare const mainScanWGSL: <T>(providedOptions: mainScanWGSLOptions<T>) => WGSLMainModule;
export default mainScanWGSL;
//# sourceMappingURL=mainScanWGSL.d.ts.map