import { type TgpuNamable } from '../../shared/meta.ts';
import type { ExperimentalTgpuRoot } from '../root/rootTypes.ts';
import type { TgpuDeviceOwningSoul } from '../../shared/soul.ts';
import { $internal, $soul } from '../../shared/symbols.ts';
export interface TgpuQuerySetSoul<T extends GPUQueryType = GPUQueryType> extends TgpuDeviceOwningSoul<'query-set', GPUQuerySet> {
    readonly queryType: T;
    readonly count: number;
}
export interface TgpuQuerySet<T extends GPUQueryType> extends TgpuNamable {
    readonly resourceType: 'query-set';
    readonly type: T;
    readonly count: number;
    readonly querySet: GPUQuerySet;
    readonly destroyed: boolean;
    readonly available: boolean;
    readonly [$soul]: TgpuQuerySetSoul<T>;
    readonly [$internal]: {
        readonly readBuffer: GPUBuffer;
        readonly resolveBuffer: GPUBuffer;
        readonly materialize: () => GPUQuerySet;
    };
    resolve(): void;
    read(): Promise<bigint[]>;
    destroy(): void;
}
export declare function INTERNAL_createQuerySet<T extends GPUQueryType>(group: ExperimentalTgpuRoot, type: T, count: number, rawQuerySet?: GPUQuerySet): TgpuQuerySet<T>;
export declare function isQuerySet<T extends GPUQueryType>(value: unknown): value is TgpuQuerySet<T>;
