webgpu.d.ts 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899
  1. // https://github.com/gpuweb/gpuweb/blob/0a48816412b5d08a5fb8b89005e019165a1a2c63/spec/index.bs
  2. // except #280 which removed setSubData
  3. // except #494 which reverted the addition of GPUAdapter.limits
  4. // except #591 which removed Uint32Array from GPUShaderModuleDescriptor
  5. // including #543 which adds GPUPipelineBase.getBindGroupLayout
  6. // v 0.0.24
  7. interface GPUColorDict {
  8. a: number;
  9. b: number;
  10. g: number;
  11. r: number;
  12. }
  13. type GPUColor = [number, number, number, number] | GPUColorDict;
  14. interface GPUOrigin2DDict {
  15. x?: number;
  16. y?: number;
  17. }
  18. type GPUOrigin2D = [number, number] | GPUOrigin2DDict;
  19. interface GPUOrigin3DDict {
  20. x?: number;
  21. y?: number;
  22. z?: number;
  23. }
  24. type GPUOrigin3D = [number, number, number] | GPUOrigin3DDict;
  25. interface GPUExtent3DDict {
  26. width: number;
  27. height: number;
  28. depth: number;
  29. }
  30. type GPUExtent3D = [number, number, number] | GPUExtent3DDict;
  31. type GPUBindingResource =
  32. | GPUSampler
  33. | GPUTextureView
  34. | GPUBufferBinding;
  35. type GPUExtensionName =
  36. | "texture-compression-bc";
  37. type GPUAddressMode = "clamp-to-edge" | "repeat" | "mirror-repeat";
  38. type GPUBindingType =
  39. | "uniform-buffer"
  40. | "storage-buffer"
  41. | "readonly-storage-buffer"
  42. | "sampler"
  43. | "comparison-sampler"
  44. | "sampled-texture"
  45. | "storage-texture"
  46. | "readonly-storage-texture"
  47. | "writeonly-storage-texture";
  48. type GPUBlendFactor =
  49. | "zero"
  50. | "one"
  51. | "src-color"
  52. | "one-minus-src-color"
  53. | "src-alpha"
  54. | "one-minus-src-alpha"
  55. | "dst-color"
  56. | "one-minus-dst-color"
  57. | "dst-alpha"
  58. | "one-minus-dst-alpha"
  59. | "src-alpha-saturated"
  60. | "blend-color"
  61. | "one-minus-blend-color";
  62. type GPUBlendOperation =
  63. | "add"
  64. | "subtract"
  65. | "reverse-subtract"
  66. | "min"
  67. | "max";
  68. type GPUCompareFunction =
  69. | "never"
  70. | "less"
  71. | "equal"
  72. | "less-equal"
  73. | "greater"
  74. | "not-equal"
  75. | "greater-equal"
  76. | "always";
  77. type GPUCullMode = "none" | "front" | "back";
  78. type GPUFilterMode = "nearest" | "linear";
  79. type GPUFrontFace = "ccw" | "cw";
  80. type GPUIndexFormat = "uint16" | "uint32";
  81. type GPUInputStepMode = "vertex" | "instance";
  82. type GPULoadOp = "load";
  83. type GPUPrimitiveTopology =
  84. | "point-list"
  85. | "line-list"
  86. | "line-strip"
  87. | "triangle-list"
  88. | "triangle-strip";
  89. type GPUStencilOperation =
  90. | "keep"
  91. | "zero"
  92. | "replace"
  93. | "invert"
  94. | "increment-clamp"
  95. | "decrement-clamp"
  96. | "increment-wrap"
  97. | "decrement-wrap";
  98. type GPUStoreOp = "store" | "clear";
  99. type GPUTextureDimension = "1d" | "2d" | "3d";
  100. type GPUTextureFormat =
  101. | "r8unorm"
  102. | "r8snorm"
  103. | "r8uint"
  104. | "r8sint"
  105. | "r16uint"
  106. | "r16sint"
  107. | "r16float"
  108. | "rg8unorm"
  109. | "rg8snorm"
  110. | "rg8uint"
  111. | "rg8sint"
  112. | "r32uint"
  113. | "r32sint"
  114. | "r32float"
  115. | "rg16uint"
  116. | "rg16sint"
  117. | "rg16float"
  118. | "rgba8unorm"
  119. | "rgba8unorm-srgb"
  120. | "rgba8snorm"
  121. | "rgba8uint"
  122. | "rgba8sint"
  123. | "bgra8unorm"
  124. | "bgra8unorm-srgb"
  125. | "rgb10a2unorm"
  126. | "rg11b10float"
  127. | "rg32uint"
  128. | "rg32sint"
  129. | "rg32float"
  130. | "rgba16uint"
  131. | "rgba16sint"
  132. | "rgba16float"
  133. | "rgba32uint"
  134. | "rgba32sint"
  135. | "rgba32float"
  136. | "depth32float"
  137. | "depth24plus"
  138. | "depth24plus-stencil8";
  139. type GPUTextureComponentType = "float" | "sint" | "uint";
  140. type GPUTextureViewDimension =
  141. | "1d"
  142. | "2d"
  143. | "2d-array"
  144. | "cube"
  145. | "cube-array"
  146. | "3d";
  147. type GPUVertexFormat =
  148. | "uchar2"
  149. | "uchar4"
  150. | "char2"
  151. | "char4"
  152. | "uchar2norm"
  153. | "uchar4norm"
  154. | "char2norm"
  155. | "char4norm"
  156. | "ushort2"
  157. | "ushort4"
  158. | "short2"
  159. | "short4"
  160. | "ushort2norm"
  161. | "ushort4norm"
  162. | "short2norm"
  163. | "short4norm"
  164. | "half2"
  165. | "half4"
  166. | "float"
  167. | "float2"
  168. | "float3"
  169. | "float4"
  170. | "uint"
  171. | "uint2"
  172. | "uint3"
  173. | "uint4"
  174. | "int"
  175. | "int2"
  176. | "int3"
  177. | "int4";
  178. type GPUTextureAspect = "all" | "stencil-only" | "depth-only";
  179. type GPUBufferUsageFlags = number;
  180. // const GPUBufferUsage: {
  181. // MAP_READ: 0x0001;
  182. // MAP_WRITE: 0x0002;
  183. // COPY_SRC: 0x0004;
  184. // COPY_DST: 0x0008;
  185. // INDEX: 0x0010;
  186. // VERTEX: 0x0020;
  187. // UNIFORM: 0x0040;
  188. // STORAGE: 0x0080;
  189. // INDIRECT: 0x0100;
  190. // };
  191. type GPUColorWriteFlags = number;
  192. // const GPUColorWrite: {
  193. // RED: 0x1;
  194. // GREEN: 0x2;
  195. // BLUE: 0x4;
  196. // ALPHA: 0x8;
  197. // ALL: 0xf;
  198. // };
  199. type GPUShaderStageFlags = number;
  200. // const GPUShaderStage: {
  201. // VERTEX: 0x1;
  202. // FRAGMENT: 0x2;
  203. // COMPUTE: 0x4;
  204. // };
  205. type GPUTextureUsageFlags = number;
  206. // const GPUTextureUsage: {
  207. // COPY_SRC: 0x01;
  208. // COPY_DST: 0x02;
  209. // SAMPLED: 0x04;
  210. // STORAGE: 0x08;
  211. // OUTPUT_ATTACHMENT: 0x10;
  212. // };
  213. interface GPUBindGroupEntry {
  214. binding: number;
  215. resource: GPUBindingResource;
  216. }
  217. interface GPUBindGroupDescriptor extends GPUObjectDescriptorBase {
  218. layout: GPUBindGroupLayout;
  219. entries: Iterable<GPUBindGroupEntry>;
  220. }
  221. interface GPUBindGroupLayoutEntry {
  222. binding: number;
  223. visibility: GPUShaderStageFlags;
  224. type: GPUBindingType;
  225. viewDimension?: GPUTextureViewDimension;
  226. textureComponentType?: GPUTextureComponentType;
  227. multisampled?: boolean;
  228. hasDynamicOffset?: boolean;
  229. storageTextureFormat?: GPUTextureFormat;
  230. }
  231. interface GPUBindGroupLayoutDescriptor
  232. extends GPUObjectDescriptorBase {
  233. entries: Iterable<GPUBindGroupLayoutEntry>;
  234. }
  235. interface GPUBlendDescriptor {
  236. dstFactor?: GPUBlendFactor;
  237. operation?: GPUBlendOperation;
  238. srcFactor?: GPUBlendFactor;
  239. }
  240. interface GPUColorStateDescriptor {
  241. format: GPUTextureFormat;
  242. alphaBlend?: GPUBlendDescriptor;
  243. colorBlend?: GPUBlendDescriptor;
  244. writeMask?: GPUColorWriteFlags;
  245. }
  246. interface GPUBufferBinding {
  247. buffer: GPUBuffer;
  248. offset?: number;
  249. size?: number;
  250. }
  251. interface GPUBufferCopyView {
  252. buffer: GPUBuffer;
  253. offset?: number;
  254. bytesPerRow: number;
  255. rowsPerImage: number;
  256. }
  257. interface GPUTextureCopyView {
  258. texture: GPUTexture;
  259. mipLevel?: number;
  260. arrayLayer?: number;
  261. origin?: GPUOrigin3D;
  262. }
  263. interface GPUImageBitmapCopyView {
  264. imageBitmap: ImageBitmap;
  265. origin?: GPUOrigin2D;
  266. }
  267. interface GPUBufferDescriptor extends GPUObjectDescriptorBase {
  268. size: number;
  269. usage: GPUBufferUsageFlags;
  270. }
  271. interface GPUCommandEncoderDescriptor extends GPUObjectDescriptorBase {
  272. label?: string;
  273. }
  274. interface GPUComputePipelineDescriptor
  275. extends GPUPipelineDescriptorBase {
  276. computeStage: GPUProgrammableStageDescriptor;
  277. }
  278. interface GPUDepthStencilStateDescriptor {
  279. format: GPUTextureFormat;
  280. depthWriteEnabled?: boolean;
  281. depthCompare?: GPUCompareFunction;
  282. stencilFront?: GPUStencilStateFaceDescriptor;
  283. stencilBack?: GPUStencilStateFaceDescriptor;
  284. stencilReadMask?: number;
  285. stencilWriteMask?: number;
  286. }
  287. interface GPUDeviceDescriptor extends GPUObjectDescriptorBase {
  288. extensions?: Iterable<GPUExtensionName>;
  289. limits?: GPULimits;
  290. }
  291. interface GPUFenceDescriptor extends GPUObjectDescriptorBase {
  292. initialValue?: number;
  293. label?: string;
  294. signalQueue?: GPUQueue;
  295. }
  296. interface GPUVertexAttributeDescriptor {
  297. offset: number;
  298. format: GPUVertexFormat;
  299. shaderLocation: number;
  300. }
  301. interface GPUVertexBufferLayoutDescriptor {
  302. arrayStride: number;
  303. stepMode?: GPUInputStepMode;
  304. attributes: Iterable<GPUVertexAttributeDescriptor>;
  305. }
  306. interface GPUVertexStateDescriptor {
  307. indexFormat?: GPUIndexFormat;
  308. vertexBuffers: Iterable<GPUVertexBufferLayoutDescriptor>;
  309. }
  310. interface GPULimits {
  311. maxBindGroups?: number;
  312. maxDynamicUniformBuffersPerPipelineLayout?: number;
  313. maxDynamicStorageBuffersPerPipelineLayout?: number;
  314. maxSampledTexturesPerShaderStage?: number;
  315. maxSamplersPerShaderStage?: number;
  316. maxStorageBuffersPerShaderStage?: number;
  317. maxStorageTexturesPerShaderStage?: number;
  318. maxUniformBuffersPerShaderStage?: number;
  319. }
  320. interface GPULimitsOut extends GPULimits {
  321. maxBindGroups: number;
  322. maxDynamicUniformBuffersPerPipelineLayout: number;
  323. maxDynamicStorageBuffersPerPipelineLayout: number;
  324. maxSampledTexturesPerShaderStage: number;
  325. maxSamplersPerShaderStage: number;
  326. maxStorageBuffersPerShaderStage: number;
  327. maxStorageTexturesPerShaderStage: number;
  328. maxUniformBuffersPerShaderStage: number;
  329. }
  330. interface GPUPipelineDescriptorBase {
  331. label?: string;
  332. layout?: GPUPipelineLayout;
  333. }
  334. interface GPUPipelineLayoutDescriptor extends GPUObjectDescriptorBase {
  335. bindGroupLayouts: Iterable<GPUBindGroupLayout>;
  336. }
  337. interface GPUProgrammableStageDescriptor {
  338. module: GPUShaderModule;
  339. entryPoint: string;
  340. }
  341. interface GPURasterizationStateDescriptor {
  342. frontFace?: GPUFrontFace;
  343. cullMode?: GPUCullMode;
  344. depthBias?: number;
  345. depthBiasSlopeScale?: number;
  346. depthBiasClamp?: number;
  347. }
  348. interface GPURenderPassColorAttachmentDescriptor {
  349. attachment: GPUTextureView;
  350. resolveTarget?: GPUTextureView;
  351. loadValue: GPULoadOp | GPUColor;
  352. storeOp: GPUStoreOp;
  353. }
  354. interface GPURenderPassDepthStencilAttachmentDescriptor {
  355. attachment: GPUTextureView;
  356. depthLoadValue: GPULoadOp | number;
  357. depthStoreOp: GPUStoreOp;
  358. stencilLoadValue: GPULoadOp | number;
  359. stencilStoreOp: GPUStoreOp;
  360. }
  361. interface GPURenderPassDescriptor extends GPUObjectDescriptorBase {
  362. colorAttachments: Iterable<GPURenderPassColorAttachmentDescriptor>;
  363. depthStencilAttachment?: GPURenderPassDepthStencilAttachmentDescriptor;
  364. }
  365. interface GPURenderPipelineStageDescriptor {
  366. vertexStage: GPUProgrammableStageDescriptor;
  367. fragmentStage?: GPUProgrammableStageDescriptor;
  368. }
  369. interface GPURenderPipelineDescriptor
  370. extends GPUPipelineDescriptorBase, GPUPipelineDescriptorBase {
  371. primitiveTopology: GPUPrimitiveTopology;
  372. rasterizationState?: GPURasterizationStateDescriptor;
  373. colorStates: Iterable<GPUColorStateDescriptor>;
  374. depthStencilState?: GPUDepthStencilStateDescriptor;
  375. vertexState?: GPUVertexStateDescriptor;
  376. sampleCount?: number;
  377. sampleMask?: number;
  378. alphaToCoverageEnabled?: boolean;
  379. }
  380. interface GPUSamplerDescriptor extends GPUObjectDescriptorBase {
  381. compare?: GPUCompareFunction;
  382. lodMaxClamp?: number;
  383. lodMinClamp?: number;
  384. magFilter?: GPUFilterMode;
  385. maxAnisotropy?: number;
  386. minFilter?: GPUFilterMode;
  387. mipmapFilter?: GPUFilterMode;
  388. addressModeU?: GPUAddressMode;
  389. addressModeV?: GPUAddressMode;
  390. addressModeW?: GPUAddressMode;
  391. }
  392. interface GPUShaderModuleDescriptor extends GPUObjectDescriptorBase {
  393. code: Uint32Array | string;
  394. label?: string;
  395. }
  396. interface GPUStencilStateFaceDescriptor {
  397. compare?: GPUCompareFunction;
  398. depthFailOp?: GPUStencilOperation;
  399. passOp?: GPUStencilOperation;
  400. failOp?: GPUStencilOperation;
  401. }
  402. interface GPUSwapChainDescriptor extends GPUObjectDescriptorBase {
  403. device: GPUDevice;
  404. format: GPUTextureFormat;
  405. usage?: GPUTextureUsageFlags;
  406. }
  407. interface GPUTextureDescriptor extends GPUObjectDescriptorBase {
  408. size: GPUExtent3D;
  409. mipLevelCount?: number;
  410. sampleCount?: number;
  411. dimension?: GPUTextureDimension;
  412. format: GPUTextureFormat;
  413. usage: GPUTextureUsageFlags;
  414. }
  415. interface GPUTextureViewDescriptor extends GPUObjectDescriptorBase {
  416. format?: GPUTextureFormat;
  417. dimension?: GPUTextureViewDimension;
  418. aspect?: GPUTextureAspect;
  419. baseArrayLayer?: number;
  420. baseMipLevel?: number;
  421. arrayLayerCount?: number;
  422. mipLevelCount?: number;
  423. }
  424. declare class GPUAdapter {
  425. readonly name: string;
  426. readonly extensions: GPUExtensionName[];
  427. readonly limits: GPULimitsOut;
  428. requestDevice(descriptor?: GPUDeviceDescriptor): Promise<GPUDevice>;
  429. }
  430. declare class GPUBindGroup implements GPUObjectBase {
  431. label: string | undefined;
  432. }
  433. declare class GPUBindGroupLayout implements GPUObjectBase {
  434. label: string | undefined;
  435. }
  436. declare class GPUBuffer implements GPUObjectBase {
  437. label: string | undefined;
  438. //readonly mapping: ArrayBuffer | null;
  439. destroy(): void;
  440. unmap(): void;
  441. mapAsync(mode:number, offset?:number, size?: number): Promise<void>;
  442. getMappedRange(offset?:number, size?:number): ArrayBuffer;
  443. mapWriteAsync(): Promise<ArrayBuffer>;
  444. mapReadAsync(): Promise<ArrayBuffer>;
  445. // TODO: Remove setSubData (#280)
  446. writeBuffer(
  447. offset: number,
  448. src: ArrayBufferView,
  449. srcOffset?: number,
  450. byteLength?: number
  451. ): void;
  452. }
  453. declare class GPUCommandBuffer implements GPUObjectBase {
  454. label: string | undefined;
  455. }
  456. interface GPUCommandBufferDescriptor extends GPUObjectDescriptorBase {}
  457. declare class GPUCommandEncoder implements GPUObjectBase {
  458. label: string | undefined;
  459. beginComputePass(
  460. descriptor?: GPUComputePassDescriptor
  461. ): GPUComputePassEncoder;
  462. beginRenderPass(descriptor: GPURenderPassDescriptor): GPURenderPassEncoder;
  463. copyBufferToBuffer(
  464. source: GPUBuffer,
  465. sourceOffset: number,
  466. destination: GPUBuffer,
  467. destinationOffset: number,
  468. size: number
  469. ): void;
  470. copyBufferToTexture(
  471. source: GPUBufferCopyView,
  472. destination: GPUTextureCopyView,
  473. copySize: GPUExtent3D
  474. ): void;
  475. copyTextureToBuffer(
  476. source: GPUTextureCopyView,
  477. destination: GPUBufferCopyView,
  478. copySize: GPUExtent3D
  479. ): void;
  480. copyTextureToTexture(
  481. source: GPUTextureCopyView,
  482. destination: GPUTextureCopyView,
  483. copySize: GPUExtent3D
  484. ): void;
  485. finish(descriptor?: GPUCommandBufferDescriptor): GPUCommandBuffer;
  486. popDebugGroup(): void;
  487. pushDebugGroup(groupLabel: string): void;
  488. insertDebugMarker(markerLabel: string): void;
  489. }
  490. interface GPUComputePassDescriptor extends GPUObjectDescriptorBase {}
  491. declare class GPUComputePassEncoder implements GPUProgrammablePassEncoder {
  492. label: string | undefined;
  493. setBindGroup(
  494. index: number,
  495. bindGroup: GPUBindGroup,
  496. dynamicOffsets?: Iterable<number>
  497. ): void;
  498. popDebugGroup(): void;
  499. pushDebugGroup(groupLabel: string): void;
  500. insertDebugMarker(markerLabel: string): void;
  501. setPipeline(pipeline: GPUComputePipeline): void;
  502. dispatch(x: number, y?: number, z?: number): void;
  503. dispatchIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;
  504. endPass(): void;
  505. }
  506. declare class GPUComputePipeline implements GPUPipelineBase {
  507. label: string | undefined;
  508. getBindGroupLayout(index: number): GPUBindGroupLayout;
  509. }
  510. interface GPUObjectBase {
  511. label: string | undefined;
  512. }
  513. interface GPUPipelineBase extends GPUObjectBase {
  514. getBindGroupLayout(index: number): GPUBindGroupLayout;
  515. }
  516. interface GPUObjectDescriptorBase {
  517. label?: string;
  518. }
  519. // SwapChain / CanvasContext
  520. declare class GPUCanvasContext {
  521. configureSwapChain(descriptor: GPUSwapChainDescriptor): GPUSwapChain;
  522. getSwapChainPreferredFormat(device: GPUDevice): Promise<GPUTextureFormat>;
  523. }
  524. declare class GPUDevice extends EventTarget implements GPUObjectBase {
  525. label: string | undefined;
  526. readonly adapter: GPUAdapter;
  527. readonly extensions: GPUExtensionName[];
  528. readonly limits: GPULimitsOut;
  529. createBindGroup(descriptor: GPUBindGroupDescriptor): GPUBindGroup;
  530. createBindGroupLayout(
  531. descriptor: GPUBindGroupLayoutDescriptor
  532. ): GPUBindGroupLayout;
  533. createBuffer(descriptor: GPUBufferDescriptor): GPUBuffer;
  534. createBufferMapped(
  535. descriptor: GPUBufferDescriptor
  536. ): [GPUBuffer, ArrayBuffer];
  537. createBufferMappedAsync(
  538. descriptor: GPUBufferDescriptor
  539. ): Promise<[GPUBuffer, ArrayBuffer]>;
  540. createComputePipeline(
  541. descriptor: GPUComputePipelineDescriptor
  542. ): GPUComputePipeline;
  543. createPipelineLayout(
  544. descriptor: GPUPipelineLayoutDescriptor
  545. ): GPUPipelineLayout;
  546. createRenderPipeline(
  547. descriptor: GPURenderPipelineDescriptor
  548. ): GPURenderPipeline;
  549. createSampler(descriptor?: GPUSamplerDescriptor): GPUSampler;
  550. createShaderModule(descriptor: GPUShaderModuleDescriptor): GPUShaderModule;
  551. createTexture(descriptor: GPUTextureDescriptor): GPUTexture;
  552. createCommandEncoder(
  553. descriptor?: GPUCommandEncoderDescriptor
  554. ): GPUCommandEncoder;
  555. createRenderBundleEncoder(
  556. descriptor: GPURenderBundleEncoderDescriptor
  557. ): GPURenderBundleEncoder;
  558. defaultQueue: GPUQueue;
  559. pushErrorScope(filter: GPUErrorFilter): void;
  560. popErrorScope(): Promise<GPUError | null>;
  561. onuncapturederror: Event | undefined;
  562. readonly lost: Promise<GPUDeviceLostInfo>;
  563. }
  564. declare class GPUFence implements GPUObjectBase {
  565. label: string | undefined;
  566. getCompletedValue(): number;
  567. onCompletion(completionValue: number): Promise<void>;
  568. }
  569. declare class GPUPipelineLayout implements GPUObjectBase {
  570. label: string | undefined;
  571. }
  572. interface GPUProgrammablePassEncoder extends GPUObjectBase {
  573. setBindGroup(
  574. index: number,
  575. bindGroup: GPUBindGroup,
  576. dynamicOffsets?: Iterable<number>
  577. ): void;
  578. popDebugGroup(): void;
  579. pushDebugGroup(groupLabel: string): void;
  580. insertDebugMarker(markerLabel: string): void;
  581. }
  582. declare class GPUQueue implements GPUObjectBase {
  583. label: string | undefined;
  584. signal(fence: GPUFence, signalValue: number): void;
  585. submit(commandBuffers: Iterable<GPUCommandBuffer>): void;
  586. createFence(descriptor?: GPUFenceDescriptor): GPUFence;
  587. copyImageBitmapToTexture(
  588. source: GPUImageBitmapCopyView,
  589. destination: GPUTextureCopyView,
  590. copySize: GPUExtent3D
  591. ): void;
  592. }
  593. interface GPURenderEncoderBase extends GPUProgrammablePassEncoder {
  594. setPipeline(pipeline: GPURenderPipeline): void;
  595. setIndexBuffer(buffer: GPUBuffer, offset?: number, size?: number): void;
  596. setVertexBuffer(slot: number, buffer: GPUBuffer, offset?: number, size?: number): void;
  597. draw(
  598. vertexCount: number,
  599. instanceCount?: number,
  600. firstVertex?: number,
  601. firstInstance?: number
  602. ): void;
  603. drawIndexed(
  604. indexCount: number,
  605. instanceCount?: number,
  606. firstIndex?: number,
  607. baseVertex?: number,
  608. firstInstance?: number
  609. ): void;
  610. drawIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;
  611. drawIndexedIndirect(
  612. indirectBuffer: GPUBuffer,
  613. indirectOffset: number
  614. ): void;
  615. }
  616. declare class GPURenderPassEncoder implements GPURenderEncoderBase {
  617. label: string | undefined;
  618. setBindGroup(
  619. index: number,
  620. bindGroup: GPUBindGroup,
  621. dynamicOffsets?: Iterable<number>
  622. ): void;
  623. popDebugGroup(): void;
  624. pushDebugGroup(groupLabel: string): void;
  625. insertDebugMarker(markerLabel: string): void;
  626. setPipeline(pipeline: GPURenderPipeline): void;
  627. setIndexBuffer(buffer: GPUBuffer, offset?: number): void;
  628. setVertexBuffer(slot: number, buffer: GPUBuffer, offset?: number): void;
  629. draw(
  630. vertexCount: number,
  631. instanceCount: number,
  632. firstVertex: number,
  633. firstInstance: number
  634. ): void;
  635. drawIndexed(
  636. indexCount: number,
  637. instanceCount: number,
  638. firstIndex: number,
  639. baseVertex: number,
  640. firstInstance: number
  641. ): void;
  642. drawIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;
  643. drawIndexedIndirect(
  644. indirectBuffer: GPUBuffer,
  645. indirectOffset: number
  646. ): void;
  647. setViewport(
  648. x: number,
  649. y: number,
  650. width: number,
  651. height: number,
  652. minDepth: number,
  653. maxDepth: number
  654. ): void;
  655. setScissorRect(x: number, y: number, width: number, height: number): void;
  656. setBlendColor(color: GPUColor): void;
  657. setStencilReference(reference: number): void;
  658. executeBundles(bundles: Iterable<GPURenderBundle>): void;
  659. endPass(): void;
  660. }
  661. interface GPURenderBundleDescriptor extends GPUObjectDescriptorBase {}
  662. declare class GPURenderBundle implements GPUObjectBase {
  663. label: string | undefined;
  664. }
  665. declare class GPURenderBundleEncoder implements GPURenderEncoderBase {
  666. label: string | undefined;
  667. setBindGroup(
  668. index: number,
  669. bindGroup: GPUBindGroup,
  670. dynamicOffsets?: Iterable<number>
  671. ): void;
  672. popDebugGroup(): void;
  673. pushDebugGroup(groupLabel: string): void;
  674. insertDebugMarker(markerLabel: string): void;
  675. setPipeline(pipeline: GPURenderPipeline): void;
  676. setIndexBuffer(buffer: GPUBuffer, offset?: number): void;
  677. setVertexBuffer(slot: number, buffer: GPUBuffer, offset?: number): void;
  678. draw(
  679. vertexCount: number,
  680. instanceCount: number,
  681. firstVertex: number,
  682. firstInstance: number
  683. ): void;
  684. drawIndexed(
  685. indexCount: number,
  686. instanceCount: number,
  687. firstIndex: number,
  688. baseVertex: number,
  689. firstInstance: number
  690. ): void;
  691. drawIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;
  692. drawIndexedIndirect(
  693. indirectBuffer: GPUBuffer,
  694. indirectOffset: number
  695. ): void;
  696. finish(descriptor?: GPURenderBundleDescriptor): GPURenderBundle;
  697. }
  698. interface GPURenderBundleEncoderDescriptor
  699. extends GPUObjectDescriptorBase {
  700. colorFormats: Iterable<GPUTextureFormat>;
  701. depthStencilFormat?: GPUTextureFormat;
  702. sampleCount?: number;
  703. }
  704. declare class GPURenderPipeline implements GPUPipelineBase {
  705. label: string | undefined;
  706. getBindGroupLayout: (index: number) => GPUBindGroupLayout;
  707. }
  708. declare class GPUSampler implements GPUObjectBase {
  709. label: string | undefined;
  710. }
  711. declare class GPUShaderModule implements GPUObjectBase {
  712. label: string | undefined;
  713. }
  714. declare class GPUSwapChain implements GPUObjectBase {
  715. label: string | undefined;
  716. getCurrentTexture(): GPUTexture;
  717. }
  718. declare class GPUTexture implements GPUObjectBase {
  719. label: string | undefined;
  720. createView(descriptor?: GPUTextureViewDescriptor): GPUTextureView;
  721. destroy(): void;
  722. }
  723. declare class GPUTextureView implements GPUObjectBase {
  724. label: string | undefined;
  725. }
  726. type GPUPowerPreference = "low-power" | "high-performance";
  727. interface GPURequestAdapterOptions {
  728. powerPreference?: GPUPowerPreference;
  729. }
  730. declare class GPU {
  731. requestAdapter(options?: GPURequestAdapterOptions): Promise<GPUAdapter>;
  732. }
  733. // ****************************************************************************
  734. // ERROR SCOPES
  735. // ****************************************************************************
  736. type GPUErrorFilter = "none" | "out-of-memory" | "validation";
  737. declare class GPUOutOfMemoryError {
  738. constructor();
  739. }
  740. declare class GPUValidationError {
  741. constructor(message: string);
  742. readonly message: string;
  743. }
  744. type GPUError = GPUOutOfMemoryError | GPUValidationError;
  745. interface GPUUncapturedErrorEventInit extends EventInit {
  746. error: GPUError;
  747. }
  748. declare class GPUUncapturedErrorEvent extends Event {
  749. constructor(
  750. type: string,
  751. gpuUncapturedErrorEventInitDict: GPUUncapturedErrorEventInit
  752. );
  753. readonly error: GPUError;
  754. }
  755. // ****************************************************************************
  756. // TELEMETRY
  757. // ****************************************************************************
  758. interface GPUDeviceLostInfo {
  759. readonly message: string;
  760. }
  761. interface GPU {
  762. // May reject with DOMException // TODO: DOMException("OperationError")?
  763. requestAdapter(options?: GPURequestAdapterOptions): Promise<GPUAdapter>;
  764. }
  765. interface Navigator {
  766. readonly gpu: GPU | undefined;
  767. }