webgpu.d.ts 17 KB

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