typegpu
Version:
A thin layer between JS and WebGPU/WGSL that improves development experience and allows for faster iteration.
72 lines (71 loc) • 4.13 kB
TypeScript
import type { AnyWgslData, BaseData } from '../../data/wgslTypes.ts';
import { type StorageFlag } from '../../extension.ts';
import { type TgpuNamable } from '../../shared/meta.ts';
import type { Infer, InferGPU, InferInput, InferPatch, InferPartial } from '../../shared/repr.ts';
import type { TgpuSoul } from '../../shared/soul.ts';
import { $getNameForward, $gpuValueOf, $internal, $repr, $soul } from '../../shared/symbols.ts';
import { type BufferWriteOptions, type TgpuBuffer, type UniformFlag } from './buffer.ts';
export interface TgpuBufferBindingSoul<TBuffer extends TgpuBuffer<BaseData> = TgpuBuffer<BaseData>> extends TgpuSoul<'uniform' | 'mutable' | 'readonly'> {
readonly buffer: TBuffer;
}
interface TgpuBufferBindingBase<TData extends BaseData> extends TgpuNamable {
readonly [$internal]: true;
readonly [$soul]: TgpuBufferBindingSoul<TgpuBuffer<TData>>;
write(data: InferInput<TData>, options?: BufferWriteOptions): void;
/** @deprecated Use {@link patch} instead. */
writePartial(data: InferPartial<TData>): void;
patch(data: InferPatch<TData>): void;
read(): Promise<Infer<TData>>;
readonly [$gpuValueOf]: InferGPU<TData>;
/** Type-token, not available at runtime */
readonly [$repr]: Infer<TData>;
}
export interface TgpuMutable<out TData extends BaseData> extends TgpuBufferBindingBase<TData> {
readonly resourceType: 'mutable';
readonly buffer: TgpuBuffer<TData> & StorageFlag;
$: InferGPU<TData>;
/** Type-token, not available at runtime */
readonly [$repr]: Infer<TData>;
}
export interface TgpuReadonly<out TData extends BaseData> extends TgpuBufferBindingBase<TData> {
readonly resourceType: 'readonly';
readonly buffer: TgpuBuffer<TData> & StorageFlag;
readonly $: InferGPU<TData>;
/** Type-token, not available at runtime */
readonly [$repr]: Infer<TData>;
}
export interface TgpuUniform<out TData extends BaseData> extends TgpuBufferBindingBase<TData> {
readonly resourceType: 'uniform';
readonly buffer: TgpuBuffer<TData> & UniformFlag;
readonly $: InferGPU<TData>;
}
export type TgpuBufferBinding<TData extends BaseData> = TgpuMutable<TData> | TgpuReadonly<TData> | TgpuUniform<TData>;
export declare function isBufferBinding<TData extends BaseData>(value: unknown): value is TgpuBufferBinding<TData>;
export declare function isUniformBinding<TData extends BaseData>(value: unknown): value is TgpuUniform<TData>;
export declare function isMutableBinding<TData extends BaseData>(value: unknown): value is TgpuMutable<TData>;
export declare function isReadonlyBinding<TData extends BaseData>(value: unknown): value is TgpuReadonly<TData>;
/** @deprecated Use 'isBufferBinding' instead. */
export declare const isBufferShorthand: typeof isBufferBinding;
type BoundBuffer<TType, TData extends BaseData> = TgpuBuffer<TData> & (TType extends 'mutable' | 'readonly' ? StorageFlag : UniformFlag);
export declare class TgpuBufferBindingImpl<TType extends 'mutable' | 'readonly' | 'uniform', TData extends BaseData> {
/** Type-token, not available at runtime */
readonly [$repr]: Infer<TData>;
readonly [$soul]: TgpuBufferBindingSoul<BoundBuffer<TType, TData>>;
readonly [$getNameForward]: object;
readonly resourceType: TType;
[$internal]: true;
$: InferGPU<TData>;
readonly [$gpuValueOf]: InferGPU<TData>;
constructor(usage: TType, buffer: BoundBuffer<TType, TData>);
get buffer(): BoundBuffer<TType, TData>;
$name(label: string): this;
write(data: InferInput<TData>, options?: BufferWriteOptions): void;
/** @deprecated Use {@link patch} instead. */
writePartial(data: InferPartial<TData>): void;
patch(data: InferPatch<TData>): void;
read(): Promise<Infer<TData>>;
}
export declare function mutable<TData extends AnyWgslData>(buffer: TgpuBuffer<TData> & StorageFlag): TgpuMutable<TData>;
export declare function readonly<TData extends AnyWgslData>(buffer: TgpuBuffer<TData> & StorageFlag): TgpuReadonly<TData>;
export declare function uniform<TData extends AnyWgslData>(buffer: TgpuBuffer<TData> & UniformFlag): TgpuUniform<TData>;
export {};