WebGPU의 새로운 기능 (Chrome 124)

François Beaufort
François Beaufort

읽기 전용 및 읽기-쓰기 스토리지 텍스처

스토리지 텍스처 결합 유형을 사용하면 셰이더가 TEXTURE_BINDING 사용을 추가하지 않고도 스토리지 텍스처에서 읽을 수 있으며 특정 형식에서 혼합 읽기 및 쓰기를 수행할 수 있습니다. navigator.gpu.wgslLanguageFeatures"readonly_and_readwrite_storage_textures" WGSL 언어 확장 프로그램이 있는 경우 이제 바인드 그룹 레이아웃을 만들 때 GPUStorageTexture 액세스를 "read-write" 또는 "read-only"로 설정할 수 있습니다. 이전에는 "write-only"로 제한되었습니다.

그러면 WGSL 셰이더 코드가 저장소 텍스처에 read_writeread 액세스 한정자를 사용할 수 있고, textureLoad()textureStore() 내장 함수가 적절하게 작동하며, 새로운 textureBarrier() 내장 함수를 사용하여 작업 그룹의 텍스처 메모리 액세스를 동기화할 수 있습니다.

required-directive를 사용하여 WGSL 셰이더 코드 상단에 requires readonly_and_readwrite_storage_textures;로 이동성 가능성을 알리는 것이 좋습니다. 다음 예와 issue dawn:1972를 참고하세요.

if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
  throw new Error("Read-only and read-write storage textures are not available");
}

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

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

const shaderModule = device.createShaderModule({ code: `
  requires readonly_and_readwrite_storage_textures;

  @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.

서비스 워커 및 공유 워커 지원

Chrome의 WebGPU는 웹 워커 지원을 한 단계 업그레이드하여 이제 서비스 워커공유 워커를 모두 지원합니다. 서비스 워커를 사용하여 백그라운드 작업과 오프라인 기능을 개선하고 공유 워커를 사용하여 스크립트에서 리소스를 효율적으로 공유할 수 있습니다. 문제 chromium:41494731을 참고하세요.

확장 프로그램 서비스 워커에서 WebGPU를 사용하는 방법을 알아보려면 Chrome 확장 프로그램 샘플WebLLM Chrome 확장 프로그램을 확인하세요.

WebLLM Chrome 확장 프로그램 스크린샷
WebLLM Chrome 확장 프로그램

새 어댑터 정보 속성

사용자가 chrome://flags/#enable-webgpu-developer-features에서 'WebGPU 개발자 기능' 플래그를 사용 설정한 경우 이제 requestAdapterInfo()를 호출할 때 비표준 d3dShaderModelvkDriverVersion 어댑터 정보 속성을 사용할 수 있습니다. 지원되는 경우:

  • d3dShaderModel는 지원되는 최대 D3D 셰이더 모델 번호입니다. 예를 들어 값 62는 현재 드라이버가 HLSL SM 6.2를 지원함을 나타냅니다. 문서문제 dawn:1254를 참고하세요.

  • vkDriverVersion는 Vulkan 드라이버의 공급업체 지정 버전 번호입니다. 문서chromium:327457605를 참고하세요.

어댑터 정보에 vkDriverVersion이 표시된 https://webgpureport.org 스크린샷
어댑터 정보 vkDriverVersionhttps://webgpureport.org에 표시됩니다.

버그 수정

layout: "auto"를 사용하여 일치하는 bindgroup이 있는 두 파이프라인을 만든 다음 첫 번째 파이프라인으로 바인드 그룹을 만들고 두 번째 파이프라인에서 사용하면 이제 GPUValidationError가 발생합니다. 이를 허용했던 구현 버그가 이제 적절한 테스트를 통해 수정되었습니다. 문제 dawn:2402를 참조하세요.

여명 업데이트

이제 Dawn API에서 GPU 기기가 손실된 후에는 wgpuDeviceSetUncapturedErrorCallback로 설정된 캡처되지 않은 오류 콜백이 호출되지 않습니다. 이 수정사항은 Dawn이 JavaScript API 사양 및 Blink 구현과 일치합니다. 문제 dawn:2459를 참조하세요.

여기에서는 주요 특징 중 일부만 다루었습니다. 전체 커밋 목록을 확인하세요.

WebGPU의 새로운 기능

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