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 readonly_and_readwrite_storage_textures;required-directive를 사용하여 비이동성 가능성을 알리는 것이 좋습니다. 다음 예와 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 확장 프로그램을 참고하세요.

<ph type="x-smartling-placeholder">
</ph> WebLLM Chrome 확장 프로그램의 스크린샷.
WebLLM Chrome 확장 프로그램

새 어댑터 정보 속성

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

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

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

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

버그 수정

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

Dawn 업데이트

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

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

WebGPU의 새로운 기능

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