GPUDevice: createTexture() method
The createTexture() method of the GPUDevice interface creates a GPUTexture in which to store 1D, 2D, or 3D arrays of data, such as images, to use in GPU rendering operations.
Syntax
createTexture(descriptor)
Parameters
-
descriptor
-
An object containing the following properties:
dimension Optional
-
An enumerated value indicating the dimension level of the texture. Possible values are:
"1d": The texture is one-dimensional.
"2d": The texture is two-dimensional or an array of two-dimensional layers.
"3d": The texture is three-dimensional.
dimension defaults to "2d" if the value is omitted.
-
format
-
An enumerated value specifying the format of the texture. See the Texture formats section of the specification for all the possible values.
label Optional
-
A string providing a label that can be used to identify the object, for example in GPUError messages or console warnings.
mipLevelCount Optional
-
A number specifying the number of mip levels the texture will contain. If omitted, this defaults to 1.
sampleCount Optional
-
A number specifying the texture's sample count. To be valid, the value must be 1 or 4. If omitted, this defaults to 1. A value higher than 1 indicates a multi-sampled texture.
-
size
-
An object or array specifying the width, height, and depth/array layer count of the texture. The width value must always be specified, while the height and depth/array layer count values are optional and will default to 1 if omitted.
What follows is a sample size array:
The object equivalent would look like this:
size: {
width: 16,
height: 16,
depthOrArrayLayers: 2
}
-
usage
-
The bitwise flags representing the allowed usages for the GPUTexture. The possible values are in the GPUTexture.usage value table.
Note that multiple possible usages can be specified by separating values with pipe symbols, for example:
usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT;
viewFormats Optional
-
An array of enumerated values specifying other texture formats permitted when calling GPUTexture.createView() on this texture, in addition to the texture format specified in its format value.
Return value
A GPUTexture object instance.
Validation
The following criteria must be met when calling createTexture(), otherwise a GPUValidationError is generated and an invalid GPUTexture object is returned:
- A valid
usage is specified.
- The values specified in
size (width, height, or depth/array layer count) are greater than 0.
mipLevelCount is greater than 0.
sampleCount is equal to 1 or 4.
- If
dimension is set to "1d":
- If
dimension is set to "2d":
- The
size width and height values are less than or equal to the GPUDevice's maxTextureDimension2D limit.
- The
size depth/array layer count value is less than or equal to the GPUDevice's maxTextureArrayLayers limit.
- If
dimension is set to "3d":
- The
size width value is a multiple of the texel block width.
- The
size height value is a multiple of the texel block height.
- If
sampleCount is greater than 1:
mipLevelCount is equal to 1.
- The
size depth/array layer count value is equal to 1.
usage includes the GPUTextureUsage.RENDER_ATTACHMENT flag.
usage does not include the GPUTextureUsage.STORAGE_BINDING flag.
- The specified format supports multi-sampling.
- The
mipLevelCount value is less than or equal to the maximum miplevel count.
- The formats specified in
format and viewFormats are compatible with one another.
- If
usage includes the GPUTextureUsage.RENDER_ATTACHMENT flag:
format is a renderable format (meaning a color renderable format, or a depth-or-stencil format).
dimension is set to "2d".
- If
usage includes the GPUTextureUsage.STORAGE_BINDING flag:
- The specified
format includes the STORAGE_BINDING capability (see the Plain color formats table for reference).
Examples
In the WebGPU samples Textured Cube sample, a texture to use on the faces of a cube is created by:
let cubeTexture: GPUTexture;
{
const img = document.createElement("img");
img.src = new URL(
"../../../assets/img/Di-3d.png",
import.meta.url
).toString();
await img.decode();
const imageBitmap = await createImageBitmap(img);
cubeTexture = device.createTexture({
size: [imageBitmap.width, imageBitmap.height, 1],
format: "rgba8unorm",
usage:
GPUTextureUsage.TEXTURE_BINDING |
GPUTextureUsage.COPY_DST |
GPUTextureUsage.RENDER_ATTACHMENT,
});
device.queue.copyExternalImageToTexture(
{ source: imageBitmap },
{ texture: cubeTexture },
[imageBitmap.width, imageBitmap.height]
);
}
Specifications
Browser compatibility
|
Desktop |
Mobile |
|
Chrome |
Edge |
Firefox |
Internet Explorer |
Opera |
Safari |
WebView Android |
Chrome Android |
Firefox for Android |
Opera Android |
Safari on IOS |
Samsung Internet |
createTexture |
113Currently supported on ChromeOS, macOS, and Windows only.
|
113Currently supported on ChromeOS, macOS, and Windows only.
|
previewCurrently supported on Linux and Windows only.
|
No |
99Currently supported on ChromeOS, macOS, and Windows only.
|
No |
No |
No |
No |
No |
No |
No |
See also