Ver código fonte

Update to 0.0.17 WebGPU.d.ts

Sebastien Vandenberghe 6 anos atrás
pai
commit
fd4d1c6a3f

+ 3 - 3
src/Engines/WebGPU/webgpuConstants.ts

@@ -149,10 +149,10 @@ export class WebGPUConstants {
     public static readonly GPUCompareFunction_never: GPUCompareFunction = "never";
     public static readonly GPUCompareFunction_less: GPUCompareFunction = "less";
     public static readonly GPUCompareFunction_equal: GPUCompareFunction = "equal";
-    public static readonly GPUCompareFunction_lessEqual: GPUCompareFunction = "lessEqual";
+    public static readonly GPUCompareFunction_lessEqual: GPUCompareFunction = "less-equal";
     public static readonly GPUCompareFunction_greater: GPUCompareFunction = "greater";
-    public static readonly GPUCompareFunction_notEqual: GPUCompareFunction = "notEqual";
-    public static readonly GPUCompareFunction_greaterEqual: GPUCompareFunction = "greaterEqual";
+    public static readonly GPUCompareFunction_notEqual: GPUCompareFunction = "not-equal";
+    public static readonly GPUCompareFunction_greaterEqual: GPUCompareFunction = "greater-equal";
     public static readonly GPUCompareFunction_always: GPUCompareFunction = "always";
 
     public static readonly GPUBindingType_uniformBuffer: GPUBindingType = "uniform-buffer";

+ 7 - 7
src/Engines/webgpuEngine.ts

@@ -1903,8 +1903,8 @@ export class WebGPUEngine extends Engine {
         throw new Error("Invalid Format '" + kind + "'");
     }
 
-    private _getVertexInputDescriptor(): GPUVertexInputDescriptor {
-        const descriptors: GPUVertexBufferDescriptor[] = [];
+    private _getVertexInputDescriptor(): GPUVertexStateDescriptor {
+        const descriptors: GPUVertexBufferLayoutDescriptor[] = [];
         const effect = this._currentEffect!;
         const attributes = effect.getAttributesNames();
         for (var index = 0; index < attributes.length; index++) {
@@ -1923,10 +1923,10 @@ export class WebGPUEngine extends Engine {
                 };
 
                 // TODO WEBGPU. Factorize the one with the same underlying buffer.
-                const vertexBufferDescriptor: GPUVertexBufferDescriptor = {
-                    stride: vertexBuffer.byteStride,
+                const vertexBufferDescriptor: GPUVertexBufferLayoutDescriptor = {
+                    arrayStride: vertexBuffer.byteStride,
                     stepMode: vertexBuffer.getIsInstanced() ? WebGPUConstants.GPUInputStepMode_instance : WebGPUConstants.GPUInputStepMode_vertex,
-                    attributeSet: [positionAttributeDescriptor]
+                    attributes: [positionAttributeDescriptor]
                 };
 
                descriptors.push(vertexBufferDescriptor);
@@ -1940,7 +1940,7 @@ export class WebGPUEngine extends Engine {
             };
         }
 
-        const inputStateDescriptor: GPUVertexInputDescriptor = {
+        const inputStateDescriptor: GPUVertexStateDescriptor = {
             indexFormat: this._currentIndexBuffer!.is32Bits ? WebGPUConstants.GPUIndexFormat_uint32 : WebGPUConstants.GPUIndexFormat_uint16,
             vertexBuffers: descriptors
         };
@@ -2030,7 +2030,7 @@ export class WebGPUEngine extends Engine {
             colorStates: colorStateDescriptors,
 
             ...stages,
-            vertexInput: inputStateDescriptor,
+            vertexState: inputStateDescriptor,
             layout: pipelineLayout,
         });
         return gpuPipeline.renderPipeline;

+ 184 - 54
src/LibDeclarations/webgpu.d.ts

@@ -1,5 +1,7 @@
-// https://github.com/gpuweb/gpuweb/blob/0a2bb28a584aa1c6adabaec1f841ed29de400626/spec/index.bs
+https://github.com/gpuweb/gpuweb/blob/37812f5f39ae8c6dc85f6a12c0f65e9c9d6e2155
 // except #280 setSubData (TODO)
+// plus #489 GPUAdapter.limits
+// v 0.0.17
 
 interface GPUColorDict {
   a: number;
@@ -66,10 +68,10 @@ type GPUCompareFunction =
   | "never"
   | "less"
   | "equal"
-  | "lessEqual"
+  | "less-equal"
   | "greater"
-  | "notEqual"
-  | "greaterEqual"
+  | "not-equal"
+  | "greater-equal"
   | "always";
 type GPUCullMode = "none" | "front" | "back";
 type GPUFilterMode = "nearest" | "linear";
@@ -323,20 +325,20 @@ interface GPUFenceDescriptor extends GPUObjectDescriptorBase {
 }
 
 interface GPUVertexAttributeDescriptor {
-  offset?: number;
+  offset: number;
   format: GPUVertexFormat;
   shaderLocation: number;
 }
 
-interface GPUVertexBufferDescriptor {
-  stride: number;
+interface GPUVertexBufferLayoutDescriptor {
+  arrayStride: number;
   stepMode?: GPUInputStepMode;
-  attributeSet: GPUVertexAttributeDescriptor[];
+  attributes: GPUVertexAttributeDescriptor[];
 }
 
-interface GPUVertexInputDescriptor {
+interface GPUVertexStateDescriptor {
   indexFormat?: GPUIndexFormat;
-  vertexBuffers: GPUVertexBufferDescriptor[];
+  vertexBuffers: GPUVertexBufferLayoutDescriptor[];
 }
 
 interface GPULimits {
@@ -345,11 +347,22 @@ interface GPULimits {
   maxDynamicStorageBuffersPerPipelineLayout?: number;
   maxSampledTexturesPerShaderStage?: number;
   maxSamplersPerShaderStage?: number;
-  maxStorageBuffersPerPipelineLayout?: number;
+  maxStorageBuffersPerShaderStage?: number;
   maxStorageTexturesPerShaderStage?: number;
   maxUniformBuffersPerShaderStage?: number;
 }
 
+interface GPULimitsOut {
+  maxBindGroups: number;
+  maxDynamicUniformBuffersPerPipelineLayout: number;
+  maxDynamicStorageBuffersPerPipelineLayout: number;
+  maxSampledTexturesPerShaderStage: number;
+  maxSamplersPerShaderStage: number;
+  maxStorageBuffersPerShaderStage: number;
+  maxStorageTexturesPerShaderStage: number;
+  maxUniformBuffersPerShaderStage: number;
+}
+
 interface GPUPipelineDescriptorBase {
   label?: string;
   layout: GPUPipelineLayout;
@@ -406,7 +419,7 @@ interface GPURenderPipelineDescriptor
   rasterizationState?: GPURasterizationStateDescriptor;
   colorStates: GPUColorStateDescriptor[];
   depthStencilState?: GPUDepthStencilStateDescriptor;
-  vertexInput: GPUVertexInputDescriptor;
+  vertexState?: GPUVertexStateDescriptor;
 
   sampleCount?: number;
   sampleMask?: number;
@@ -464,17 +477,24 @@ interface GPUTextureViewDescriptor extends GPUObjectDescriptorBase {
   mipLevelCount?: number;
 }
 
-interface GPUAdapter extends GPUObjectBase {
-  readonly extensions: GPUExtensions;
+class GPUAdapter {
   readonly name: string;
+  readonly extensions: GPUExtensions;
+  readonly limits: GPULimitsOut;
+
   requestDevice(descriptor?: GPUDeviceDescriptor): Promise<GPUDevice>;
 }
 
-interface GPUBindGroup extends GPUObjectBase {}
+class GPUBindGroup implements GPUObjectBase {
+  label: string | undefined;
+}
 
-interface GPUBindGroupLayout extends GPUObjectBase {}
+class GPUBindGroupLayout implements GPUObjectBase {
+  label: string | undefined;
+}
 
-interface GPUBuffer extends GPUObjectBase {
+class GPUBuffer implements GPUObjectBase {
+  label: string | undefined;
   //readonly mapping: ArrayBuffer | null;
   destroy(): void;
   unmap(): void;
@@ -490,11 +510,14 @@ interface GPUBuffer extends GPUObjectBase {
   ): void;
 }
 
-interface GPUCommandBuffer extends GPUObjectBase {}
+class GPUCommandBuffer implements GPUObjectBase {
+  label: string | undefined;
+}
 
 interface GPUCommandBufferDescriptor extends GPUObjectDescriptorBase {}
 
-interface GPUCommandEncoder extends GPUObjectBase {
+class GPUCommandEncoder implements GPUObjectBase {
+  label: string | undefined;
   beginComputePass(
     descriptor?: GPUComputePassDescriptor
   ): GPUComputePassEncoder;
@@ -535,7 +558,19 @@ interface GPUCommandEncoder extends GPUObjectBase {
 
 interface GPUComputePassDescriptor extends GPUObjectDescriptorBase {}
 
-interface GPUComputePassEncoder extends GPUProgrammablePassEncoder {
+class GPUComputePassEncoder implements GPUProgrammablePassEncoder {
+  label: string | undefined;
+
+  setBindGroup(
+    index: number,
+    bindGroup: GPUBindGroup,
+    dynamicOffsets?: number[]
+  ): void;
+
+  popDebugGroup(): void;
+  pushDebugGroup(groupLabel: string): void;
+  insertDebugMarker(markerLabel: string): void;
+
   setPipeline(pipeline: GPUComputePipeline): void;
   dispatch(x: number, y?: number, z?: number): void;
   dispatchIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;
@@ -543,7 +578,9 @@ interface GPUComputePassEncoder extends GPUProgrammablePassEncoder {
   endPass(): void;
 }
 
-interface GPUComputePipeline extends GPUObjectBase {}
+class GPUComputePipeline implements GPUObjectBase {
+  label: string | undefined;
+}
 
 interface GPUObjectBase {
   label: string | undefined;
@@ -554,16 +591,17 @@ interface GPUObjectDescriptorBase {
 }
 
 // SwapChain / CanvasContext
-interface GPUCanvasContext {
+class GPUCanvasContext {
   configureSwapChain(descriptor: GPUSwapChainDescriptor): GPUSwapChain;
 
   getSwapChainPreferredFormat(device: GPUDevice): Promise<GPUTextureFormat>;
 }
 
-interface GPUDevice extends GPUObjectBase {
+class GPUDevice extends EventTarget implements GPUObjectBase {
+  label: string | undefined;
   readonly adapter: GPUAdapter;
   readonly extensions: GPUExtensions;
-  readonly limits: GPULimits;
+  readonly limits: GPULimitsOut;
 
   createBindGroup(descriptor: GPUBindGroupDescriptor): GPUBindGroup;
   createBindGroupLayout(
@@ -598,27 +636,39 @@ interface GPUDevice extends GPUObjectBase {
 
   getQueue(): GPUQueue;
 
+  pushErrorScope(filter: GPUErrorFilter): void;
+  popErrorScope(): Promise<GPUError | null>;
+  onuncapturederror: Event | undefined;
   readonly lost: Promise<GPUDeviceLostInfo>;
 }
 
-interface GPUFence extends GPUObjectBase {
+class GPUFence implements GPUObjectBase {
+  label: string | undefined;
+
   getCompletedValue(): number;
   onCompletion(completionValue: number): Promise<void>;
 }
 
-interface GPUPipelineLayout extends GPUObjectBase {}
+class GPUPipelineLayout implements GPUObjectBase {
+  label: string | undefined;
+}
 
 interface GPUProgrammablePassEncoder extends GPUObjectBase {
-  setBindGroup(index: number, bindGroup: GPUBindGroup): void;
+  setBindGroup(
+    index: number,
+    bindGroup: GPUBindGroup,
+    dynamicOffsets?: number[]
+  ): void;
 
   popDebugGroup(): void;
   pushDebugGroup(groupLabel: string): void;
   insertDebugMarker(markerLabel: string): void;
 }
 
-interface GPUQueue extends GPUObjectBase {
+class GPUQueue implements GPUObjectBase {
+  label: string | undefined;
   signal(fence: GPUFence, signalValue: number): void;
-  submit(buffers: GPUCommandBuffer[]): void;
+  submit(commandBuffers: GPUCommandBuffer[]): void;
   createFence(descriptor?: GPUFenceDescriptor): GPUFence;
 }
 
@@ -650,7 +700,44 @@ interface GPURenderEncoderBase extends GPUProgrammablePassEncoder {
   ): void;
 }
 
-interface GPURenderPassEncoder extends GPURenderEncoderBase {
+class GPURenderPassEncoder implements GPURenderEncoderBase {
+  label: string | undefined;
+
+  setBindGroup(
+    index: number,
+    bindGroup: GPUBindGroup,
+    dynamicOffsets?: number[]
+  ): void;
+
+  popDebugGroup(): void;
+  pushDebugGroup(groupLabel: string): void;
+  insertDebugMarker(markerLabel: string): void;
+
+  setPipeline(pipeline: GPURenderPipeline): void;
+
+  setIndexBuffer(buffer: GPUBuffer, offset?: number): void;
+  setVertexBuffer(slot: number, buffer: GPUBuffer, offset?: number): void;
+
+  draw(
+    vertexCount: number,
+    instanceCount: number,
+    firstVertex: number,
+    firstInstance: number
+  ): void;
+  drawIndexed(
+    indexCount: number,
+    instanceCount: number,
+    firstIndex: number,
+    baseVertex: number,
+    firstInstance: number
+  ): void;
+
+  drawIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;
+  drawIndexedIndirect(
+    indirectBuffer: GPUBuffer,
+    indirectOffset: number
+  ): void;
+
   setViewport(
     x: number,
     y: number,
@@ -670,9 +757,47 @@ interface GPURenderPassEncoder extends GPURenderEncoderBase {
 
 interface GPURenderBundleDescriptor extends GPUObjectDescriptorBase {}
 
-interface GPURenderBundle extends GPUObjectBase {}
+class GPURenderBundle implements GPUObjectBase {
+  label: string | undefined;
+}
+
+class GPURenderBundleEncoder implements GPURenderEncoderBase {
+  label: string | undefined;
+
+  setBindGroup(
+    index: number,
+    bindGroup: GPUBindGroup,
+    dynamicOffsets?: number[]
+  ): void;
+
+  popDebugGroup(): void;
+  pushDebugGroup(groupLabel: string): void;
+  insertDebugMarker(markerLabel: string): void;
+
+  setPipeline(pipeline: GPURenderPipeline): void;
+
+  setIndexBuffer(buffer: GPUBuffer, offset?: number): void;
+  setVertexBuffer(slot: number, buffer: GPUBuffer, offset?: number): void;
+
+  draw(
+    vertexCount: number,
+    instanceCount: number,
+    firstVertex: number,
+    firstInstance: number
+  ): void;
+  drawIndexed(
+    indexCount: number,
+    instanceCount: number,
+    firstIndex: number,
+    baseVertex: number,
+    firstInstance: number
+  ): void;
 
-interface GPURenderBundleEncoder extends GPURenderEncoderBase {
+  drawIndirect(indirectBuffer: GPUBuffer, indirectOffset: number): void;
+  drawIndexedIndirect(
+    indirectBuffer: GPUBuffer,
+    indirectOffset: number
+  ): void;
   finish(descriptor?: GPURenderBundleDescriptor): GPURenderBundle;
 }
 
@@ -683,29 +808,39 @@ interface GPURenderBundleEncoderDescriptor
   sampleCount?: number;
 }
 
-interface GPURenderPipeline extends GPUObjectBase {}
+class GPURenderPipeline implements GPUObjectBase {
+  label: string | undefined;
+}
 
-interface GPUSampler extends GPUObjectBase {}
+class GPUSampler implements GPUObjectBase {
+  label: string | undefined;
+}
 
-interface GPUShaderModule extends GPUObjectBase {}
+class GPUShaderModule implements GPUObjectBase {
+  label: string | undefined;
+}
 
-interface GPUSwapChain extends GPUObjectBase {
+class GPUSwapChain implements GPUObjectBase {
+  label: string | undefined;
   getCurrentTexture(): GPUTexture;
 }
 
-interface GPUTexture extends GPUObjectBase {
+class GPUTexture implements GPUObjectBase {
+  label: string | undefined;
   createView(descriptor?: GPUTextureViewDescriptor): GPUTextureView;
   destroy(): void;
 }
 
-interface GPUTextureView extends GPUObjectBase {}
+class GPUTextureView implements GPUObjectBase {
+  label: string | undefined;
+}
 
 type GPUPowerPreference = "low-power" | "high-performance";
 interface GPURequestAdapterOptions {
   powerPreference?: GPUPowerPreference;
 }
 
-interface GPU {
+class GPU {
   requestAdapter(options?: GPURequestAdapterOptions): Promise<GPUAdapter>;
 }
 
@@ -726,27 +861,22 @@ declare class GPUValidationError {
 
 type GPUError = GPUOutOfMemoryError | GPUValidationError;
 
-interface GPUDevice {
-  pushErrorScope(filter: GPUErrorFilter): void;
-  popErrorScope(): Promise<GPUError | null>;
-}
-
-// ****************************************************************************
-// TELEMETRY
-// ****************************************************************************
-
-interface GPUUncapturedErrorEvent extends Event {
-  readonly error: GPUError;
-}
-
 interface GPUUncapturedErrorEventInit extends EventInit {
   error: GPUError;
 }
 
-interface GPUDevice extends EventTarget {
-  onuncapturederror: Event | undefined;
+class GPUUncapturedErrorEvent extends Event {
+  constructor(
+    type: string,
+    gpuUncapturedErrorEventInitDict: GPUUncapturedErrorEventInit
+  );
+  readonly error: GPUError;
 }
 
+// ****************************************************************************
+// TELEMETRY
+// ****************************************************************************
+
 interface GPUDeviceLostInfo {
   readonly message: string;
 }