webgpu.d.ts 18 KB

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