webgpu.d.ts 17 KB

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