UNPKG

@vladmandic/face-api

Version:

FaceAPI: AI-powered Face Detection & Rotation Tracking, Face Description & Recognition, Age & Gender & Emotion Prediction for Browser and NodeJS using TensorFlow/JS

1,555 lines (1,448 loc) 95.4 kB
/* eslint-disable */ // explicit copy of @webgpu/types to enable typedef bundling interface HTMLCanvasElement { getContext( contextId: | "webgpu" ): GPUCanvasContext | null; } interface OffscreenCanvas { getContext( contextId: | "webgpu" ): GPUCanvasContext | null; } type GPUExtent3DStrict = | Iterable<GPUIntegerCoordinate> | GPUExtent3DDictStrict; // GPUExtent3DDictStrict is defined to help developers catch a common class of errors. // This interface defines depth as an undefined, which will cause a type check failure if someone // attempts to set depth rather than depthOrArrayLayers on a GPUExtent3D (an easy mistake to make.) interface GPUExtent3DDictStrict extends GPUExtent3DDict { /** @deprecated use depthOrArrayLayers instead */ depth?: undefined; } // ********************************************************************************************* // Semi-auto-generated (by manual diff with autogenerated types) // ********************************************************************************************* type GPUBindingResource = | GPUSampler | GPUTextureView | GPUBufferBinding | GPUExternalTexture; type GPUBufferDynamicOffset = number; type GPUBufferUsageFlags = number; type GPUColor = | Iterable<number> | GPUColorDict; type GPUColorWriteFlags = number; type GPUComputePassTimestampWrites = Iterable<GPUComputePassTimestampWrite>; type GPUDepthBias = number; type GPUExtent3D = | Iterable<GPUIntegerCoordinate> | GPUExtent3DDict; type GPUFlagsConstant = number; type GPUIndex32 = number; type GPUIntegerCoordinate = number; type GPUMapModeFlags = number; type GPUOrigin2D = | Iterable<GPUIntegerCoordinate> | GPUOrigin2DDict; type GPUOrigin3D = | Iterable<GPUIntegerCoordinate> | GPUOrigin3DDict; type GPUPipelineConstantValue = number; type GPURenderPassTimestampWrites = Iterable<GPURenderPassTimestampWrite>; type GPUSampleMask = number; type GPUShaderStageFlags = number; type GPUSignedOffset32 = number; type GPUSize32 = number; type GPUSize64 = number; type GPUStencilValue = number; type GPUTextureUsageFlags = number; type GPUAddressMode = | "clamp-to-edge" | "repeat" | "mirror-repeat"; type GPUAutoLayoutMode = "auto"; type GPUBlendFactor = | "zero" | "one" | "src" | "one-minus-src" | "src-alpha" | "one-minus-src-alpha" | "dst" | "one-minus-dst" | "dst-alpha" | "one-minus-dst-alpha" | "src-alpha-saturated" | "constant" | "one-minus-constant"; type GPUBlendOperation = | "add" | "subtract" | "reverse-subtract" | "min" | "max"; type GPUBufferBindingType = | "uniform" | "storage" | "read-only-storage"; type GPUCanvasAlphaMode = | "opaque" | "premultiplied"; /** @deprecated use GPUCanvasAlphaMode instead */ type GPUCanvasCompositingAlphaMode = GPUCanvasAlphaMode; type GPUCompareFunction = | "never" | "less" | "equal" | "less-equal" | "greater" | "not-equal" | "greater-equal" | "always"; type GPUCompilationMessageType = | "error" | "warning" | "info"; type GPUComputePassTimestampLocation = | "beginning" | "end"; type GPUCullMode = | "none" | "front" | "back"; type GPUDeviceLostReason = "destroyed"; type GPUErrorFilter = | "out-of-memory" | "validation"; type GPUFeatureName = | "depth-clip-control" | "depth32float-stencil8" | "texture-compression-bc" | "texture-compression-etc2" | "texture-compression-astc" | "timestamp-query" | "indirect-first-instance" | "shader-f16" | "bgra8unorm-storage"; type GPUFilterMode = | "nearest" | "linear"; type GPUFrontFace = | "ccw" | "cw"; type GPUIndexFormat = | "uint16" | "uint32"; type GPULoadOp = | "load" | "clear"; type GPUMipmapFilterMode = | "nearest" | "linear"; type GPUPowerPreference = | "low-power" | "high-performance"; type GPUPrimitiveTopology = | "point-list" | "line-list" | "line-strip" | "triangle-list" | "triangle-strip"; type GPUQueryType = | "occlusion" | "timestamp"; type GPURenderPassTimestampLocation = | "beginning" | "end"; type GPUSamplerBindingType = | "filtering" | "non-filtering" | "comparison"; type GPUStencilOperation = | "keep" | "zero" | "replace" | "invert" | "increment-clamp" | "decrement-clamp" | "increment-wrap" | "decrement-wrap"; type GPUStorageTextureAccess = "write-only"; type GPUStoreOp = | "store" | "discard"; type GPUTextureAspect = | "all" | "stencil-only" | "depth-only"; type GPUTextureDimension = | "1d" | "2d" | "3d"; type GPUTextureFormat = | "r8unorm" | "r8snorm" | "r8uint" | "r8sint" | "r16uint" | "r16sint" | "r16float" | "rg8unorm" | "rg8snorm" | "rg8uint" | "rg8sint" | "r32uint" | "r32sint" | "r32float" | "rg16uint" | "rg16sint" | "rg16float" | "rgba8unorm" | "rgba8unorm-srgb" | "rgba8snorm" | "rgba8uint" | "rgba8sint" | "bgra8unorm" | "bgra8unorm-srgb" | "rgb9e5ufloat" | "rgb10a2unorm" | "rg11b10ufloat" | "rg32uint" | "rg32sint" | "rg32float" | "rgba16uint" | "rgba16sint" | "rgba16float" | "rgba32uint" | "rgba32sint" | "rgba32float" | "stencil8" | "depth16unorm" | "depth24plus" | "depth24plus-stencil8" | "depth32float" | "depth32float-stencil8" | "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"; type GPUTextureSampleType = | "float" | "unfilterable-float" | "depth" | "sint" | "uint"; type GPUTextureViewDimension = | "1d" | "2d" | "2d-array" | "cube" | "cube-array" | "3d"; type GPUVertexFormat = | "uint8x2" | "uint8x4" | "sint8x2" | "sint8x4" | "unorm8x2" | "unorm8x4" | "snorm8x2" | "snorm8x4" | "uint16x2" | "uint16x4" | "sint16x2" | "sint16x4" | "unorm16x2" | "unorm16x4" | "snorm16x2" | "snorm16x4" | "float16x2" | "float16x4" | "float32" | "float32x2" | "float32x3" | "float32x4" | "uint32" | "uint32x2" | "uint32x3" | "uint32x4" | "sint32" | "sint32x2" | "sint32x3" | "sint32x4"; type GPUVertexStepMode = | "vertex" | "instance"; interface GPUBindGroupDescriptor extends GPUObjectDescriptorBase { /** * The {@link GPUBindGroupLayout} the entries of this bind group will conform to. */ layout: GPUBindGroupLayout; /** * A list of entries describing the resources to expose to the shader for each binding * described by the {@link GPUBindGroupDescriptor#layout}. */ entries: Iterable<GPUBindGroupEntry>; } interface GPUBindGroupEntry { /** * A unique identifier for a resource binding within the {@link GPUBindGroup}, corresponding to a * {@link GPUBindGroupLayoutEntry#binding|GPUBindGroupLayoutEntry.binding} and a @binding * attribute in the {@link GPUShaderModule}. */ binding: GPUIndex32; /** * The resource to bind, which may be a {@link GPUSampler}, {@link GPUTextureView}, * {@link GPUExternalTexture}, or {@link GPUBufferBinding}. */ resource: GPUBindingResource; } interface GPUBindGroupLayoutDescriptor extends GPUObjectDescriptorBase { entries: Iterable<GPUBindGroupLayoutEntry>; } interface GPUBindGroupLayoutEntry { /** * A unique identifier for a resource binding within the {@link GPUBindGroupLayout}, corresponding * to a {@link GPUBindGroupEntry#binding|GPUBindGroupEntry.binding} and a @binding * attribute in the {@link GPUShaderModule}. */ binding: GPUIndex32; /** * A bitset of the members of {@link GPUShaderStage}. * Each set bit indicates that a {@link GPUBindGroupLayoutEntry}'s resource * will be accessible from the associated shader stage. */ visibility: GPUShaderStageFlags; /** * When not `undefined`, indicates the binding resource type for this {@link GPUBindGroupLayoutEntry} * is {@link GPUBufferBinding}. */ buffer?: GPUBufferBindingLayout; /** * When not `undefined`, indicates the binding resource type for this {@link GPUBindGroupLayoutEntry} * is {@link GPUSampler}. */ sampler?: GPUSamplerBindingLayout; /** * When not `undefined`, indicates the binding resource type for this {@link GPUBindGroupLayoutEntry} * is {@link GPUTextureView}. */ texture?: GPUTextureBindingLayout; /** * When not `undefined`, indicates the binding resource type for this {@link GPUBindGroupLayoutEntry} * is {@link GPUTextureView}. */ storageTexture?: GPUStorageTextureBindingLayout; /** * When not `undefined`, indicates the binding resource type for this {@link GPUBindGroupLayoutEntry} * is {@link GPUExternalTexture}. */ externalTexture?: GPUExternalTextureBindingLayout; } interface GPUBlendComponent { /** * Defines the {@link GPUBlendOperation} used to calculate the values written to the target * attachment components. */ operation?: GPUBlendOperation; /** * Defines the {@link GPUBlendFactor} operation to be performed on values from the fragment shader. */ srcFactor?: GPUBlendFactor; /** * Defines the {@link GPUBlendFactor} operation to be performed on values from the target attachment. */ dstFactor?: GPUBlendFactor; } interface GPUBlendState { color: GPUBlendComponent; alpha: GPUBlendComponent; } interface GPUBufferBinding { /** * The {@link GPUBuffer} to bind. */ buffer: GPUBuffer; /** * The offset, in bytes, from the beginning of {@link GPUBufferBinding#buffer} to the * beginning of the range exposed to the shader by the buffer binding. */ offset?: GPUSize64; /** * The size, in bytes, of the buffer binding. If `undefined`, specifies the range starting at * {@link GPUBufferBinding#offset} and ending at the end of {@link GPUBufferBinding#buffer}. */ size?: GPUSize64; } interface GPUBufferBindingLayout { /** * Indicates the type required for buffers bound to this bindings. */ type?: GPUBufferBindingType; /** * Indicates whether this binding requires a dynamic offset. */ hasDynamicOffset?: boolean; /** * Indicates the minimum buffer binding size. * Bindings are always validated against this size in {@link GPUDevice#createBindGroup}. * If this *is not* `0`, pipeline creation additionally [$validating shader binding|validates$] * that this value is large enough for the bindings declared in the shader. * If this *is* `0`, draw/dispatch commands additionally [$Validate encoder bind groups|validate$] * that each binding in the {@link GPUBindGroup} is large enough for the bindings declared in the shader. * Note: * Similar execution-time validation is theoretically possible for other * binding-related fields specified for early validation, like * {@link GPUTextureBindingLayout#sampleType} and {@link GPUStorageTextureBindingLayout#format}, * which currently can only be validated in pipeline creation. * However, such execution-time validation could be costly or unnecessarily complex, so it is * available only for {@link GPUBufferBindingLayout#minBindingSize} which is expected to have the * most ergonomic impact. */ minBindingSize?: GPUSize64; } interface GPUBufferDescriptor extends GPUObjectDescriptorBase { /** * The size of the buffer in bytes. */ size: GPUSize64; /** * The allowed usages for the buffer. */ usage: GPUBufferUsageFlags; /** * If `true` creates the buffer in an already mapped state, allowing * {@link GPUBuffer#getMappedRange} to be called immediately. It is valid to set * {@link GPUBufferDescriptor#mappedAtCreation} to `true` even if {@link GPUBufferDescriptor#usage} * does not contain {@link GPUBufferUsage#MAP_READ} or {@link GPUBufferUsage#MAP_WRITE}. This can be * used to set the buffer's initial data. * Guarantees that even if the buffer creation eventually fails, it will still appear as if the * mapped range can be written/read to until it is unmapped. */ mappedAtCreation?: boolean; } interface GPUCanvasConfiguration { /** * The {@link GPUDevice} that textures returned by {@link GPUCanvasContext#getCurrentTexture} will be * compatible with. */ device: GPUDevice; /** * The format that textures returned by {@link GPUCanvasContext#getCurrentTexture} will have. * Must be one of the Supported context formats. */ format: GPUTextureFormat; /** * The usage that textures returned by {@link GPUCanvasContext#getCurrentTexture} will have. * {@link GPUTextureUsage#RENDER_ATTACHMENT} is the default, but is not automatically included * if the usage is explicitly set. Be sure to include {@link GPUTextureUsage#RENDER_ATTACHMENT} * when setting a custom usage if you wish to use textures returned by * {@link GPUCanvasContext#getCurrentTexture} as color targets for a render pass. */ usage?: GPUTextureUsageFlags; /** * The formats that views created from textures returned by * {@link GPUCanvasContext#getCurrentTexture} may use. */ viewFormats?: Iterable<GPUTextureFormat>; /** * The color space that values written into textures returned by * {@link GPUCanvasContext#getCurrentTexture} should be displayed with. */ colorSpace?: PredefinedColorSpace; /** * Determines the effect that alpha values will have on the content of textures returned by * {@link GPUCanvasContext#getCurrentTexture} when read, displayed, or used as an image source. */ alphaMode?: GPUCanvasAlphaMode; /** @deprecated use alphaMode instead (it is specified to affect the behavior of reading from the canvas) */ compositingAlphaMode?: GPUCanvasCompositingAlphaMode; /** @deprecated use the canvas width/height instead */ size?: GPUExtent3D; } interface GPUColorDict { r: number; g: number; b: number; a: number; } interface GPUColorTargetState { format: GPUTextureFormat; blend?: GPUBlendState; writeMask?: GPUColorWriteFlags; } type GPUCommandBufferDescriptor = GPUObjectDescriptorBase; type GPUCommandEncoderDescriptor = GPUObjectDescriptorBase; interface GPUComputePassDescriptor extends GPUObjectDescriptorBase { /** * A sequence of {@link GPUComputePassTimestampWrite} values define where and when timestamp values will be written for this pass. */ timestampWrites?: GPUComputePassTimestampWrites; } interface GPUComputePassTimestampWrite { querySet: GPUQuerySet; queryIndex: GPUSize32; location: GPUComputePassTimestampLocation; } interface GPUComputePipelineDescriptor extends GPUPipelineDescriptorBase { /** * Describes the compute shader entry point of the pipeline. */ compute: GPUProgrammableStage; } interface GPUDepthStencilState { /** * The {@link GPUTextureViewDescriptor#format} of {@link GPURenderPassDescriptor#depthStencilAttachment} * this {@link GPURenderPipeline} will be compatible with. */ format: GPUTextureFormat; /** * Indicates if this {@link GPURenderPipeline} can modify * {@link GPURenderPassDescriptor#depthStencilAttachment} depth values. */ depthWriteEnabled?: boolean; /** * The comparison operation used to test fragment depths against * {@link GPURenderPassDescriptor#depthStencilAttachment} depth values. */ depthCompare?: GPUCompareFunction; /** * Defines how stencil comparisons and operations are performed for front-facing primitives. */ stencilFront?: GPUStencilFaceState; /** * Defines how stencil comparisons and operations are performed for back-facing primitives. */ stencilBack?: GPUStencilFaceState; /** * Bitmask controlling which {@link GPURenderPassDescriptor#depthStencilAttachment} stencil value * bits are read when performing stencil comparison tests. */ stencilReadMask?: GPUStencilValue; /** * Bitmask controlling which {@link GPURenderPassDescriptor#depthStencilAttachment} stencil value * bits are written to when performing stencil operations. */ stencilWriteMask?: GPUStencilValue; /** * Constant depth bias added to each fragment. See [$biased fragment depth$] for details. */ depthBias?: GPUDepthBias; /** * Depth bias that scales with the fragment’s slope. See [$biased fragment depth$] for details. */ depthBiasSlopeScale?: number; /** * The maximum depth bias of a fragment. See [$biased fragment depth$] for details. */ depthBiasClamp?: number; } interface GPUDeviceDescriptor extends GPUObjectDescriptorBase { /** * Specifies the features that are required by the device request. * The request will fail if the adapter cannot provide these features. * Exactly the specified set of features, and no more or less, will be allowed in validation * of API calls on the resulting device. */ requiredFeatures?: 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/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, GPUSize64 >; /** * The descriptor for the default {@link GPUQueue}. */ defaultQueue?: GPUQueueDescriptor; } interface GPUExtent3DDict { width: GPUIntegerCoordinate; height?: GPUIntegerCoordinate; depthOrArrayLayers?: GPUIntegerCoordinate; } interface GPUExternalTextureBindingLayout {} interface GPUExternalTextureDescriptor extends GPUObjectDescriptorBase { source: HTMLVideoElement; colorSpace?: PredefinedColorSpace; } interface GPUFragmentState extends GPUProgrammableStage { targets: Iterable<GPUColorTargetState | null>; } interface GPUImageCopyBuffer extends GPUImageDataLayout { /** * A buffer which either contains image data to be copied or will store the image data being * copied, depending on the method it is being passed to. */ buffer: GPUBuffer; } interface GPUImageCopyExternalImage { /** * The source of the image copy. The copy source data is captured at the moment that * {@link GPUQueue#copyExternalImageToTexture} is issued. */ source: | ImageBitmap | HTMLCanvasElement | OffscreenCanvas; /** * Defines the origin of the copy - the minimum (top-left) corner of the source sub-region to copy from. * Together with `copySize`, defines the full copy sub-region. */ origin?: GPUOrigin2D; /** * Describes whether the source image is vertically flipped, or not. * If this option is set to `true`, the copy is flipped vertically: the bottom row of the source * region is copied into the first row of the destination region, and so on. * The {@link GPUImageCopyExternalImage#origin} option is still relative to the top-left corner * of the source image, increasing downward. */ flipY?: boolean; } interface GPUImageCopyTexture { /** * Texture to copy to/from. */ texture: GPUTexture; /** * Mip-map level of the {@link GPUImageCopyTexture#texture} to copy to/from. */ mipLevel?: GPUIntegerCoordinate; /** * Defines the origin of the copy - the minimum corner of the texture sub-region to copy to/from. * Together with `copySize`, defines the full copy sub-region. */ origin?: GPUOrigin3D; /** * Defines which aspects of the {@link GPUImageCopyTexture#texture} to copy to/from. */ aspect?: GPUTextureAspect; } interface GPUImageCopyTextureTagged extends GPUImageCopyTexture { /** * Describes the color space and encoding used to encode data into the destination texture. * This [[#color-space-conversions|may result]] in values outside of the range [0, 1] * being written to the target texture, if its format can represent them. * Otherwise, the results are clamped to the target texture format's range. * Note: * If {@link GPUImageCopyTextureTagged#colorSpace} matches the source image, * conversion may not be necessary. See [[#color-space-conversion-elision]]. */ colorSpace?: PredefinedColorSpace; /** * Describes whether the data written into the texture should have its RGB channels * premultiplied by the alpha channel, or not. * If this option is set to `true` and the {@link GPUImageCopyExternalImage#source} is also * premultiplied, the source RGB values must be preserved even if they exceed their * corresponding alpha values. * Note: * If {@link GPUImageCopyTextureTagged#premultipliedAlpha} matches the source image, * conversion may not be necessary. See [[#color-space-conversion-elision]]. */ premultipliedAlpha?: boolean; } interface GPUImageDataLayout { /** * The offset, in bytes, from the beginning of the image data source (such as a * {@link GPUImageCopyBuffer#buffer|GPUImageCopyBuffer.buffer}) to the start of the image data * within that source. */ offset?: GPUSize64; /** * The stride, in bytes, between the beginning of each block row and the subsequent block row. * Required if there are multiple block rows (i.e. the copy height or depth is more than one block). */ bytesPerRow?: GPUSize32; /** * Number of block rows per single image of the texture. * {@link GPUImageDataLayout#rowsPerImage} &times; * {@link GPUImageDataLayout#bytesPerRow} is the stride, in bytes, between the beginning of each image of data and the subsequent image. * Required if there are multiple images (i.e. the copy depth is more than one). */ rowsPerImage?: GPUSize32; } interface GPUMultisampleState { /** * Number of samples per pixel. This {@link GPURenderPipeline} will be compatible only * with attachment textures ({@link GPURenderPassDescriptor#colorAttachments} * and {@link GPURenderPassDescriptor#depthStencilAttachment}) * with matching {@link GPUTextureDescriptor#sampleCount}s. */ count?: GPUSize32; /** * Mask determining which samples are written to. */ mask?: GPUSampleMask; /** * When `true` indicates that a fragment's alpha channel should be used to generate a sample * coverage mask. */ alphaToCoverageEnabled?: boolean; } interface GPUObjectDescriptorBase { /** * The initial value of {@link GPUObjectBase#label|GPUObjectBase.label}. */ label?: string; } interface GPUOrigin2DDict { x?: GPUIntegerCoordinate; y?: GPUIntegerCoordinate; } interface GPUOrigin3DDict { x?: GPUIntegerCoordinate; y?: GPUIntegerCoordinate; z?: GPUIntegerCoordinate; } interface GPUPipelineDescriptorBase extends GPUObjectDescriptorBase { layout: | GPUPipelineLayout | GPUAutoLayoutMode; } interface GPUPipelineLayoutDescriptor extends GPUObjectDescriptorBase { /** * A list of {@link GPUBindGroupLayout}s the pipline will use. Each element corresponds to a * @group attribute in the {@link GPUShaderModule}, with the `N`th element corresponding with * `@group(N)`. */ bindGroupLayouts: Iterable<GPUBindGroupLayout>; } interface GPUPrimitiveState { /** * The type of primitive to be constructed from the vertex inputs. */ topology?: GPUPrimitiveTopology; /** * For strip topologies ({@link GPUPrimitiveTopology#"line-strip"} or * {@link GPUPrimitiveTopology#"triangle-strip"}), defines the format of indices that may be used * with this {@link GPURenderPipeline}. This determines the strip's primitive restart value. See * [[#primitive-assembly]] for additional details. * Required only if the pipeline is used with indexed draw calls. * Not allowed with non-strip topologies. */ stripIndexFormat?: GPUIndexFormat; /** * Defines which polygons are considered front-facing. */ frontFace?: GPUFrontFace; /** * Defines which polygon orientation will be culled, if any. */ cullMode?: GPUCullMode; /** * If true, indicates that depth clipping is disabled. See [[#depth-clip-control]] for additional details. * Requires the {@link GPUFeatureName#"depth-clip-control"} feature to be enabled. */ unclippedDepth?: boolean; } interface GPUProgrammableStage { module: GPUShaderModule; entryPoint: string; constants?: Record< string, GPUPipelineConstantValue >; } interface GPUQuerySetDescriptor extends GPUObjectDescriptorBase { /** * The type of queries managed by {@link GPUQuerySet}. */ type: GPUQueryType; /** * The number of queries managed by {@link GPUQuerySet}. */ count: GPUSize32; } type GPUQueueDescriptor = GPUObjectDescriptorBase; type GPURenderBundleDescriptor = GPUObjectDescriptorBase; interface GPURenderBundleEncoderDescriptor extends GPURenderPassLayout { depthReadOnly?: boolean; stencilReadOnly?: boolean; } interface GPURenderPassColorAttachment { /** * A {@link GPUTextureView} describing the texture subresource that will be output to for this * color attachment. */ view: GPUTextureView; /** * A {@link GPUTextureView} describing the texture subresource that will receive the resolved * output for this color attachment if {@link GPURenderPassColorAttachment#view} is * multisampled. */ resolveTarget?: GPUTextureView; /** * Indicates the value to clear {@link GPURenderPassColorAttachment#view} to prior to executing the * render pass. If not map/exist|provided defaults to `{r: 0, g: 0, b: 0, a: 0}`. Ignored * if {@link GPURenderPassColorAttachment#loadOp} is not {@link GPULoadOp#"clear"}. * The members of {@link GPURenderPassColorAttachment#clearValue} are all double values, so * they will first be converted to the fully qualified format type of * {@link GPURenderPassColorAttachment#view} before being set as the clear value of * {@link GPURenderPassColorAttachment#view}. * <div algorithm="clearValue to texture value"> * Let `colorAttachmentFormat` be * {@link GPURenderPassColorAttachment#view}.{@link GPUTextureView#[[descriptor]]}.{@link GPUTextureViewDescriptor#format}. * `colorAttachmentFormat` has up to four components: `r`, `g`, `b`, and `a`, each * component containing one scalar value. * For each `componentType` of `colorAttachmentFormat` and corresponding component scalar * value `value` in {@link GPURenderPassColorAttachment#clearValue}: * 1. If `componentType` is a: * <dl class=switch> * : floating-point type or normalized type * Convert `value` converted to an IDL value|to an IDL value of type {{unrestricted float}} (`f32`). * : signed integer type * Convert `value` converted to an IDL value|to an IDL value of type {{long long}} (`i32`). * : unsigned integer type * Convert `value` converted to an IDL value|to an IDL value of type {{unsigned long long}} (`u32`). */ clearValue?: GPUColor; loadOp: GPULoadOp; storeOp: GPUStoreOp; } interface GPURenderPassDepthStencilAttachment { /** * A {@link GPUTextureView} describing the texture subresource that will be output to * and read from for this depth/stencil attachment. */ view: GPUTextureView; /** * Indicates the value to clear {@link GPURenderPassDepthStencilAttachment#view}'s depth component * to prior to executing the render pass. Ignored if {@link GPURenderPassDepthStencilAttachment#depthLoadOp} * is not {@link GPULoadOp#"clear"}. Must be between 0.0 and 1.0, inclusive. * <!-- unless unrestricted depth is enabled --> */ depthClearValue?: number; /** * Indicates the load operation to perform on {@link GPURenderPassDepthStencilAttachment#view}'s * depth component prior to executing the render pass. * Note: It is recommended to prefer clearing; see {@link GPULoadOp#"clear"} for details. */ depthLoadOp?: GPULoadOp; /** * The store operation to perform on {@link GPURenderPassDepthStencilAttachment#view}'s * depth component after executing the render pass. * Note: It is recommended to prefer a clear-value; see {@link GPULoadOp#"load"}. */ depthStoreOp?: GPUStoreOp; /** * Indicates that the depth component of {@link GPURenderPassDepthStencilAttachment#view} * is read only. */ depthReadOnly?: boolean; /** * Indicates the value to clear {@link GPURenderPassDepthStencilAttachment#view}'s stencil component * to prior to executing the render pass. Ignored if {@link GPURenderPassDepthStencilAttachment#stencilLoadOp} * is not {@link GPULoadOp#"clear"}. * The value will be converted to the type of the stencil aspect of `view` by taking the same * number of LSBs as the number of bits in the stencil aspect of one texel block of `view`. */ stencilClearValue?: GPUStencilValue; /** * Indicates the load operation to perform on {@link GPURenderPassDepthStencilAttachment#view}'s * stencil component prior to executing the render pass. * Note: It is recommended to prefer clearing; see {@link GPULoadOp#"clear"} for details. */ stencilLoadOp?: GPULoadOp; /** * The store operation to perform on {@link GPURenderPassDepthStencilAttachment#view}'s * stencil component after executing the render pass. */ stencilStoreOp?: GPUStoreOp; /** * Indicates that the stencil component of {@link GPURenderPassDepthStencilAttachment#view} * is read only. */ stencilReadOnly?: boolean; } interface GPURenderPassDescriptor extends GPUObjectDescriptorBase { /** * The set of {@link GPURenderPassColorAttachment} values in this sequence defines which * color attachments will be output to when executing this render pass. * Due to compatible usage list|usage compatibility, no color attachment * may alias another attachment or any resource used inside the render pass. */ colorAttachments: Iterable<GPURenderPassColorAttachment | null>; /** * The {@link GPURenderPassDepthStencilAttachment} value that defines the depth/stencil * attachment that will be output to and tested against when executing this render pass. * Due to compatible usage list|usage compatibility, no writable depth/stencil attachment * may alias another attachment or any resource used inside the render pass. */ depthStencilAttachment?: GPURenderPassDepthStencilAttachment; /** * The {@link GPUQuerySet} value defines where the occlusion query results will be stored for this pass. */ occlusionQuerySet?: GPUQuerySet; /** * A sequence of {@link GPURenderPassTimestampWrite} values defines where and when timestamp values will be written for this pass. */ timestampWrites?: GPURenderPassTimestampWrites; /** * The maximum number of draw calls that will be done in the render pass. Used by some * implementations to size work injected before the render pass. Keeping the default value * is a good default, unless it is known that more draw calls will be done. */ maxDrawCount?: GPUSize64; } interface GPURenderPassLayout extends GPUObjectDescriptorBase { colorFormats: Iterable<GPUTextureFormat | null>; depthStencilFormat?: GPUTextureFormat; sampleCount?: GPUSize32; } interface GPURenderPassTimestampWrite { querySet: GPUQuerySet; queryIndex: GPUSize32; location: GPURenderPassTimestampLocation; } interface GPURenderPipelineDescriptor extends GPUPipelineDescriptorBase { /** * Describes the vertex shader entry point of the pipeline and its input buffer layouts. */ vertex: GPUVertexState; /** * Describes the primitive-related properties of the pipeline. */ primitive?: GPUPrimitiveState; /** * Describes the optional depth-stencil properties, including the testing, operations, and bias. */ depthStencil?: GPUDepthStencilState; /** * Describes the multi-sampling properties of the pipeline. */ multisample?: GPUMultisampleState; /** * Describes the fragment shader entry point of the pipeline and its output colors. If * `undefined`, the [[#no-color-output]] mode is enabled. */ fragment?: GPUFragmentState; } interface GPURequestAdapterOptions { powerPreference?: GPUPowerPreference; forceFallbackAdapter?: boolean; } interface GPUSamplerBindingLayout { /** * Indicates the required type of a sampler bound to this bindings. */ type?: GPUSamplerBindingType; } interface GPUSamplerDescriptor extends GPUObjectDescriptorBase { /** */ addressModeU?: GPUAddressMode; /** */ addressModeV?: GPUAddressMode; /** * Specifies the {{GPUAddressMode|address modes}} for the texture width, height, and depth * coordinates, respectively. */ addressModeW?: GPUAddressMode; /** * Specifies the sampling behavior when the sample footprint is smaller than or equal to one * texel. */ magFilter?: GPUFilterMode; /** * Specifies the sampling behavior when the sample footprint is larger than one texel. */ minFilter?: GPUFilterMode; /** * Specifies behavior for sampling between mipmap levels. */ mipmapFilter?: GPUMipmapFilterMode; /** */ lodMinClamp?: number; /** * Specifies the minimum and maximum levels of detail, respectively, used internally when * sampling a texture. */ lodMaxClamp?: number; /** * When provided the sampler will be a comparison sampler with the specified * {@link GPUCompareFunction}. * Note: Comparison samplers may use filtering, but the sampling results will be * implementation-dependent and may differ from the normal filtering rules. */ compare?: GPUCompareFunction; /** * Specifies the maximum anisotropy value clamp used by the sampler. * Note: Most implementations support {@link GPUSamplerDescriptor#maxAnisotropy} values in range * between 1 and 16, inclusive. The used value of {@link GPUSamplerDescriptor#maxAnisotropy} will * be clamped to the maximum value that the platform supports. */ maxAnisotropy?: number; } interface GPUShaderModuleCompilationHint { /** * A {@link GPUPipelineLayout} that the {@link GPUShaderModule} may be used with in a future * {@link GPUDevice#createComputePipeline()} or {@link GPUDevice#createRenderPipeline} call. * If set to {@link GPUAutoLayoutMode#"auto"} the layout will be the [$default pipeline layout$] * for the entry point associated with this hint will be used. */ layout?: | GPUPipelineLayout | GPUAutoLayoutMode; } interface GPUShaderModuleDescriptor extends GPUObjectDescriptorBase { /** * The <a href="https://gpuweb.github.io/gpuweb/wgsl/">WGSL</a> source code for the shader * module. */ code: string; /** * If defined MAY be interpreted as a source-map-v3 format. * Source maps are optional, but serve as a standardized way to support dev-tool * integration such as source-language debugging [[SourceMap]]. * WGSL names (identifiers) in source maps follow the rules defined in WGSL identifier * comparison. */ sourceMap?: object; /** * If defined maps an entry point name from the shader to a {@link GPUShaderModuleCompilationHint}. * No validation is performed with any of these {@link GPUShaderModuleCompilationHint}. * Implementations should use any information present in the {@link GPUShaderModuleCompilationHint} * to perform as much compilation as is possible within {@link GPUDevice#createShaderModule}. * Entry point names follow the rules defined in WGSL identifier comparison. * Note: Supplying information in {@link GPUShaderModuleDescriptor#hints} does not have any * observable effect, other than performance. Because a single shader module can hold * multiple entry points, and multiple pipelines can be created from a single shader * module, it can be more performant for an implementation to do as much compilation as * possible once in {@link GPUDevice#createShaderModule} rather than multiple times in * the multiple calls to {@link GPUDevice#createComputePipeline} / * {@link GPUDevice#createRenderPipeline}. */ hints?: Record< string, GPUShaderModuleCompilationHint >; } interface GPUStencilFaceState { /** * The {@link GPUCompareFunction} used when testing fragments against * {@link GPURenderPassDescriptor#depthStencilAttachment} stencil values. */ compare?: GPUCompareFunction; /** * The {@link GPUStencilOperation} performed if the fragment stencil comparison test described by * {@link GPUStencilFaceState#compare} fails. */ failOp?: GPUStencilOperation; /** * The {@link GPUStencilOperation} performed if the fragment depth comparison described by * {@link GPUDepthStencilState#depthCompare} fails. */ depthFailOp?: GPUStencilOperation; /** * The {@link GPUStencilOperation} performed if the fragment stencil comparison test described by * {@link GPUStencilFaceState#compare} passes. */ passOp?: GPUStencilOperation; } interface GPUStorageTextureBindingLayout { /** * Indicates whether texture views bound to this binding will be bound for read-only or * write-only access. */ access?: GPUStorageTextureAccess; /** * The required {@link GPUTextureViewDescriptor#format} of texture views bound to this binding. */ format: GPUTextureFormat; /** * Indicates the required {@link GPUTextureViewDescriptor#dimension} for texture views bound to * this binding. */ viewDimension?: GPUTextureViewDimension; } interface GPUTextureBindingLayout { /** * Indicates the type required for texture views bound to this binding. */ sampleType?: GPUTextureSampleType; /** * Indicates the required {@link GPUTextureViewDescriptor#dimension} for texture views bound to * this binding. */ viewDimension?: GPUTextureViewDimension; /** * Indicates whether or not texture views bound to this binding must be multisampled. */ multisampled?: boolean; } interface GPUTextureDescriptor extends GPUObjectDescriptorBase { /** * The width, height, and depth or layer count of the texture. */ size: GPUExtent3DStrict; /** * The number of mip levels the texture will contain. */ mipLevelCount?: GPUIntegerCoordinate; /** * The sample count of the texture. A {@link GPUTextureDescriptor#sampleCount} &gt; `1` indicates * a multisampled texture. */ sampleCount?: GPUSize32; /** * Whether the texture is one-dimensional, an array of two-dimensional layers, or three-dimensional. */ dimension?: GPUTextureDimension; /** * The format of the texture. */ format: GPUTextureFormat; /** * The allowed usages for the texture. */ usage: GPUTextureUsageFlags; /** * Specifies what view {@link GPUTextureViewDescriptor#format} values will be allowed when calling * {@link GPUTexture#createView} on this texture (in addition to the texture's actual * {@link GPUTextureDescriptor#format}). * <div class=note> * Note: * Adding a format to this list may have a significant performance impact, so it is best * to avoid adding formats unnecessarily. * The actual performance impact is highly dependent on the target system; developers must * test various systems to find out the impact on their particular application. * For example, on some systems any texture with a {@link GPUTextureDescriptor#format} or * {@link GPUTextureDescriptor#viewFormats} entry including * {@link GPUTextureFormat#"rgba8unorm-srgb"} will perform less optimally than a * {@link GPUTextureFormat#"rgba8unorm"} texture which does not. * Similar caveats exist for other formats and pairs of formats on other systems. * </div> * Formats in this list must be texture view format compatible with the texture format. * <div algorithm> * Two {@link GPUTextureFormat}s `format` and `viewFormat` are <dfn dfn for=>texture view format compatible</dfn> if: * - `format` equals `viewFormat`, or * - `format` and `viewFormat` differ only in whether they are `srgb` formats (have the `-srgb` suffix). * Issue(gpuweb/gpuweb#168): Define larger compatibility classes. * </div> */ viewFormats?: Iterable<GPUTextureFormat>; } interface GPUTextureViewDescriptor extends GPUObjectDescriptorBase { /** * The format of the texture view. Must be either the {@link GPUTextureDescriptor#format} of the * texture or one of the {@link GPUTextureDescriptor#viewFormats} specified during its creation. */ format?: GPUTextureFormat; /** * The dimension to view the texture as. */ dimension?: GPUTextureViewDimension; /** * Which {@link GPUTextureAspect|aspect(s)} of the texture are accessible to the texture view. */ aspect?: GPUTextureAspect; /** * The first (most detailed) mipmap level accessible to the texture view. */ baseMipLevel?: GPUIntegerCoordinate; /** * How many mipmap levels, starting with {@link GPUTextureViewDescriptor#baseMipLevel}, are accessible to * the texture view. */ mipLevelCount?: GPUIntegerCoordinate; /** * The index of the first array layer accessible to the texture view. */ baseArrayLayer?: GPUIntegerCoordinate; /** * How many array layers, starting with {@link GPUTextureViewDescriptor#baseArrayLayer}, are accessible * to the texture view. */ arrayLayerCount?: GPUIntegerCoordinate; } interface GPUUncapturedErrorEventInit extends EventInit { error: GPUError; } interface GPUVertexAttribute { /** * The {@link GPUVertexFormat} of the attribute. */ format: GPUVertexFormat; /** * The offset, in bytes, from the beginning of the element to the data for the attribute. */ offset: GPUSize64; /** * The numeric location associated with this attribute, which will correspond with a * <a href="https://gpuweb.github.io/gpuweb/wgsl/#input-output-locations">"@location" attribute</a> * declared in the {@link GPURenderPipelineDescriptor#vertex}.{@link GPUProgrammableStage#module|module}. */ shaderLocation: GPUIndex32; } interface GPUVertexBufferLayout { /** * The stride, in bytes, between elements of this array. */ arrayStride: GPUSize64; /** * Whether each element of this array represents per-vertex data or per-instance data */ stepMode?: GPUVertexStepMode; /** * An array defining the layout of the vertex attributes within each element. */ attributes: Iterable<GPUVertexAttribute>; } interface GPUVertexState extends GPUProgrammableStage { buffers?: Iterable<GPUVertexBufferLayout | null>; } interface GPUBindingCommandsMixin { /** * Sets the current {@link GPUBindGroup} for the given index. * @param index - The index to set the bind group at. * @param bindGroup - Bind group to use for subsequent render or compute commands. * <!--The overload appears to be confusing bikeshed, and it ends up expecting this to * define the arguments for the 5-arg variant of the method, despite the "for" * explicitly pointing at the 3-arg variant. See * @param https - //github.com/plinss/widlparser/issues/56 and * @param https - //github.com/tabatkins/bikeshed/issues/1740 --> * @param dynamicOffsets - Array containing buffer offsets in bytes for each entry in * `bindGroup` marked as {@link GPUBindGroupLayoutEntry#buffer}.{@link GPUBufferBindingLayout#hasDynamicOffset}.--> */ setBindGroup( index: GPUIndex32, bindGroup: GPUBindGroup, dynamicOffsets?: Iterable<GPUBufferDynamicOffset> ): undefined; /** * Sets the current {@link GPUBindGroup} for the given index, specifying dynamic offsets as a subset * of a {@link Uint32Array}. * @param index - The index to set the bind group at. * @param bindGroup - Bind group to use for subsequent render or compute commands. * @param dynamicOffsetsData - Array containing buffer offsets in bytes for each entry in * `bindGroup` marked as {@link GPUBindGroupLayoutEntry#buffer}.{@link GPUBufferBindingLayout#hasDynamicOffset}. * @param dynamicOffsetsDataStart - Offset in elements into `dynamicOffsetsData` where the * buffer offset data begins. * @param dynamicOffsetsDataLength - Number of buffer offsets to read from `dynamicOffsetsData`. */ setBindGroup( index: GPUIndex32, bindGroup: GPUBindGroup, dynamicOffsetsData: Uint32Array, dynamicOffsetsDataStart: GPUSize64, dynamicOffsetsDataLength: GPUSize32 ): undefined; } interface GPUCommandsMixin {} interface GPUDebugCommandsMixin { /** * Begins a labeled debug group containing subsequent commands. * @param groupLabel - The label for the command group. */ pushDebugGroup( groupLabel: string ): undefined; /** * Ends the labeled debug group most recently started by {@link GPUDebugCommandsMixin#pushDebugGroup}. */ popDebugGroup(): undefined; /** * Marks a point in a stream of commands with a label. * @param markerLabel - The label to insert. */ insertDebugMarker( markerLabel: string ): undefined; } interface GPUObjectBase { /** * Initially the empty string. * A developer-provided label which can be used by the browser, OS, or other tools to help * identify the underlying internal object to the developer. Examples include displaying * the label in error/warning messages, browser developer tools, and platform debugging * utilities. The user agent is free to choose if and how it will use this label. * Note: {@link GPUObjectBase#label} is defined as a {@link USVString} because some user agents may * supply it to the debug facilities of the underlying native APIs. */ label: string; } interface GPUPipelineBase { /** * Gets a {@link GPUBindGroupLayout} that is compatible with the {@link GPUPipelineBase}'s * {@link GPUBindGroupLayout} at `index`. * @param index - Index into the pipeline layout's {@link GPUPipelineLayout#[[bindGroupLayouts]]} * sequence. */ getBindGroupLayout( index: number ): GPUBindGroupLayout; } interface GPURenderCommandsMixin { /** * Sets the current {@link GPURenderPipeline}. * @param pipeline - The render pipeline to use for subsequent drawing commands. */ setPipeline( pipeline: GPURenderPipeline ): undefined; /** * 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. Defaults to `0`. * @param size - Size in bytes of the index data in `buffer`. * Defaults to the size of the buffer minus the offset. */ setIndexBuffer( buffer: GPUBuffer, indexFormat: GPUIndexFormat, offset?: GPUSize64, size?: GPUSize64 ): undefined; /** * 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. Defaults to `0`. * @param size - Size in bytes of the vertex data in `buffer`. * Defaults to the size of the buffer minus the offset. */ setVertexBuffer( slot: GPUIndex32, buffer: GPUBuffer, offset?: GPUSize64, size?: GPUSize64 ): undefined; /** * Draws primitives. * See [[#rendering-operations]] for the detailed specification. * @param vertexCount - The number of vertices to draw. * @param instanceCount - The number of instances to draw. * @param firstVertex - Offset into the vertex buffers, in vertices, to begin drawing from. * @param firstInstance - First instance to draw. */ draw( vertexCount: GPUSize32, instanceCount?: GPUSize32, 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: GP