Ver código fonte

Update WebGPU to latest spec

sebavan 5 anos atrás
pai
commit
c4841eaea2
2 arquivos alterados com 102 adições e 41 exclusões
  1. 11 10
      src/Engines/WebGPU/webgpuConstants.ts
  2. 91 31
      src/LibDeclarations/webgpu.d.ts

+ 11 - 10
src/Engines/WebGPU/webgpuConstants.ts

@@ -112,16 +112,17 @@ export class WebGPUConstants {
     public static readonly GPUVertexFormat_int3: GPUVertexFormat = "int3";
     public static readonly GPUVertexFormat_int4: GPUVertexFormat = "int4";
 
-    public static readonly GPUBufferUsage_NONE = 0;
-    public static readonly GPUBufferUsage_MAP_READ = 1;
-    public static readonly GPUBufferUsage_MAP_WRITE = 2;
-    public static readonly GPUBufferUsage_TRANSFER_SRC = 4;
-    public static readonly GPUBufferUsage_TRANSFER_DST = 8;
-    public static readonly GPUBufferUsage_INDEX = 16;
-    public static readonly GPUBufferUsage_VERTEX = 32;
-    public static readonly GPUBufferUsage_UNIFORM = 64;
-    public static readonly GPUBufferUsage_STORAGE = 128;
-    public static readonly GPUBufferUsage_INDIRECT = 256;
+    public static readonly GPUBufferUsage_NONE = 0x0000;
+    public static readonly GPUBufferUsage_MAP_READ = 0x0001;
+    public static readonly GPUBufferUsage_MAP_WRITE = 0x0002;
+    public static readonly GPUBufferUsage_COPY_SRC = 0x0004;
+    public static readonly GPUBufferUsage_COPY_DST = 0x0008;
+    public static readonly GPUBufferUsage_INDEX = 0x0010;
+    public static readonly GPUBufferUsage_VERTEX = 0x0020;
+    public static readonly GPUBufferUsage_UNIFORM = 0x0040;
+    public static readonly GPUBufferUsage_STORAGE = 0x0080;
+    public static readonly GPUBufferUsage_INDIRECT = 0x0100;
+    public static readonly GPUBufferUsage_QUERY_RESOLVE = 0x0200;
 
     public static readonly GPUMapMode_READ = 1;
     public static readonly GPUMapMode_WRITE = 2;

+ 91 - 31
src/LibDeclarations/webgpu.d.ts

@@ -1,9 +1,11 @@
-// https://github.com/gpuweb/gpuweb/blob/0a48816412b5d08a5fb8b89005e019165a1a2c63/spec/index.bs
-// except #280 which removed setSubData
+// https://github.com/gpuweb/gpuweb/blob/01b20b4ad93fabae1e8e0d7752515f69708d33e0/spec/index.bs
 // except #494 which reverted the addition of GPUAdapter.limits
 // except #591 which removed Uint32Array from GPUShaderModuleDescriptor
-// including #543 which adds GPUPipelineBase.getBindGroupLayout
-// v 0.0.24
+// except #708's removal of mapWriteAsync/mapReadAsync/createBufferMapped
+// except #691 et al which added pipeline statistics query (still in flux)
+// including #678 which adds GPUBindGroupLayoutEntry.minBufferBindingSize
+// including #605 which adds new mapping, but without removing the old mapping
+// v 0.0.29
 
 interface GPUColorDict {
   a: number;
@@ -221,6 +223,20 @@ type GPUTextureUsageFlags = number;
 //   OUTPUT_ATTACHMENT: 0x10;
 // };
 
+type GPUQueryType =
+  | "occlusion";
+
+type GPUCompilationMessageType =
+  | "error"
+  | "warning"
+  | "info";
+
+type GPUMapModeFlags = number;
+// const GPUMapMode: {
+//   READ:  0x1;
+//   WRITE: 0x2;
+// };
+
 interface GPUBindGroupEntry {
   binding: number;
   resource: GPUBindingResource;
@@ -234,11 +250,11 @@ interface GPUBindGroupDescriptor extends GPUObjectDescriptorBase {
 interface GPUBindGroupLayoutEntry {
   binding: number;
   visibility: GPUShaderStageFlags;
-  type: GPUBindingType;
+  hasDynamicOffset?: boolean;
+  minBufferBindingSize?: number;
   viewDimension?: GPUTextureViewDimension;
   textureComponentType?: GPUTextureComponentType;
   multisampled?: boolean;
-  hasDynamicOffset?: boolean;
   storageTextureFormat?: GPUTextureFormat;
 }
 
@@ -267,13 +283,16 @@ interface GPUBufferBinding {
   size?: number;
 }
 
-interface GPUBufferCopyView {
-  buffer: GPUBuffer;
+interface GPUTextureDataLayout {
   offset?: number;
   bytesPerRow: number;
   rowsPerImage: number;
 }
 
+interface GPUBufferCopyView extends GPUTextureDataLayout {
+  buffer: GPUBuffer;
+}
+
 interface GPUTextureCopyView {
   texture: GPUTexture;
   mipLevel?: number;
@@ -289,6 +308,7 @@ interface GPUImageBitmapCopyView {
 interface GPUBufferDescriptor extends GPUObjectDescriptorBase {
   size: number;
   usage: GPUBufferUsageFlags;
+  mappedAtCreation?: boolean;
 }
 
 interface GPUCommandEncoderDescriptor extends GPUObjectDescriptorBase {
@@ -398,9 +418,11 @@ interface GPURenderPassDepthStencilAttachmentDescriptor {
 
   depthLoadValue: GPULoadOp | number;
   depthStoreOp: GPUStoreOp;
+  depthReadOnly?: boolean;
 
   stencilLoadValue: GPULoadOp | number;
   stencilStoreOp: GPUStoreOp;
+  stencilReadOnly?: boolean;
 }
 
 interface GPURenderPassDescriptor extends GPUObjectDescriptorBase {
@@ -442,6 +464,7 @@ interface GPUSamplerDescriptor extends GPUObjectDescriptorBase {
 interface GPUShaderModuleDescriptor extends GPUObjectDescriptorBase {
   code: Uint32Array | string;
   label?: string;
+  sourceMap?: object;
 }
 
 interface GPUStencilStateFaceDescriptor {
@@ -497,17 +520,12 @@ declare class GPUBuffer implements GPUObjectBase {
   //readonly mapping: ArrayBuffer | null;
   destroy(): void;
   unmap(): void;
-  mapAsync(mode:number, offset?:number, size?: number): Promise<void>;
-  getMappedRange(offset?:number, size?:number): ArrayBuffer;
+
+  mapAsync(mode: GPUMapModeFlags, offset?: number, size?: number): Promise<void>;
+  getMappedRange(offset?: number, size?: number): ArrayBuffer;
+
   mapWriteAsync(): Promise<ArrayBuffer>;
   mapReadAsync(): Promise<ArrayBuffer>;
-  // TODO: Remove setSubData (#280)
-  writeBuffer(
-    offset: number,
-    src: ArrayBufferView,
-    srcOffset?: number,
-    byteLength?: number
-  ): void;
 }
 
 declare class GPUCommandBuffer implements GPUObjectBase {
@@ -635,6 +653,8 @@ declare class GPUDevice extends EventTarget implements GPUObjectBase {
     descriptor: GPURenderBundleEncoderDescriptor
   ): GPURenderBundleEncoder;
 
+  createQuerySet(descriptor: GPUQuerySetDescriptor): GPUQuerySet;
+
   defaultQueue: GPUQueue;
 
   pushErrorScope(filter: GPUErrorFilter): void;
@@ -670,7 +690,20 @@ declare class GPUQueue implements GPUObjectBase {
   label: string | undefined;
   signal(fence: GPUFence, signalValue: number): void;
   submit(commandBuffers: Iterable<GPUCommandBuffer>): void;
+
   createFence(descriptor?: GPUFenceDescriptor): GPUFence;
+
+  writeBuffer(buffer: GPUBuffer,
+    bufferOffset: number,
+    data: ArrayBuffer,
+    dataOffset?: number,
+    size?: number): void;
+
+  writeTexture(destination: GPUTextureCopyView,
+    data: ArrayBuffer,
+    dataLayout: GPUTextureDataLayout,
+    size: GPUExtent3D): void;
+
   copyImageBitmapToTexture(
     source: GPUImageBitmapCopyView,
     destination: GPUTextureCopyView,
@@ -678,6 +711,17 @@ declare class GPUQueue implements GPUObjectBase {
   ): void;
 }
 
+interface GPUQuerySetDescriptor extends GPUObjectDescriptorBase {
+  type: GPUQueryType;
+  count: number;
+}
+
+declare class GPUQuerySet implements GPUObjectBase {
+  label: string | undefined;
+
+  destroy(): void;
+}
+
 interface GPURenderEncoderBase extends GPUProgrammablePassEncoder {
   setPipeline(pipeline: GPURenderPipeline): void;
 
@@ -726,16 +770,16 @@ declare class GPURenderPassEncoder implements GPURenderEncoderBase {
 
   draw(
     vertexCount: number,
-    instanceCount: number,
-    firstVertex: number,
-    firstInstance: number
+    instanceCount?: number,
+    firstVertex?: number,
+    firstInstance?: number
   ): void;
   drawIndexed(
     indexCount: number,
-    instanceCount: number,
-    firstIndex: number,
-    baseVertex: number,
-    firstInstance: number
+    instanceCount?: number,
+    firstIndex?: number,
+    baseVertex?: number,
+    firstInstance?: number
   ): void;
 
   drawIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;
@@ -757,6 +801,9 @@ declare class GPURenderPassEncoder implements GPURenderEncoderBase {
   setBlendColor(color: GPUColor): void;
   setStencilReference(reference: number): void;
 
+  beginOcclusionQuery(queryIndex: number): void;
+  endOcclusionQuery(queryIndex: number): void;
+
   executeBundles(bundles: Iterable<GPURenderBundle>): void;
   endPass(): void;
 }
@@ -787,16 +834,16 @@ declare class GPURenderBundleEncoder implements GPURenderEncoderBase {
 
   draw(
     vertexCount: number,
-    instanceCount: number,
-    firstVertex: number,
-    firstInstance: number
+    instanceCount?: number,
+    firstVertex?: number,
+    firstInstance?: number
   ): void;
   drawIndexed(
     indexCount: number,
-    instanceCount: number,
-    firstIndex: number,
-    baseVertex: number,
-    firstInstance: number
+    instanceCount?: number,
+    firstIndex?: number,
+    baseVertex?: number,
+    firstInstance?: number
   ): void;
 
   drawIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;
@@ -824,8 +871,21 @@ declare class GPUSampler implements GPUObjectBase {
   label: string | undefined;
 }
 
+interface GPUCompilationMessage {
+  readonly message: string;
+  readonly type: GPUCompilationMessageType;
+  readonly lineNum: number;
+  readonly linePos: number;
+}
+
+interface GPUCompilationInfo {
+  readonly messages: Iterable<GPUCompilationMessage>;
+}
+
 declare class GPUShaderModule implements GPUObjectBase {
   label: string | undefined;
+
+  compilationInfo(): Promise<GPUCompilationInfo>;
 }
 
 declare class GPUSwapChain implements GPUObjectBase {