UNPKG

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
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 {};