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() 기본 제공 함수는 작업 그룹에서 텍스처 메모리 액세스를 동기화하는 데 사용할 수 있습니다.

WGSL 셰이더 코드 상단에 requires-directive를 사용하여 이식 불가능할 가능성을 알리는 requires readonly_and_readwrite_storage_textures;를 사용하는 것이 좋습니다. 다음 예와 문제 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의 스크린샷
https://webgpureport.org에 표시된 어댑터 정보 vkDriverVersion
.

버그 수정

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

Dawn 업데이트

Dawn API에서 wgpuDeviceSetUncapturedErrorCallback으로 설정된 포착되지 않은 오류 콜백은 이제 GPU 기기가 손실된 후 호출되지 않습니다. 이 수정사항은 Dawn을 JavaScript API 사양 및 Blink의 구현과 정렬합니다. 문제 dawn:2459를 참고하세요.

여기에서는 몇 가지 주요 하이라이트만 다룹니다. 커밋의 전체 목록을 확인하세요.

WebGPU의 새로운 기능

WebGPU의 새로운 기능 시리즈에서 다룬 모든 내용의 목록입니다.

Chrome 149~150

Chrome 147~148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

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