webgpu.d.ts 21 KB

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