diff --git a/dist/index.d.ts b/dist/index.d.ts
index 3abdb3eb..01bdda82 100644
--- a/dist/index.d.ts
+++ b/dist/index.d.ts
@@ -8,7 +8,9 @@
 
 interface HTMLCanvasElement {
   getContext(
-    contextId: "gpupresent"
+    contextId:
+      | "webgpu"
+      | "gpupresent"
   ):
     | (GPUPresentationContext &
         GPUCanvasContext)
@@ -17,7 +19,9 @@ interface HTMLCanvasElement {
 
 interface OffscreenCanvas {
   getContext(
-    contextId: "gpupresent"
+    contextId:
+      | "webgpu"
+      | "gpupresent"
   ):
     | (GPUPresentationContext &
         GPUCanvasContext)
@@ -145,9 +149,6 @@ type GPUFrontFace =
 type GPUIndexFormat =
   | "uint16"
   | "uint32";
-type GPUInputStepMode =
-  | "vertex"
-  | "instance";
 type GPULoadOp = "load";
 type GPUPipelineStatisticName =
   | "vertex-shader-invocations"
@@ -183,18 +184,16 @@ type GPUStencilOperation =
   | "increment-wrap"
   | "decrement-wrap";
 type GPUStorageTextureAccess =
+  | GPUStorageTextureAccessNew
+  | GPUStorageTextureAccessOld;
+type GPUStorageTextureAccessNew = "write-only";
+/** @deprecated */
+type GPUStorageTextureAccessOld =
   | "read-only"
   | "write-only";
 type GPUStoreOp =
-  | GPUStoreOpNew
-  | GPUStoreOpOld;
-type GPUStoreOpNew =
   | "store"
   | "discard";
-/** @deprecated */
-type GPUStoreOpOld =
-  | "store"
-  | "clear";
 type GPUTextureAspect =
   | "all"
   | "stencil-only"
@@ -305,6 +304,9 @@ type GPUVertexFormat =
   | "sint32x2"
   | "sint32x3"
   | "sint32x4";
+type GPUVertexStepMode =
+  | "vertex"
+  | "instance";
 
 interface GPUBindGroupDescriptor
   extends GPUObjectDescriptorBase {
@@ -401,6 +403,15 @@ interface GPUBufferDescriptor
   mappedAtCreation?: boolean;
 }
 
+interface GPUCanvasConfiguration {
+  device: GPUDevice;
+  format: GPUTextureFormat;
+  usage?: GPUTextureUsageFlags;
+  colorSpace?: GPUPredefinedColorSpace;
+  compositingAlphaMode?: GPUCanvasCompositingAlphaMode;
+  size?: GPUExtent3D;
+}
+
 interface GPUColorDict {
   r: number;
   g: number;
@@ -453,27 +464,20 @@ interface GPUDeviceDescriptor
    * of API calls on the resulting device.
    */
   requiredFeatures?: Iterable<GPUFeatureName>;
-  /** @deprecated */
-  nonGuaranteedFeatures?: Iterable<GPUFeatureName>;
   /**
    * Specifies the limits that are required by the device request.
    * The request will fail if the adapter cannot provide these limits.
    * Each key must be the name of a member of supported limits.
    * Exactly the specified limits, and no limit/better or worse,
    * will be allowed in validation of API calls on the resulting device.
-   * <!-- If we ever need limit types other than GPUSize32, we can change the value type to
-   * `double` or `any` in the future and write out the type conversion explicitly (by reference
-   * to WebIDL spec). Or change the entire type to `any` and add back a `dictionary GPULimits`
-   * and define the conversion of the whole object by reference to WebIDL. -->
+   * <!-- If we ever need limit types other than GPUSize32/GPUSize64, we can change the value
+   * type to `double` or `any` in the future and write out the type conversion explicitly (by
+   * reference to WebIDL spec). Or change the entire type to `any` and add back a `dictionary
+   * GPULimits` and define the conversion of the whole object by reference to WebIDL. -->
    */
   requiredLimits?: Record<
     string,
-    GPUSize32
-  >;
-  /** @deprecated */
-  nonGuaranteedLimits?: Record<
-    string,
-    GPUSize32
+    GPUSize64
   >;
 }
 
@@ -611,15 +615,6 @@ interface GPUPipelineLayoutDescriptor
   bindGroupLayouts: Iterable<GPUBindGroupLayout>;
 }
 
-interface GPUPresentationConfiguration
-  extends GPUObjectDescriptorBase {
-  device: GPUDevice;
-  format: GPUTextureFormat;
-  usage?: GPUTextureUsageFlags;
-  compositingAlphaMode?: GPUCanvasCompositingAlphaMode;
-  size?: GPUExtent3DStrict;
-}
-
 interface GPUPrimitiveState {
   topology?: GPUPrimitiveTopology;
   stripIndexFormat?: GPUIndexFormat;
@@ -656,10 +651,9 @@ interface GPUQuerySetDescriptor
 type GPURenderBundleDescriptor = GPUObjectDescriptorBase;
 
 interface GPURenderBundleEncoderDescriptor
-  extends GPUObjectDescriptorBase {
-  colorFormats: Iterable<GPUTextureFormat>;
-  depthStencilFormat?: GPUTextureFormat;
-  sampleCount?: GPUSize32;
+  extends GPURenderPassLayout {
+  depthReadOnly?: boolean;
+  stencilReadOnly?: boolean;
 }
 
 interface GPURenderPassColorAttachment {
@@ -760,6 +754,13 @@ interface GPURenderPassDescriptor
   occlusionQuerySet?: GPUQuerySet;
 }
 
+interface GPURenderPassLayout
+  extends GPUObjectDescriptorBase {
+  colorFormats: Array<GPUTextureFormat>;
+  depthStencilFormat?: GPUTextureFormat;
+  sampleCount?: GPUSize32;
+}
+
 interface GPURenderPipelineDescriptor
   extends GPUPipelineDescriptorBase {
   vertex: GPUVertexState;
@@ -821,7 +822,7 @@ interface GPUStorageTextureBindingLayout {
    * Indicates whether texture views bound to this binding will be bound for read-only or
    * write-only access.
    */
-  access: GPUStorageTextureAccess;
+  access?: GPUStorageTextureAccess;
   /**
    * The required {@link GPUTextureViewDescriptor#format} of texture views bound to this binding.
    */
@@ -889,7 +890,7 @@ interface GPUVertexAttribute {
 
 interface GPUVertexBufferLayout {
   arrayStride: GPUSize64;
-  stepMode?: GPUInputStepMode;
+  stepMode?: GPUVertexStepMode;
   attributes: Iterable<GPUVertexAttribute>;
 }
 
@@ -989,9 +990,9 @@ interface GPURenderEncoderBase {
    * Sets the current index buffer.
    * @param buffer - Buffer containing index data to use for subsequent drawing commands.
    * @param indexFormat - Format of the index data contained in `buffer`.
-   * @param offset - Offset in bytes into `buffer` where the index data begins.
+   * @param offset - Offset in bytes into `buffer` where the index data begins. Defaults to `0`.
    * @param size - Size in bytes of the index data in `buffer`.
-   * 	If `0`, `buffer.size` - `offset` is used.
+   * 	Defaults to the size of the buffer minus the offset.
    */
   setIndexBuffer(
     buffer: GPUBuffer,
@@ -1003,9 +1004,9 @@ interface GPURenderEncoderBase {
    * Sets the current vertex buffer for the given slot.
    * @param slot - The vertex buffer slot to set the vertex buffer for.
    * @param buffer - Buffer containing vertex data to use for subsequent drawing commands.
-   * @param offset - Offset in bytes into `buffer` where the vertex data begins.
+   * @param offset - Offset in bytes into `buffer` where the vertex data begins. Defaults to `0`.
    * @param size - Size in bytes of the vertex data in `buffer`.
-   * 	If `0`, `buffer.size` - `offset` is used.
+   * 	Defaults to the size of the buffer minus the offset.
    */
   setVertexBuffer(
     slot: GPUIndex32,
@@ -1242,6 +1243,54 @@ declare var GPUBufferUsage: {
   readonly QUERY_RESOLVE: GPUFlagsConstant;
 };
 
+interface GPUCanvasContext {
+  /**
+   * Nominal type branding.
+   * https://github.com/microsoft/TypeScript/pull/33038
+   * @internal
+   */
+  readonly __brand: "GPUCanvasContext";
+  /**
+   * The canvas this context was created from.
+   */
+  readonly canvas:
+    | HTMLCanvasElement
+    | OffscreenCanvas;
+  /**
+   * Configures the context for this canvas. Destroys any textures produced with a previous
+   * configuration.
+   * @param configuration - Desired configuration for the context.
+   */
+  configure(
+    configuration: GPUCanvasConfiguration
+  ): undefined;
+  /**
+   * Removes the context configuration. Destroys any textures produced while configured.
+   */
+  unconfigure(): undefined;
+  /**
+   * Returns an optimal {@link GPUTextureFormat} to use with this context and devices created from
+   * the given adapter.
+   * @param adapter - Adapter the format should be queried for.
+   */
+  getPreferredFormat(
+    adapter: GPUAdapter
+  ): GPUTextureFormat;
+  /**
+   * Get the {@link GPUTexture} that will be composited to the document by the {@link GPUCanvasContext}
+   * next.
+   * Note: Developers can expect that the same {@link GPUTexture} object will be returned by every
+   * call to {@link GPUCanvasContext#getCurrentTexture} made within the same frame (i.e. between
+   * invocations of Update the rendering) unless {@link GPUCanvasContext#configure} is called.
+   */
+  getCurrentTexture(): GPUTexture;
+}
+
+declare var GPUCanvasContext: {
+  prototype: GPUCanvasContext;
+  new (): never;
+};
+
 interface GPUColorWrite {
   /**
    * Nominal type branding.
@@ -1454,7 +1503,6 @@ interface GPUCompilationMessage {
   readonly __brand: "GPUCompilationMessage";
   /**
    * A human-readable string containing the message generated during the shader compilation.
-   *
    */
   readonly message: string;
   /**
@@ -1465,7 +1513,6 @@ interface GPUCompilationMessage {
    * The line number in the shader {@link GPUShaderModuleDescriptor#code} the
    * {@link GPUCompilationMessage#message} corresponds to. Value is one-based, such that a lineNum of
    * `1` indicates the first line of the shader {@link GPUShaderModuleDescriptor#code}.
-   *
    * If the {@link GPUCompilationMessage#message} corresponds to a substring this points to
    * the line on which the substring begins. Must be `0` if the {@link GPUCompilationMessage#message}
    * does not correspond to any specific point in the shader {@link GPUShaderModuleDescriptor#code}.
@@ -1842,48 +1889,6 @@ declare var GPUPipelineLayout: {
   new (): never;
 };
 
-interface GPUPresentationContext {
-  /**
-   * Nominal type branding.
-   * https://github.com/microsoft/TypeScript/pull/33038
-   * @internal
-   */
-  readonly __brand: "GPUPresentationContext";
-  /**
-   * Configures the presentation context for this canvas. Destroys any textures produced with a
-   * previous configuration.
-   * @param configuration - Desired configuration for the presentation context.
-   */
-  configure(
-    configuration: GPUPresentationConfiguration
-  ): undefined;
-  /**
-   * Removes the presentation context configuration. Destroys any textures produced while configured.
-   */
-  unconfigure(): undefined;
-  /**
-   * Returns an optimal {@link GPUTextureFormat} to use with this presentation context and devices
-   * created from the given adapter.
-   * @param adapter - Adapter the format should be queried for.
-   */
-  getPreferredFormat(
-    adapter: GPUAdapter
-  ): GPUTextureFormat;
-  /**
-   * Get the {@link GPUTexture} that will be composited to the document by the {@link GPUPresentationContext}
-   * next.
-   * Note: Developers can expect that the same {@link GPUTexture} object will be returned by every
-   * call to {@link GPUPresentationContext#getCurrentTexture} made within the same frame (i.e. between
-   * invocations of Update the rendering) unless {@link GPUPresentationContext#configure} is called.
-   */
-  getCurrentTexture(): GPUTexture;
-}
-
-declare var GPUPresentationContext: {
-  prototype: GPUPresentationContext;
-  new (): never;
-};
-
 interface GPUQuerySet
   extends GPUObjectBase {
   /**
@@ -1969,13 +1974,6 @@ interface GPUQueue
     destination: GPUImageCopyTextureTagged,
     copySize: GPUExtent3DStrict
   ): undefined;
-
-  /** @deprecated use copyExternalImageToTexture instead */
-  copyImageBitmapToTexture(
-    source: GPUImageCopyImageBitmap,
-    destination: GPUImageCopyTexture,
-    copySize: GPUExtent3DStrict
-  ): undefined;
 }
 
 declare var GPUQueue: {
@@ -2225,9 +2223,18 @@ interface GPUSupportedLimits {
   readonly maxUniformBuffersPerShaderStage: number;
   readonly maxUniformBufferBindingSize: number;
   readonly maxStorageBufferBindingSize: number;
+  readonly minUniformBufferOffsetAlignment: number;
+  readonly minStorageBufferOffsetAlignment: number;
   readonly maxVertexBuffers: number;
   readonly maxVertexAttributes: number;
   readonly maxVertexBufferArrayStride: number;
+  readonly maxInterStageShaderComponents: number;
+  readonly maxComputeWorkgroupStorageSize: number;
+  readonly maxComputeInvocationsPerWorkgroup: number;
+  readonly maxComputeWorkgroupSizeX: number;
+  readonly maxComputeWorkgroupSizeY: number;
+  readonly maxComputeWorkgroupSizeZ: number;
+  readonly maxComputeWorkgroupsPerDimension: number;
 }
 
 declare var GPUSupportedLimits: {
@@ -2269,7 +2276,11 @@ interface GPUTextureUsage {
   readonly __brand: "GPUTextureUsage";
   readonly COPY_SRC: GPUFlagsConstant;
   readonly COPY_DST: GPUFlagsConstant;
+  readonly TEXTURE_BINDING: GPUFlagsConstant;
+  readonly STORAGE_BINDING: GPUFlagsConstant;
+  /** @deprecated Use TEXTURE_BINDING instead */
   readonly SAMPLED: GPUFlagsConstant;
+  /** @deprecated Use STORAGE_BINDING instead */
   readonly STORAGE: GPUFlagsConstant;
   readonly RENDER_ATTACHMENT: GPUFlagsConstant;
 }
@@ -2278,7 +2289,11 @@ declare var GPUTextureUsage: {
   prototype: GPUTextureUsage;
   readonly COPY_SRC: GPUFlagsConstant;
   readonly COPY_DST: GPUFlagsConstant;
+  readonly TEXTURE_BINDING: GPUFlagsConstant;
+  readonly STORAGE_BINDING: GPUFlagsConstant;
+  /** @deprecated Use TEXTURE_BINDING instead */
   readonly SAMPLED: GPUFlagsConstant;
+  /** @deprecated Use STORAGE_BINDING instead */
   readonly STORAGE: GPUFlagsConstant;
   readonly RENDER_ATTACHMENT: GPUFlagsConstant;
 };
@@ -2344,63 +2359,11 @@ interface WorkerNavigator
 // Deprecated
 // *********************************************************************************************
 
-/** @deprecated Use GPUPresentationContext instead */
-interface GPUCanvasContext {
-  /**
-   * @deprecated
-   */
-  configureSwapChain(
-    descriptor: GPUSwapChainDescriptor
-  ): GPUSwapChain;
-  /**
-   * @deprecated
-   */
-  getSwapChainPreferredFormat(
-    adapter: GPUAdapter
-  ): GPUTextureFormat;
-  /** @deprecated */
-  getSwapChainPreferredFormat(
-    device: GPUDevice
-  ): Promise<GPUTextureFormat>;
-}
+/** @deprecated Use GPUVertexStepMode instead */
+type GPUInputStepMode = GPUVertexStepMode;
 
-/** @deprecated */
-declare var GPUCanvasContext: {
-  prototype: GPUCanvasContext;
-  new (): never;
-};
+/** @deprecated Use GPUCanvasContext instead */
+type GPUPresentationContext = GPUCanvasContext;
 
 /** @deprecated */
-type GPUSwapChainDescriptor = GPUPresentationConfiguration;
-
-/** @deprecated Use GPUPresentationContext instead */
-interface GPUSwapChain
-  extends GPUObjectBase {
-  /**
-   * Nominal type branding.
-   * https://github.com/microsoft/TypeScript/pull/33038
-   * @internal
-   */
-  readonly __brand: "GPUSwapChain";
-  /**
-   * Get the {@link GPUTexture} that will be composited to the document by the {@link GPUCanvasContext}
-   * that created this swap chain next.
-   * Note: Developers can expect that the same {@link GPUTexture} object will be returned by every
-   * call to {@link GPUSwapChain#getCurrentTexture} made within the same frame (i.e. between
-   * invocations of Update the rendering).
-   */
-  getCurrentTexture(): GPUTexture;
-}
-
-declare var GPUSwapChain: {
-  prototype: GPUSwapChain;
-  new (): never;
-};
-
-/** @deprecated */
-interface GPUImageCopyImageBitmap {
-  /** @deprecated */
-  imageBitmap: ImageBitmap;
-  /** @deprecated */
-  origin?: GPUOrigin2D;
-}
+type GPUPresentationConfiguration = GPUCanvasConfiguration;
diff --git a/generated/index.d.ts b/generated/index.d.ts
index 81a42ae6..452c3cbc 100644
--- a/generated/index.d.ts
+++ b/generated/index.d.ts
@@ -102,9 +102,6 @@ type GPUFrontFace =
 type GPUIndexFormat =
   | "uint16"
   | "uint32";
-type GPUInputStepMode =
-  | "vertex"
-  | "instance";
 type GPULoadOp = "load";
 type GPUPipelineStatisticName =
   | "vertex-shader-invocations"
@@ -139,9 +136,7 @@ type GPUStencilOperation =
   | "decrement-clamp"
   | "increment-wrap"
   | "decrement-wrap";
-type GPUStorageTextureAccess =
-  | "read-only"
-  | "write-only";
+type GPUStorageTextureAccess = "write-only";
 type GPUStoreOp =
   | "store"
   | "discard";
@@ -255,6 +250,9 @@ type GPUVertexFormat =
   | "sint32x2"
   | "sint32x3"
   | "sint32x4";
+type GPUVertexStepMode =
+  | "vertex"
+  | "instance";
 
 interface GPUBindGroupDescriptor
   extends GPUObjectDescriptorBase {
@@ -351,6 +349,15 @@ interface GPUBufferDescriptor
   mappedAtCreation?: boolean;
 }
 
+interface GPUCanvasConfiguration {
+  device: GPUDevice;
+  format: GPUTextureFormat;
+  usage?: GPUTextureUsageFlags;
+  colorSpace?: GPUPredefinedColorSpace;
+  compositingAlphaMode?: GPUCanvasCompositingAlphaMode;
+  size?: GPUExtent3D;
+}
+
 interface GPUColorDict {
   r: number;
   g: number;
@@ -409,14 +416,14 @@ interface GPUDeviceDescriptor
    * Each key must be the name of a member of supported limits.
    * Exactly the specified limits, and no limit/better or worse,
    * will be allowed in validation of API calls on the resulting device.
-   * <!-- If we ever need limit types other than GPUSize32, we can change the value type to
-   * `double` or `any` in the future and write out the type conversion explicitly (by reference
-   * to WebIDL spec). Or change the entire type to `any` and add back a `dictionary GPULimits`
-   * and define the conversion of the whole object by reference to WebIDL. -->
+   * <!-- If we ever need limit types other than GPUSize32/GPUSize64, we can change the value
+   * type to `double` or `any` in the future and write out the type conversion explicitly (by
+   * reference to WebIDL spec). Or change the entire type to `any` and add back a `dictionary
+   * GPULimits` and define the conversion of the whole object by reference to WebIDL. -->
    */
   requiredLimits?: Record<
     string,
-    GPUSize32
+    GPUSize64
   >;
 }
 
@@ -554,15 +561,6 @@ interface GPUPipelineLayoutDescriptor
   bindGroupLayouts: Array<GPUBindGroupLayout>;
 }
 
-interface GPUPresentationConfiguration
-  extends GPUObjectDescriptorBase {
-  device: GPUDevice;
-  format: GPUTextureFormat;
-  usage?: GPUTextureUsageFlags;
-  compositingAlphaMode?: GPUCanvasCompositingAlphaMode;
-  size?: GPUExtent3D;
-}
-
 interface GPUPrimitiveState {
   topology?: GPUPrimitiveTopology;
   stripIndexFormat?: GPUIndexFormat;
@@ -599,10 +597,9 @@ interface GPUQuerySetDescriptor
 type GPURenderBundleDescriptor = GPUObjectDescriptorBase;
 
 interface GPURenderBundleEncoderDescriptor
-  extends GPUObjectDescriptorBase {
-  colorFormats: Array<GPUTextureFormat>;
-  depthStencilFormat?: GPUTextureFormat;
-  sampleCount?: GPUSize32;
+  extends GPURenderPassLayout {
+  depthReadOnly?: boolean;
+  stencilReadOnly?: boolean;
 }
 
 interface GPURenderPassColorAttachment {
@@ -703,6 +700,13 @@ interface GPURenderPassDescriptor
   occlusionQuerySet?: GPUQuerySet;
 }
 
+interface GPURenderPassLayout
+  extends GPUObjectDescriptorBase {
+  colorFormats: Array<GPUTextureFormat>;
+  depthStencilFormat?: GPUTextureFormat;
+  sampleCount?: GPUSize32;
+}
+
 interface GPURenderPipelineDescriptor
   extends GPUPipelineDescriptorBase {
   vertex: GPUVertexState;
@@ -756,7 +760,7 @@ interface GPUStorageTextureBindingLayout {
    * Indicates whether texture views bound to this binding will be bound for read-only or
    * write-only access.
    */
-  access: GPUStorageTextureAccess;
+  access?: GPUStorageTextureAccess;
   /**
    * The required {@link GPUTextureViewDescriptor#format} of texture views bound to this binding.
    */
@@ -824,7 +828,7 @@ interface GPUVertexAttribute {
 
 interface GPUVertexBufferLayout {
   arrayStride: GPUSize64;
-  stepMode?: GPUInputStepMode;
+  stepMode?: GPUVertexStepMode;
   attributes: Array<GPUVertexAttribute>;
 }
 
@@ -924,9 +928,9 @@ interface GPURenderEncoderBase {
    * Sets the current index buffer.
    * @param buffer - Buffer containing index data to use for subsequent drawing commands.
    * @param indexFormat - Format of the index data contained in `buffer`.
-   * @param offset - Offset in bytes into `buffer` where the index data begins.
+   * @param offset - Offset in bytes into `buffer` where the index data begins. Defaults to `0`.
    * @param size - Size in bytes of the index data in `buffer`.
-   * 	If `0`, `buffer.size` - `offset` is used.
+   * 	Defaults to the size of the buffer minus the offset.
    */
   setIndexBuffer(
     buffer: GPUBuffer,
@@ -938,9 +942,9 @@ interface GPURenderEncoderBase {
    * Sets the current vertex buffer for the given slot.
    * @param slot - The vertex buffer slot to set the vertex buffer for.
    * @param buffer - Buffer containing vertex data to use for subsequent drawing commands.
-   * @param offset - Offset in bytes into `buffer` where the vertex data begins.
+   * @param offset - Offset in bytes into `buffer` where the vertex data begins. Defaults to `0`.
    * @param size - Size in bytes of the vertex data in `buffer`.
-   * 	If `0`, `buffer.size` - `offset` is used.
+   * 	Defaults to the size of the buffer minus the offset.
    */
   setVertexBuffer(
     slot: GPUIndex32,
@@ -962,15 +966,6 @@ interface GPURenderEncoderBase {
     firstVertex?: GPUSize32,
     firstInstance?: GPUSize32
   ): undefined;
-  /**
-   * Draws indexed primitives.
-   * See [[#rendering-operations]] for the detailed specification.
-   * @param indexCount - The number of indices to draw.
-   * @param instanceCount - The number of instances to draw.
-   * @param firstIndex - Offset into the index buffer, in indices, begin drawing from.
-   * @param baseVertex - Added to each index value before indexing into the vertex buffers.
-   * @param firstInstance - First instance to draw.
-   */
   drawIndexed(
     indexCount: GPUSize32,
     instanceCount?: GPUSize32,
@@ -978,26 +973,10 @@ interface GPURenderEncoderBase {
     baseVertex?: GPUSignedOffset32,
     firstInstance?: GPUSize32
   ): undefined;
-  /**
-   * Draws primitives using parameters read from a {@link GPUBuffer}.
-   * See [[#rendering-operations]] for the detailed specification.
-   * packed block of **four 32-bit unsigned integer values (16 bytes total)**, given in the same
-   * order as the arguments for {@link GPURenderEncoderBase#draw}. For example:
-   * @param indirectBuffer - Buffer containing the indirect draw parameters.
-   * @param indirectOffset - Offset in bytes into `indirectBuffer` where the drawing data begins.
-   */
   drawIndirect(
     indirectBuffer: GPUBuffer,
     indirectOffset: GPUSize64
   ): undefined;
-  /**
-   * Draws indexed primitives using parameters read from a {@link GPUBuffer}.
-   * See [[#rendering-operations]] for the detailed specification.
-   * tightly packed block of **five 32-bit unsigned integer values (20 bytes total)**, given in
-   * the same order as the arguments for {@link GPURenderEncoderBase#drawIndexed}. For example:
-   * @param indirectBuffer - Buffer containing the indirect drawIndexed parameters.
-   * @param indirectOffset - Offset in bytes into `indirectBuffer` where the drawing data begins.
-   */
   drawIndexedIndirect(
     indirectBuffer: GPUBuffer,
     indirectOffset: GPUSize64
@@ -1172,6 +1151,53 @@ declare var GPUBufferUsage: {
   readonly QUERY_RESOLVE: GPUFlagsConstant;
 };
 
+interface GPUCanvasContext {
+  /**
+   * Nominal type branding.
+   * https://github.com/microsoft/TypeScript/pull/33038
+   * @internal
+   */
+  readonly __brand: "GPUCanvasContext";
+  /**
+   * The canvas this context was created from.
+   */
+  readonly canvas:
+    | HTMLCanvasElement
+    | OffscreenCanvas;
+  /**
+   * Configures the context for this canvas. Destroys any textures produced with a previous
+   * configuration.
+   * @param configuration - Desired configuration for the context.
+   */
+  configure(
+    configuration: GPUCanvasConfiguration
+  ): undefined;
+  /**
+   * Removes the context configuration. Destroys any textures produced while configured.
+   */
+  unconfigure(): undefined;
+  /**
+   * Returns an optimal {@link GPUTextureFormat} to use with this context and devices created from
+   * the given adapter.
+   * @param adapter - Adapter the format should be queried for.
+   */
+  getPreferredFormat(
+    adapter: GPUAdapter
+  ): GPUTextureFormat;
+  /**
+   * Get the {@link GPUTexture} that will be composited to the document by the {@link GPUCanvasContext}
+   * next.
+   * Note: Developers can expect that the same {@link GPUTexture} object will be returned by every
+   * call to {@link GPUCanvasContext#getCurrentTexture} made within the same frame (i.e. between
+   * invocations of Update the rendering) unless {@link GPUCanvasContext#configure} is called.
+   */
+  getCurrentTexture(): GPUTexture;
+}
+
+declare var GPUCanvasContext: {
+  prototype: GPUCanvasContext;
+};
+
 interface GPUColorWrite {
   /**
    * Nominal type branding.
@@ -1381,7 +1407,6 @@ interface GPUCompilationMessage {
   readonly __brand: "GPUCompilationMessage";
   /**
    * A human-readable string containing the message generated during the shader compilation.
-   *
    */
   readonly message: string;
   /**
@@ -1392,7 +1417,6 @@ interface GPUCompilationMessage {
    * The line number in the shader {@link GPUShaderModuleDescriptor#code} the
    * {@link GPUCompilationMessage#message} corresponds to. Value is one-based, such that a lineNum of
    * `1` indicates the first line of the shader {@link GPUShaderModuleDescriptor#code}.
-   *
    * If the {@link GPUCompilationMessage#message} corresponds to a substring this points to
    * the line on which the substring begins. Must be `0` if the {@link GPUCompilationMessage#message}
    * does not correspond to any specific point in the shader {@link GPUShaderModuleDescriptor#code}.
@@ -1756,47 +1780,6 @@ declare var GPUPipelineLayout: {
   prototype: GPUPipelineLayout;
 };
 
-interface GPUPresentationContext {
-  /**
-   * Nominal type branding.
-   * https://github.com/microsoft/TypeScript/pull/33038
-   * @internal
-   */
-  readonly __brand: "GPUPresentationContext";
-  /**
-   * Configures the presentation context for this canvas. Destroys any textures produced with a
-   * previous configuration.
-   * @param configuration - Desired configuration for the presentation context.
-   */
-  configure(
-    configuration: GPUPresentationConfiguration
-  ): undefined;
-  /**
-   * Removes the presentation context configuration. Destroys any textures produced while configured.
-   */
-  unconfigure(): undefined;
-  /**
-   * Returns an optimal {@link GPUTextureFormat} to use with this presentation context and devices
-   * created from the given adapter.
-   * @param adapter - Adapter the format should be queried for.
-   */
-  getPreferredFormat(
-    adapter: GPUAdapter
-  ): GPUTextureFormat;
-  /**
-   * Get the {@link GPUTexture} that will be composited to the document by the {@link GPUPresentationContext}
-   * next.
-   * Note: Developers can expect that the same {@link GPUTexture} object will be returned by every
-   * call to {@link GPUPresentationContext#getCurrentTexture} made within the same frame (i.e. between
-   * invocations of Update the rendering) unless {@link GPUPresentationContext#configure} is called.
-   */
-  getCurrentTexture(): GPUTexture;
-}
-
-declare var GPUPresentationContext: {
-  prototype: GPUPresentationContext;
-};
-
 interface GPUQuerySet
   extends GPUObjectBase {
   /**
@@ -2119,9 +2102,18 @@ interface GPUSupportedLimits {
   readonly maxUniformBuffersPerShaderStage: number;
   readonly maxUniformBufferBindingSize: number;
   readonly maxStorageBufferBindingSize: number;
+  readonly minUniformBufferOffsetAlignment: number;
+  readonly minStorageBufferOffsetAlignment: number;
   readonly maxVertexBuffers: number;
   readonly maxVertexAttributes: number;
   readonly maxVertexBufferArrayStride: number;
+  readonly maxInterStageShaderComponents: number;
+  readonly maxComputeWorkgroupStorageSize: number;
+  readonly maxComputeInvocationsPerWorkgroup: number;
+  readonly maxComputeWorkgroupSizeX: number;
+  readonly maxComputeWorkgroupSizeY: number;
+  readonly maxComputeWorkgroupSizeZ: number;
+  readonly maxComputeWorkgroupsPerDimension: number;
 }
 
 declare var GPUSupportedLimits: {
@@ -2162,8 +2154,8 @@ interface GPUTextureUsage {
   readonly __brand: "GPUTextureUsage";
   readonly COPY_SRC: GPUFlagsConstant;
   readonly COPY_DST: GPUFlagsConstant;
-  readonly SAMPLED: GPUFlagsConstant;
-  readonly STORAGE: GPUFlagsConstant;
+  readonly TEXTURE_BINDING: GPUFlagsConstant;
+  readonly STORAGE_BINDING: GPUFlagsConstant;
   readonly RENDER_ATTACHMENT: GPUFlagsConstant;
 }
 
@@ -2171,8 +2163,8 @@ declare var GPUTextureUsage: {
   prototype: GPUTextureUsage;
   readonly COPY_SRC: GPUFlagsConstant;
   readonly COPY_DST: GPUFlagsConstant;
-  readonly SAMPLED: GPUFlagsConstant;
-  readonly STORAGE: GPUFlagsConstant;
+  readonly TEXTURE_BINDING: GPUFlagsConstant;
+  readonly STORAGE_BINDING: GPUFlagsConstant;
   readonly RENDER_ATTACHMENT: GPUFlagsConstant;
 };
 
diff --git a/gpuweb b/gpuweb
index eee1e8ce..ef3fbc5b 160000
--- a/gpuweb
+++ b/gpuweb
@@ -1 +1 @@
-Subproject commit eee1e8ce581d7358af55bd4242ac2a123ceb3684
+Subproject commit ef3fbc5b48abd3e1feaafa920df47ce6d6dc34ac
