Fixture for WebGPU tests that uses a DeviceProvider

Hierarchy

Accessors

  • get adapter(): GPUAdapter
  • GPUAdapter that the device was created from.

    Returns GPUAdapter

  • get device(): GPUDevice
  • GPUDevice for the test to use.

    Returns GPUDevice

  • get mismatchedDevice(): GPUDevice
  • GPUDevice for tests requiring a second device different from the default one, e.g. for creating objects for by device_mismatch validation tests.

    Returns GPUDevice

  • get params(): unknown
  • Returns the (case+subcase) parameters for this test function invocation.

    Returns unknown

  • get queue(): GPUQueue
  • GPUQueue for the test to use. (Same as t.device.queue.)

    Returns GPUQueue

  • get sharedState(): S
  • Gets the test fixture's shared state. This object is shared between subcases within the same testcase.

    Returns S

Methods

  • Emulate a texture to buffer copy by using a compute shader to load texture values of a subregion of a 2d texture and write to a storage buffer. For sample count == 1, the buffer contains extent[0] * extent[1] of the sample. For sample count > 1, the buffer contains extent[0] * extent[1] * (N = sampleCount) values sorted in the order of their sample index [0, sampleCount - 1]

    This can be useful when the texture to buffer copy is not available to the texture format e.g. (depth24plus), or when the texture is multisampled.

    MAINTENANCE_TODO: extend texture dimension to 1d and 3d.

    Parameters

    • type: ScalarType
    • componentCount: number
    • textureView: GPUTextureView
    • sampleCount: number = 1
    • extent_: GPUExtent3D = ...
    • origin_: GPUOrigin3D = ...

    Returns GPUBuffer

    storage buffer containing the copied value from the texture.

  • Returns a GPUCommandEncoder, GPUComputePassEncoder, GPURenderPassEncoder, or GPURenderBundleEncoder, and a finish method returning a GPUCommandBuffer. Allows testing methods which have the same signature across multiple encoder interfaces.

    Type Parameters

    • T extends "render pass" | "render bundle" | "compute pass" | "non-pass"

    Parameters

    • encoderType: T
    • __namedParameters: {
          attachmentInfo?: GPURenderBundleEncoderDescriptor;
          occlusionQuerySet?: GPUQuerySet;
          targets?: GPUTextureView[];
      } = {}
      • Optional attachmentInfo?: GPURenderBundleEncoderDescriptor
      • Optional occlusionQuerySet?: GPUQuerySet
      • Optional targets?: GPUTextureView[]

    Returns CommandBufferMaker<T>

    Example

    g.test('popDebugGroup')
    .params(u => u.combine('encoderType', kEncoderTypes))
    .fn(t => {
    const { encoder, finish } = t.createEncoder(t.params.encoderType);
    encoder.popDebugGroup();
    });

    g.test('writeTimestamp')
    .params(u => u.combine('encoderType', ['non-pass', 'compute pass', 'render pass'] as const)
    .fn(t => {
    const { encoder, finish } = t.createEncoder(t.params.encoderType);
    // Encoder type is inferred, so `writeTimestamp` can be used even though it doesn't exist
    // on GPURenderBundleEncoder.
    encoder.writeTimestamp(args);
    });
  • Parameters

    • error: Promise<undefined | Error | (undefined | Error)[]>
    • __namedParameters: {
          mode?: "fail" | "warn";
      } = {}
      • Optional mode?: "fail" | "warn"

    Returns void

  • Expect a buffer to consist exclusively of rows of some repeated expected value. The size of expectedValue must be 1, 2, or any multiple of 4 bytes. Rows in the buffer are expected to be zero-padded out to bytesPerRow. minBytesPerRow is the number of bytes per row that contain actual (non-padding) data and must be an exact multiple of the byte-length of expectedValue.

    Parameters

    • buffer: GPUBuffer
    • __namedParameters: {
          bytesPerRow: number;
          expectedValue: ArrayBuffer;
          minBytesPerRow: number;
          numRows: number;
      }
      • bytesPerRow: number
      • expectedValue: ArrayBuffer
      • minBytesPerRow: number
      • numRows: number

    Returns void

  • Expect a GPUBuffer's contents to equal the values in the provided TypedArray.

    Parameters

    • src: GPUBuffer
    • expected: Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float16Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array
    • srcByteOffset: number = 0
    • __namedParameters: {
          method?: "map" | "copy";
          mode?: "fail" | "warn";
      } = {}
      • Optional method?: "map" | "copy"
      • Optional mode?: "fail" | "warn"

    Returns void

  • Expect a GPUBuffer's contents to pass the provided check.

    A library of checks can be found in webgpu/util/check_contents.

    Type Parameters

    • T extends Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float16Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array

    Parameters

    • src: GPUBuffer
    • check: ((actual) => undefined | Error)
        • (actual): undefined | Error
        • Parameters

          • actual: T

          Returns undefined | Error

    • __namedParameters: {
          method?: "map" | "copy";
          mode?: "fail" | "warn";
          srcByteOffset?: number;
          type: TypedArrayBufferViewConstructor<T>;
          typedLength: number;
      }

    Returns void

  • Expect the specified WebGPU error to be generated when running the provided function.

    Type Parameters

    • R

    Parameters

    • filter: GPUErrorFilter
    • fn: (() => R)
        • (): R
        • Returns R

    • shouldError: boolean = true

    Returns R

  • If the argument is an Error, fail (or warn). If it's undefined, no-op. If the argument is an array, apply the above behavior on each of elements.

    Parameters

    • error: undefined | Error | (undefined | Error)[]
    • __namedParameters: {
          mode?: "fail" | "warn";
          niceStack?: Error;
      } = {}
      • Optional mode?: "fail" | "warn"
      • Optional niceStack?: Error

    Returns void

  • Expect an entire GPUTexture to have a single color at the given mip level (defaults to 0). MAINTENANCE_TODO: Remove this and/or replace it with a helper in TextureTestMixin.

    Parameters

    • src: GPUTexture
    • format: GPUTextureFormat
    • __namedParameters: {
          dimension?: GPUTextureDimension;
          exp: PerTexelComponent<number>;
          layout?: LayoutOptions;
          size: [number, number, number];
          slice?: number;
      }
      • Optional dimension?: GPUTextureDimension
      • exp: PerTexelComponent<number>
      • Optional layout?: LayoutOptions
      • size: [number, number, number]
      • Optional slice?: number

    Returns void

  • Take a single pixel of a 2D texture, interpret it using a TypedArray of the expected type, and expect each value in that array to be between the corresponding "expected" values (either a[i] <= actual[i] <= b[i] or a[i] >= actual[i] => b[i]). MAINTENANCE_TODO: Remove this once there is a way to deal with undefined lerp-ed values.

    Parameters

    • src: GPUTexture
    • format: "bgra8unorm" | "rgba8unorm" | "rgba16float" | "r8unorm" | "r8snorm" | "r8uint" | "r8sint" | "r16uint" | "r16sint" | "r16float" | "rg8unorm" | "rg8snorm" | "rg8uint" | "rg8sint" | "r32uint" | "r32sint" | "r32float" | "rg16uint" | "rg16sint" | "rg16float" | "rgba8unorm-srgb" | "rgba8snorm" | "rgba8uint" | "rgba8sint" | "bgra8unorm-srgb" | "rgb9e5ufloat" | "rgb10a2uint" | "rgb10a2unorm" | "rg11b10ufloat" | "rg32uint" | "rg32sint" | "rg32float" | "rgba16uint" | "rgba16sint" | "rgba32uint" | "rgba32sint" | "rgba32float" | "stencil8" | "depth16unorm" | "depth32float" | "bc1-rgba-unorm" | "bc1-rgba-unorm-srgb" | "bc2-rgba-unorm" | "bc2-rgba-unorm-srgb" | "bc3-rgba-unorm" | "bc3-rgba-unorm-srgb" | "bc4-r-unorm" | "bc4-r-snorm" | "bc5-rg-unorm" | "bc5-rg-snorm" | "bc6h-rgb-ufloat" | "bc6h-rgb-float" | "bc7-rgba-unorm" | "bc7-rgba-unorm-srgb" | "etc2-rgb8unorm" | "etc2-rgb8unorm-srgb" | "etc2-rgb8a1unorm" | "etc2-rgb8a1unorm-srgb" | "etc2-rgba8unorm" | "etc2-rgba8unorm-srgb" | "eac-r11unorm" | "eac-r11snorm" | "eac-rg11unorm" | "eac-rg11snorm" | "astc-4x4-unorm" | "astc-4x4-unorm-srgb" | "astc-5x4-unorm" | "astc-5x4-unorm-srgb" | "astc-5x5-unorm" | "astc-5x5-unorm-srgb" | "astc-6x5-unorm" | "astc-6x5-unorm-srgb" | "astc-6x6-unorm" | "astc-6x6-unorm-srgb" | "astc-8x5-unorm" | "astc-8x5-unorm-srgb" | "astc-8x6-unorm" | "astc-8x6-unorm-srgb" | "astc-8x8-unorm" | "astc-8x8-unorm-srgb" | "astc-10x5-unorm" | "astc-10x5-unorm-srgb" | "astc-10x6-unorm" | "astc-10x6-unorm-srgb" | "astc-10x8-unorm" | "astc-10x8-unorm-srgb" | "astc-10x10-unorm" | "astc-10x10-unorm-srgb" | "astc-12x10-unorm" | "astc-12x10-unorm-srgb" | "astc-12x12-unorm" | "astc-12x12-unorm-srgb"
    • __namedParameters: {
          x: number;
          y: number;
      }
      • x: number
      • y: number
    • __namedParameters: {
          checkElementsBetweenFn?: ((actual, expected) => undefined | Error);
          exp: [Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float16Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array, Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float16Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array];
          generateWarningOnly?: boolean;
          layout?: LayoutOptions;
          slice?: number;
      }
      • Optional checkElementsBetweenFn?: ((actual, expected) => undefined | Error)
          • (actual, expected): undefined | Error
          • Parameters

            • actual: Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float16Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array
            • expected: readonly [Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float16Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array, Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float16Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array]

            Returns undefined | Error

      • exp: [Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float16Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array, Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float16Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array]
      • Optional generateWarningOnly?: boolean
      • Optional layout?: LayoutOptions
      • Optional slice?: number

    Returns void

  • Expect a validation error inside the callback.

    Tests should always do just one WebGPU call in the callback, to make sure that's what's tested.

    Parameters

    • fn: (() => void)
        • (): void
        • Returns void

    • shouldError: boolean = true

    Returns void

  • returns true iff the langFeature is supported

    Parameters

    • langFeature: "readonly_and_readwrite_storage_textures" | "packed_4x8_integer_dot_product" | "unrestricted_pointer_parameters" | "pointer_composite_access"

    Returns boolean

  • Creates a buffer with the contents of some TypedArray. The buffer size will always be aligned to 4 as we set mappedAtCreation === true when creating the buffer.

    MAINTENANCE_TODO: Several call sites would be simplified if this took ArrayBuffer as well.

    Parameters

    • dataArray: Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float16Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array
    • usage: number

    Returns GPUBuffer

  • Parameters

    • limit: "maxTextureDimension1D" | "maxTextureDimension2D" | "maxTextureDimension3D" | "maxTextureArrayLayers" | "maxBindGroups" | "maxBindGroupsPlusVertexBuffers" | "maxBindingsPerBindGroup" | "maxDynamicUniformBuffersPerPipelineLayout" | "maxDynamicStorageBuffersPerPipelineLayout" | "maxSampledTexturesPerShaderStage" | "maxSamplersPerShaderStage" | "maxStorageBuffersPerShaderStage" | "maxStorageTexturesPerShaderStage" | "maxUniformBuffersPerShaderStage" | "maxUniformBufferBindingSize" | "maxStorageBufferBindingSize" | "minUniformBufferOffsetAlignment" | "minStorageBufferOffsetAlignment" | "maxVertexBuffers" | "maxBufferSize" | "maxVertexAttributes" | "maxVertexBufferArrayStride" | "maxInterStageShaderVariables" | "maxColorAttachments" | "maxColorAttachmentBytesPerSample" | "maxComputeWorkgroupStorageSize" | "maxComputeInvocationsPerWorkgroup" | "maxComputeWorkgroupSizeX" | "maxComputeWorkgroupSizeY" | "maxComputeWorkgroupSizeZ" | "maxComputeWorkgroupsPerDimension" | "maxStorageBuffersInFragmentStage" | "maxStorageTexturesInFragmentStage" | "maxStorageBuffersInVertexStage" | "maxStorageTexturesInVertexStage"
    • variant: ValueTestVariant

    Returns number

  • Snapshot the current contents of a range of a GPUBuffer, and return them as a TypedArray. Also provides a cleanup() function to unmap and destroy the staging buffer.

    Type Parameters

    • T extends Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float16Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array

    Parameters

    Returns Promise<{
        data: T;
        cleanup() => void;
    }>

  • Expect that the provided function throws (if true or string) or not (if false). If a string is provided, expect that the throw exception has that name.

    MAINTENANCE_TODO: Change to string | false so the exception name is always checked.

    Parameters

    • expectedError: string | boolean
    • fn: (() => void)
        • (): void
        • Returns void

    • __namedParameters: ExceptionCheckOptions = {}

    Returns void

  • Skips this test case if the langFeature is not supported.

    Parameters

    • langFeature: "readonly_and_readwrite_storage_textures" | "packed_4x8_integer_dot_product" | "unrestricted_pointer_parameters" | "pointer_composite_access"

    Returns void

  • Skips this test case if the langFeature is supported.

    Parameters

    • langFeature: "readonly_and_readwrite_storage_textures" | "packed_4x8_integer_dot_product" | "unrestricted_pointer_parameters" | "pointer_composite_access"

    Returns void

  • Tracks an object to be cleaned up after the test finishes.

    Usually when creating buffers/textures/query sets, you can use the helpers in GPUTest instead.

    Type Parameters

    • T extends DestroyableObject | Promise<DestroyableObject>

    Parameters

    • o: T

    Returns T

Generated using TypeDoc