GPUDevice: createSampler() method

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.

Note: This feature is available in Web Workers.

The createSampler() method of the GPUDevice interface creates a GPUSampler, which controls how shaders transform and filter texture resource data.

Syntax

js
createSampler()
createSampler(descriptor)

Parameters

descriptor Optional

An object containing the following properties:

addressModeU Optional

An enumerated value specifying the behavior of the sampler when the sample footprint width extends beyond the width of the texture. Possible values are:

  • "clamp-to-edge": The texture coordinates are clamped between 0.0 and 1.0, inclusive.
  • "repeat": The texture coordinates wrap to the other side of the texture.
  • "mirror-repeat": The texture coordinates wrap to the other side of the texture, but the texture is flipped when the integer part of the coordinate is odd.

If omitted, addressModeU defaults to "clamp-to-edge".

addressModeV Optional

An enumerated value specifying the behavior of the sampler when the sample footprint height extends beyond the height of the texture. Possible and default values are the same as for addressModeU.

addressModeW Optional

An enumerated value specifying the behavior of the sampler when the sample footprint depth extends beyond the depth of the texture. Possible and default values are the same as for addressModeU.

compare Optional

If specified, the sampler will be a comparison sampler of the specified type. Possible (enumerated) values are:

  • "never": Comparison tests never pass.
  • "less": A provided value passes the comparison test if it is less than the sampled value.
  • "equal": A provided value passes the comparison test if it is equal to the sampled value.
  • "less-equal": A provided value passes the comparison test if it is less than or equal to the sampled value.
  • "greater": A provided value passes the comparison test if it is greater than the sampled value.
  • "not-equal": A provided value passes the comparison test if it is not equal to the sampled value.
  • "greater-equal": A provided value passes the comparison test if it is greater than or equal to the sampled value.
  • "always": Comparison tests always pass.

Comparison samplers may use filtering, but the sampling results will be implementation-dependent and may differ from the normal filtering rules.

label Optional

A string providing a label that can be used to identify the object, for example in GPUError messages or console warnings.

lodMinClamp Optional

A number specifying the minimum level of detail used internally when sampling a texture. If omitted, lodMinClamp defaults to 0.

lodMaxClamp Optional

A number specifying the maximum level of detail used internally when sampling a texture. If omitted, lodMaxClamp defaults to 32.

maxAnisotropy Optional

Specifies the maximum anisotropy value clamp used by the sampler. If omitted, maxAnisotropy defaults to 1.

Most implementations support maxAnisotropy values in a range between 1 and 16, inclusive. The value used will be clamped to the maximum value that the underlying platform supports.

magFilter Optional

An enumerated value specifying the sampling behavior when the sample footprint is smaller than or equal to one texel. Possible values are:

  • "nearest": Return the value of the texel nearest to the texture coordinates.
  • "linear": Select two texels in each dimension and return a linear interpolation between their values.

If omitted, magFilter defaults to "nearest".

Note: The float32-filterable feature needs to be enabled for r32float-, rg32float-, and rgba32float-format GPUTextures to be filterable.

minFilter Optional

An enumerated value specifying the sampling behavior when the sample footprint is larger than one texel. Possible and default values are the same as for magFilter.

mipmapFilter Optional

An enumerated value specifying the behavior when sampling between mipmap levels. Possible and default values are the same as for magFilter.

Return value

A GPUSampler object instance.

Validation

The following criteria must be met when calling createSampler(), otherwise a GPUValidationError is generated and an invalid GPUSampler object is returned:

  • lodMinClamp is equal to or more than 0.
  • lodMaxClamp is equal to or more than lodMinClamp.
  • maxAnisotropy is equal to or more than 1.
  • If maxAnisotropy is more than 1, magFilter, minFilter, and mipmapFilter are "linear".

Examples

The following snippet creates a GPUSampler that does trilinear filtering and repeats texture coordinates:

js
// …

const sampler = device.createSampler({
  addressModeU: "repeat",
  addressModeV: "repeat",
  magFilter: "linear",
  minFilter: "linear",
  mipmapFilter: "linear",
});

The WebGPU samples Shadow Mapping sample uses comparison samplers to sample from a depth texture to render shadows.

Specifications

Specification
WebGPU
# dom-gpudevice-createsampler

Browser compatibility

desktop mobile server
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
createSampler
Chrome – Partial support
Chrome 113 (Release date: 2023-05-02)
footnote Partial support
footnote Supported on ChromeOS, macOS, and Windows.
footnote Supported on Linux (Intel Gen12+ GPUs only) since Chrome 144.
Edge – Partial support
Edge 113 (Release date: 2023-05-05)
footnote Partial support
footnote Supported on ChromeOS, macOS, and Windows.
footnote Supported on Linux (Intel Gen12+ GPUs only) since Edge 144.
Firefox – Partial support
Firefox 141 (Release date: 2025-07-22)
footnote Partial support
footnote Supports all contexts except service workers. See bug 1942431.
footnote Supports Windows since Firefox 141. See bug 1972486.
footnote Supports macOS Tahoe on Apple silicon since Firefox 145. See bug 1992212.
footnote Supports older macOS versions on Apple silicon since Firefox 147. See bug 1993341.
footnote Does not support macOS on Intel CPUs. See bug 2004105.
footnote Does not support Linux. See bug 2006676.
Opera – Partial support
Opera 99 (Release date: 2023-05-16)
footnote Partial support
footnote Supported on ChromeOS, macOS, and Windows.
footnote Supported on Linux (Intel Gen12+ GPUs only) since Opera 128.
Safari – Full support
Safari 26 (Release date: 2025-09-15)
footnote Full support
Chrome Android – Full support
Chrome Android 121 (Release date: 2024-01-23)
footnote Full support
Firefox for Android – No support
Firefox for Android
footnote No support
Opera Android – Full support
Opera Android 81 (Release date: 2024-03-14)
footnote Full support
Safari on iOS – Full support
Safari on iOS 26 (Release date: 2025-09-15)
footnote Full support
Samsung Internet – Full support
Samsung Internet 25 (Release date: 2024-04-24)
footnote Full support
WebView Android – Full support
WebView Android 121 (Release date: 2024-01-23)
footnote Full support
WebView on iOS – Full support
WebView on iOS 26 (Release date: 2025-09-15)
footnote Full support
Deno – No support
Deno 1.8 – 1.31 (Release date: 2021-03-02)
footnote Removed in 1.32 and later
Deno – No support
Deno 1.39 (Release date: 2023-12-14)
disabled
disabled From version 1.39 users must explicitly set the --unstable-webgpu runtime flag.

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
No support
No support
User must explicitly enable this feature.
Has more compatibility info.

See also