webgpu.d.ts 16 KB

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