Co nowego w WebGPU (Chrome 118)

François Beaufort
François Beaufort

Obsługa elementów HTMLImageElement i ImageData w funkcji copyExternalImageToTexture()

Metoda copyExternalImageToTexture() w GPUQueue umożliwia skopiowanie zrzutu wykonanego ze źródłowego obrazu, filmu lub odbitki na płótnie do danego elementu GPUTexture. Możesz teraz przekazywać obiekty HTMLImageElement i ImageData jako źródło. Zapoznaj się z tym przykładem i problemem 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 tekstur pamięci masowej do odczytu i zapisu oraz tylko do odczytu

Typ powiązania tekstur pamięci masowej pozwala przeprowadzać odczyty tekstur bez próbkowania i przechowywać w dowolnych pozycjach w cieniach. Gdy funkcja "chromium-experimental-read-write-storage-texture" będzie dostępna w GPUAdapter, możesz teraz zażądać GPUDevice z tą funkcją i ustawić dostęp GPUStorageTexture na poziomie "read-write" lub "read-only" podczas tworzenia układu grupy powiązań. Wcześniej dostęp do tych danych miał tylko "write-only".

Aby skorzystać z tej możliwości, musisz włączyć to rozszerzenie w swoim kodzie WGSL za pomocą enable chromium_experimental_read_write_storage_texture. Po włączeniu możesz używać kwalifikatorów dostępu read_write i read do tekstur pamięci masowej, funkcje wbudowane textureLoad() i textureStore() zachowują się odpowiednio, a nowa funkcja wbudowana textureBarrier() jest dostępna do synchronizowania dostępu do pamięci tekstur w grupie roboczej. Zobacz poniższy przykład i ten problem:1972.

Ta funkcja jest nadal w fazie eksperymentalnej i może się zmienić. Podczas standaryzacji możesz używać Chrome z flagą --enable-dawn-features=allow_unsafe_apis, aby go 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.

Powiadomienia o świcie

Aby zachować spójność w interfejsie API webgpu.h, zmieniliśmy nazwy tych pól: requiredFeaturesCount na requiredFeatureCount, pipelineStatisticsCount na pipelineStatisticCount, a colorFormatsCount na colorFormatCount. Zobacz świt problemu:146040.

Nowy program DawnInfo (podobny do vulkaninfo) umożliwia tworzenie listy przełączników, adapterów, funkcji adapterów i ograniczeń dotyczących adapterów. Jest dostępna podczas budowania: samples o świcie. Poniżej przedstawiamy mocno przycięte dane wyjściowe. Zobacz zmianę w świcie: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 kwestii. Zobacz pełną listę zatwierdzeń.

Co nowego w WebGPU

Lista wszystkich zagadnień omówionych w serii Co nowego w WebGPU.

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