Co nowego w WebGPU (Chrome 118)

François Beaufort
François Beaufort

Obsługa HTMLImageElement i ImageData w metodzie copyExternalImageToTexture()

Metoda copyExternalImageToTexture() w GPUQueue umożliwia skopiowanie zrzutu z obrazu źródłowego, filmu lub obszaru roboczego do danego GPUTexture. Możesz teraz przekazywać obiekty HTMLImageElement i ImageData jako źródło. Zobacz ten przykład i zobacz problem z chromium:1471372.

// Fetch and decode image.
const source = document.createElement("img");
source.src = "my-image.png";
await source.decode();

// Create destination texture.
const size = [source.width, source.height];
const texture = myDevice.createTexture({
 size,
 format: "rgba8unorm",
 usage:
   GPUTextureUsage.COPY_DST |
   GPUTextureUsage.RENDER_ATTACHMENT |
   GPUTextureUsage.TEXTURE_BINDING,
});

// Copies a snapshot taken from the source image into a texture.
myDevice.queue.copyExternalImageToTexture({ source }, { texture }, size);

Eksperymentalna obsługa tekstury pamięci do odczytu i zapisu oraz tylko do odczytu

Typ wiązania tekstury pamięci masowej pozwala wykonywać odczyty tekstur bez próbkowania i zapisywać je w dowolnych pozycjach w cieniowaniu. Gdy funkcja "chromium-experimental-read-write-storage-texture" jest dostępna w GPUAdapter, możesz teraz wysłać żądanie GPUDevice z tą funkcją i ustawić dostęp GPUStorageTexture na "read-write" lub "read-only" podczas tworzenia układu grupy powiązań. Wcześniej limit ten był ograniczony do domeny "write-only".

Aby korzystać z tej funkcji, musisz jawnie włączyć to rozszerzenie w kodzie WGSL za pomocą atrybutu enable chromium_experimental_read_write_storage_texture. Gdy ta opcja jest włączona, możesz używać kwalifikatora dostępu read_write i read na potrzeby tekstur pamięci, wbudowane funkcje textureLoad() i textureStore() zachowują się odpowiednio, a dostępna jest nowa wbudowana funkcja textureBarrier() do synchronizowania dostępu do pamięci tekstur w grupie roboczej. Zobacz ten przykład i problem świt:1972.

Ta funkcja jest nadal w fazie eksperymentalnej i może się zmienić. Podczas ustandaryzowania Chrome uruchom przeglądarkę z flagą --enable-dawn-features=allow_unsafe_apis, aby ją udostępnić.

const feature = "chromium-experimental-read-write-storage-texture";
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has(feature)) {
  throw new Error("Read-write storage texture support is not available");
}
// Explicitly request read-write storage texture support.
const device = await adapter.requestDevice({
  requiredFeatures: [feature],
});

const bindGroupLayout = device.createBindGroupLayout({
  entries: [{
    binding: 0,
    visibility: GPUShaderStage.COMPUTE,
    storageTexture: {
      access: "read-write", // <-- New!
      format: "r32uint",
    },
  }],
});

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_read_write_storage_texture;
  @group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;

  @compute @workgroup_size(1, 1)
  fn main(@builtin(local_invocation_id) local_id: vec3u) {
    var data = textureLoad(tex, vec2i(local_id.xy));
    data.x *= 2;
    textureStore(tex, vec2i(local_id.xy), data);
  }`,
});

// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.

Aktualizacje o świcie

W celu zachowania spójności interfejs API webgpu.h C zmienił nazwy tych pól: requiredFeaturesCount na requiredFeatureCount, pipelineStatisticsCount na pipelineStatisticCount i colorFormatsCount na colorFormatCount. Zobacz problem świt:146040.

Nowy program DawnInfo (podobny do vulkaninfo) umożliwia wyświetlanie przełączników, adapterów, funkcji adapterów i ograniczeń dotyczących adapterów. Ta funkcja jest dostępna podczas budowania o świcie samples. Poniżej znajdziesz dane wyjściowe w sposób zwięzły. Zobacz zmianę daty:149020.

./out/Debug/DawnInfo
Toggles
=======
  Name: allow_unsafe_apis
    Suppresses validation errors on API entry points or parameter combinations
    that aren't considered secure yet.
    http://crbug.com/1138528
[…]

Adapter
=======
VendorID: 0x106B
Vendor: apple
Architecture: common-3
DeviceID: 0x0000
Name: Apple M1 Pro
Driver description: Metal driver on macOS Version 13.5.1 (Build 22G90)
Adapter Type: discrete GPU
Backend Type: Metal
Power: <undefined>

  Features
  ========
   * depth_clip_control
      Disable depth clipping of primitives to the clip volume
      https://bugs.chromium.org/p/dawn/issues/detail?id=1178
[…]

  Adapter Limits
  ==============
    maxTextureDimension1D: 16,384
    maxTextureDimension2D: 16,384
[…]

To tylko niektóre z najważniejszych informacji. Zapoznaj się z pełną listą zatwierdzeń.

Co nowego w WebGPU

Lista wszystkiego, co zostało omówione w serii Co nowego w WebGPU.

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113